11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenShift on Power 完全オフライン環境でのインストール

Posted at

はじめに

本記事ではOpenShift on Powerの完全オフライン環境でのインストールの手順を紹介します。

OpenShiftのBastionノードのみがインターネットに接続できる、といった一部のノードがインターネット接続できる環境ではなく、すべてのノードがインターネットアクセスが不可の完全オフライン環境でのインストール手順となります。

そのため、まずインストールに必要なファイル群を別環境にて、ダウンロードする必要があります。ダウンロードしたファイル群はリムーバブルメディアなどでオフライン環境に持ち込み、インストールを行う流れとなります。

今回は環境をPower10 S1022上に構築しました。バージョンは4.13を使用しています。

環境構成

以下の環境構成でLPARをHMCより作成しました。Master3台 / Worker2台の標準構成となります。

LPAR OS CPU(EC/VP) Memory Storage
Bastion RHEL 8.7 0.5/2 16GB 200GB
Bootstrap RHCOS 0.5/2 16GB 100GB
Master x 3 RHCOS 0.5/2 16GB 100GB
Worker x 2 RHCOS 0.5/2 16GB 100GB

またネットワーク構成はローカルネットワークのみで192.168.82.0/24のネットワークとなります。

なお、今回はbastionのセットアップにRed Hat社提供のocp4-helpernode
https://github.com/redhat-cop/ocp4-helpernode
各種ミラーレポジトリの作成に同じくRed Hat社提供のocp-mirror
https://github.com/openshift/oc-mirror
を使用しています。
これらのツールの使用により、手順がかなり簡略化できます。

事前準備

まずインターネットに接続できる別環境にて、インストールに必要なファイル群をダウンロードします。
別環境もPowerアーキテクチャーの環境が推奨となりますが、追加のOperatorを導入しないといった単純インストールであれば、x86環境でもファイル群のダウンロードは可能です。

今回はPower環境にて、RHEL8.7LEのLPARを使用してファイル準備を行いました。

まず関連パッケージの導入をしておきます。

# dnf repolist
# dnf install git yum-utils podman

ocp4-helpernodeで使用するansible rpmをダウンロードします。

# mkdir -p /download/rpms
# cd /download/rpms
# wget https://dl.fedoraproject.org/pub/epel/8/Everything/ppc64le/Packages/a/ansible-7.2.0-1.el8.noarch.rpm
# mkdir /data
# cp /download/rpms/ansible-7.2.0-1.el8.noarch.rpm /data

ocp4-helpernodeおよびnfs provisionerのgitレポジトリをダウンロードします。

# mkdir /download/git
# cd /download/git
# git clone https://github.com/RedHatOfficial/ocp4-helpernode
# tar czvf ocp4-helpernode.tgz ocp4-helpernode; rm -rf ocp4-helpernode
# git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git nfs-subdir
# tar czvf nfs-subdir.tgz nfs-subdir; rm -rf nfs-subdir
# cp ocp4-helpernode.tgz nfs-subdir.tgz /data

OpenShiftのインストールファイル各種をダウンロードします。

# mkdir /download/ocp-files
# cd /download/ocp-files
# wget https://mirror.openshift.com/pub/openshift-v4/ppc64le/dependencies/rhcos/4.13/4.13.0/rhcos-live-rootfs.ppc64le.img
# wget https://mirror.openshift.com/pub/openshift-v4/ppc64le/dependencies/rhcos/4.13/4.13.0/rhcos-live-initramfs.ppc64le.img
# wget https://mirror.openshift.com/pub/openshift-v4/ppc64le/dependencies/rhcos/4.13/4.13.0/rhcos-live-kernel-ppc64le
# wget https://mirror.openshift.com/pub/openshift-v4/ppc64le/clients/ocp/4.13.0/openshift-client-linux-4.13.0.tar.gz
# wget https://mirror.openshift.com/pub/openshift-v4/ppc64le/clients/ocp/4.13.0/openshift-install-linux-4.13.0.tar.gz
# wget https://get.helm.sh/helm-v3.6.3-linux-ppc64le.tar.gz
# cp -r /download/ocp-files /data

完全オフライン環境では、ミラーレジストリーサーバーが必要となり、これをpodman上のコンテナにて構築するため、コンテナイメージをダウンロードします。

# mkdir /download/registry
# podman pull docker.io/library/registry:latest
# podman save docker.io/library/registry:latest -o /download/registry/registry.tar
# cp /download/registry/registry.tar /data

次にミラーレジストリーサーバーの中身、つまりミラーするレジストリーをoc-mirrorにより一括ダウンロードしていきます。
oc-mirrorはPower版はバイナリ提供がまだなので、まずoc-mirrorのバイナリを作成します。

# cd /download/git
# git clone https://github.com/openshift/oc-mirror.git
# cd oc-mirror
# git checkout release-4.13
# sed -i s/linux-amd64.tar.gz/linux-ppc64le.tar.gz/ Dockerfile
# podman build -f Dockerfile -t local/go-toolset .
# podman run -it --rm --privileged -v ${PWD}:/build:z local/go-toolset
# cp bin/oc-mirror /usr/local/bin
# oc-mirror version --output=yaml
# cp bin/oc-mirror /data

oc-mirrorはoc clientのプラグインとなるため、oc-mirrorを使用するためにoc clientを導入します。

# tar xzvf /download/ocp-files/openshift-client-linux-4.13.0.tar.gz oc
# mv oc /usr/local/bin

一括ダウンロードに必要なyaml設定ファイルを作成します。今回はimageset-config.yamlという名前で下記のファイルを作成しました。

  • OpenShiftインストールに必要な4.13.0イメージ
  • gitops operator
  • ibm common service operator
  • UBI8コンテナイメージ
  • NFS provisionerコンテナイメージ
  • NFS provisionerのテストに必要なbusyboxコンテナイメージ
    を一括ダウンロードする設定ファイルとなります。
imageset-config.yaml
kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v1alpha2
storageConfig:
  local:
    path: /download/mirror-ocp
mirror:
  platform:
    architectures:
      - "ppc64le"
    channels:
    - name: stable-4.13
      type: ocp
      minVersion: '4.13.0'
      maxVersion: '4.13.0'
    graph: false
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.13
    full: false
    packages:
    - name: openshift-gitops-operator
      channels:
      - name: latest
  - catalog: icr.io/cpopen/ibm-operator-catalog:latest
    full: false
    packages:
    - name: ibm-common-service-operator
      channels:
      - name: v3.23
  additionalImages:
  - name: registry.redhat.io/ubi8/ubi:latest
  - name: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.2
  - name: docker.io/library/busybox:stable
  helm: {}

ダウンロードには少なくともOpenShiftのpull secretが必要となるため、下記よりダウンロードを行い、/root/.docker/config.jsonに保存をしておきます。
https://cloud.redhat.com/openshift/install/pull-secret

一括ダウンロードを以下のコマンドで行います。

# mkdir /download/mirror-ocp
# oc mirror --config=imageset-config.yaml file:///download/mirror-ocp
# cp /download/mirror-ocp/mirror_seq1_000000.tar /data

上記設定ファイルだと、1つのtarファイルにまとめてくれるのですが、ファイルサイズが大きくなる(今回は20GB程度)となるため、ファイルサイズを抑えたい場合は、"archiveSize: x"オプションをyamlに指定することで指定したサイズの分割が可能です。

これで/dataディレクトリにすべてのファイルをダウンロードできたので、こちらのファイルをオフライン環境に持ち込みます。

Bastionの構築・設定

ここからは完全オフライン環境での作業となります。

まずBastionサーバーを構築します。今回ミラーレジストリーサーバーもBastion上に構築しました。BastionサーバーはRHEL8.7LEを仮想DVDにて"Server with GUI"オプションにてインストールしました。

まず仮想DVDを使用したyumレポジトリを作成します。
DVDをmountします。

# mkdir /media/rhel8dvd
# mount /dev/cdrom /media/rhel8dvd

下記の内容の/etc/yum.repos.d/dvd.repoファイルを作成して完成です。

[dvd-BaseOS]
name=DVD for RHEL8 - BaseOS
baseurl=file:///media/rhel8dvd/BaseOS
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[dvd-AppStream]
name=DVD for RHEL8 - AppStream
baseurl=file:///media/rhel8dvd/AppStream
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

この時点で/dataに持ち込んだファイルを展開しておきます。
必要なrpmをインストールします。

# dnf repolist
# dnf install git python3-cryptography
# dnf install /data/ansible-7.2.0-1.el8.noarch.rpm

ミラーレジストリーサーバーのコンテナイメージを展開します。

# podman load -i /data/registry.tar

ocp4-helpernodeを使用して各種セットアップを行います。
まずgitレポジトリを展開します。

# cd
# tar xzvf /data/ocp4-helpernode.tgz
# cd ocp4-helpernode

設定ファイルをvars.yamlという名前で作成します。

vars.yaml
---
disk: sda
helper:
  name: "bastion"
  ipaddr: "192.168.82.21"
  networkifacename: "env3"
dns:
  domain: "ocptest.com"
  clusterid: "ocp4"
#  forwarder1: "8.8.8.8"
#  forwarder2: "8.8.4.4"
dhcp:
  router: "192.168.82.21"
  bcast: "192.168.127.255"
  netmask: "255.255.128.0"
  poolstart: "192.168.82.22"
  poolend: "192.168.82.27"
  ipid: "192.168.0.0"
  netmaskid: "255.255.128.0"
chronyconfig:
  enabled: true
  content:
    - server: 192.168.82.21
      options: iburst
bootstrap:
  name: "bootstrap"
  ipaddr: "192.168.82.22"
  macaddr: "b2:c1:d4:f0:85:03"
masters:
  - name: "master0"
    ipaddr: "192.168.82.23"
    macaddr: "b2:c1:d2:d6:39:03"
  - name: "master1"
    ipaddr: "192.168.82.24"
    macaddr: "b2:c1:dd:59:5d:03"
  - name: "master2"
    ipaddr: "192.168.82.25"
    macaddr: "b2:c1:d8:e8:a9:03"
workers:
  - name: "worker0"
    ipaddr: "192.168.82.26"
    macaddr: "b2:c1:d1:68:16:03"
  - name: "worker1"
    ipaddr: "192.168.82.27"
    macaddr: "b2:c1:d9:87:62:03"
setup_registry:
  deploy: true
  autosync_registry: false
  registry_image: "docker.io/registry:latest"
  local_repo: "ocp4/openshift4"
  product_repo: "openshift-release-dev"
  release_name: "ocp-release"
  release_tag: "4.13.0-ppc64le"
ppc64le: true
ocp_bios: "file:///data/ocp-files/rhcos-live-rootfs.ppc64le.img"
ocp_initramfs: "file:///data/ocp-files/rhcos-live-initramfs.ppc64le.img"
ocp_install_kernel: "file:///data/ocp-files/rhcos-live-kernel-ppc64le"
ocp_client: "file:///data/ocp-files/openshift-client-linux-4.13.0.tar.gz"
ocp_installer: "file:///data/ocp-files/openshift-install-linux-4.13.0.tar.gz"
helm_source: "file:///data/ocp-files/helm-v3.6.3-linux-ppc64le.tar.gz"

LPARの各MACアドレスはHMCから以下のコマンドで確認できます。HMCではアドレスは大文字で表示されますが、vars.yamlには小文字で記載します。

hscroot@hmc:~> lshwres -m <MANAGED-SYSTEM> -r virtualio --rsubtype eth --level lpar -F lpar_name,mac_addr

pull-secretをセットアップします。
今回は直接レジストリーにアクセスしないため、ダミーのものを設定します。

cd 
mkdir .openshift
echo "{}" > .openshift/pull-secret

Ansibleプレイブックを実行します。

# cd ocp4-helpernode
# ansible-playbook -e @vars.yaml tasks/main.yml

プレイブックの実行が終わると、以下の構成が完了します。

  • bind (DNS) の導入、設定
  • dhcpdの導入、設定
  • tftpdの導入、設定
  • httpdの導入、設定
  • haproxyの導入、設定
  • NFS v4の導入、設定
  • ネットワークインストール用の設定ファイルの生成(grub.cfgなど)
  • ocコマンドのダウンロードと導入
  • openshift-installコマンドのダウンロードと導入
  • firewallの構成
  • PXEブート用のmetal rawイメージ、initramfsイメージ、カーネル・イメージのダウンロードと配置
  • RHCOSで使用するSSHキーの生成
  • ミラーレジストリーサーバーの導入、設定

今回は追加でBastion上にNTPサーバー(chrony)を導入します。

# vi /etc/chrony.conf
# firewall-cmd --add-service=ntp --permanent
# firewall-cmd --reload
# systemctl enable chronyd
# systemctl start chronyd
# systemctl status chronyd

今回/etc/chrony.confは以下を使用しました。

/etc/chrony.conf
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.0.0/17
local stratum 8
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony

次にミラーレジストリーサーバーに用意したミラーイメージを展開します。
oc-mirrorを使用して1コマンドで展開できます。

# cd
# mkdir .docker
# cp .openshift/pull-secret-updated .docker/config.json
# cp /data/oc-mirror /usr/local/bin/
# oc mirror version
# oc mirror --from=/data/mirror_seq1_000000.tar docker://registry.ocp4.ocptest.com:5000

コマンドが正常に終了すると、oc-mirror-workspace/results-xxxxというディレクトリができるので確認します。こちらのディレクトリはOperatorのインポート等にこの後使用します。

ミラーレジストリーサーバーが正常に動作しているかの確認を以下のコマンドで行います。

curl -u admin:admin https://registry.ocp4.ocptest.com:5000/v2/_catalog
curl -u admin:admin https://registry.ocp4.ocptest.com:5000/v2/openshift/release/tags/list
podman image search registry.ocp4.ocptest.com:5000/
podman image search --list-tags registry.ocp4.ocptest.com:5000/openshift/release

OpenShiftの導入

Bastion上にインストールされたopenshift-installコマンドを使用してOpenShiftの導入を行います。
基本的な流れはOpenShiftのインストールガイドの通りとなります。
https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.13/html/installing/installing-on-ibm-power

次にinstall-config.yamlを作成します。今回は以下のように作成しています。
(実行前に~/.openshift/pull-secret-updated, /opt/registry/certs/domain.crtおよび~/.ssh/helper_rsa.pubが存在するのを確認しておきます)

# cat <<EOF > install-config.yaml
apiVersion: v1
baseDomain: ocptest.com
compute:
- hyperthreading: Enabled
  name: worker
  replicas: 0
controlPlane:
  hyperthreading: Enabled
  name: master
  replicas: 3
metadata:
  name: ocp4
networking:
  clusterNetworks:
  - cidr: 10.254.0.0/16
    hostPrefix: 24
  networkType: OpenShiftSDN
  serviceNetwork:
  - 172.30.0.0/16
platform:
  none: {}
pullSecret: '$(< ~/.openshift/pull-secret-updated)'
sshKey: '$(< ~/.ssh/helper_rsa.pub)'
additionalTrustBundle: |
$(< /opt/registry/certs/domain.crt)
imageContentSources:
- mirrors:
  - registry.ocp4.ocptest.com:5000/openshift/release-images
  source: quay.io/openshift-release-dev/ocp-release
- mirrors:
  - registry.ocp4.ocptest.com:5000/openshift/release
  source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
EOF

作成されたinstall-config.yamlの
BEGIN CERTIFICATE から
END CERTIFICATE まで
の部分に2文字分の空白を入れてインデントします。
(ここはできれば自動化したいところです。。:smiley_cat:)

manifestsファイルを作成します。

# cd
# mkdir config
# cp install-config.yaml config
# openshift-install create manifests --dir=config

mastersSchedulableをfalseにしてmasterにpodがschedulingされないようにします。

# sed -i 's/mastersSchedulable: true/mastersSchedulable: false/g' config/manifests/cluster-scheduler-02-config.yml

ocp4-helpernodeで設定したNTP設定を反映させます。

cp ocp4-helpernode/machineconfig/* config/openshift/

ignitionファイルを作成して展開します。

# openshift-install create ignition-configs --dir=config
# tree config
config
|-- auth
|   |-- kubeadmin-password
|   `-- kubeconfig
|-- bootstrap.ign
|-- master.ign
|-- metadata.json
`-- worker.ign
# cp config/*.ign /var/www/html/ignition/
# restorecon -vR /var/www/html/
# chmod o+r /var/www/html/ignition/*.ign

HMCより各ノード(bootstrap/master0,1,2/worker0,1)のPXEブートを行い、OpenShiftの導入を開始します。

hscroot@hmc:~> lpar_netboot -x -t ent -m <MAC-ADDR> -s auto -d auto <LPAR-NAME> <PROFILE-NAME> <MANAGED-SYSTEM>

ブートストラッププロセスを以下のコマンドで確認します。

# openshift-install --dir=config wait-for bootstrap-complete --log-level=info
INFO Waiting up to 20m0s (until 9:45PM) for the Kubernetes API at https://api.ocp4.ocptest.com:6443... 
INFO API v1.26.3+b404935 up                       
INFO Waiting up to 30m0s (until 9:55PM) for bootstrapping to complete... 
INFO It is now safe to remove the bootstrap resources 

http://(Bastion IP):9000 へアクセスすることで各サーバーの稼働状況も確認できます。
しばらくすると、クラスターへログインも可能となります。

# export KUBECONFIG=/root/config/auth/kubeconfig
# oc whoami
system:admin
# oc get nodes

以下のコマンドでCSRの状態を確認し、Pendingがあれば承認します。

# oc get csr
# oc adm certificate approve <csr_name>

clusteroperatorがすべてAvailableかつDegradedになっていないことを確認します。

# oc get clusteroperators
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
authentication                             4.13.0    True        False         False      73s     
baremetal                                  4.13.0    True        False         False      23m     
cloud-controller-manager                   4.13.0    True        False         False      27m     
cloud-credential                           4.13.0    True        False         False      31m     
cluster-autoscaler                         4.13.0    True        False         False      21m     
config-operator                            4.13.0    True        False         False      24m     
console                                    4.13.0    True        False         False      6m54s   
control-plane-machine-set                  4.13.0    True        False         False      23m     
csi-snapshot-controller                    4.13.0    True        False         False      23m     
dns                                        4.13.0    True        False         False      22m     
etcd                                       4.13.0    True        False         False      22m     
image-registry                             4.13.0    True        False         False      15m     
ingress                                    4.13.0    True        False         False      9m28s   
insights                                   4.13.0    True        False         False      17m     
kube-apiserver                             4.13.0    True        False         False      15m     
kube-controller-manager                    4.13.0    True        False         False      20m     
kube-scheduler                             4.13.0    True        False         False      20m     
kube-storage-version-migrator              4.13.0    True        False         False      23m     
machine-api                                4.13.0    True        False         False      22m     
machine-approver                           4.13.0    True        False         False      23m     
machine-config                             4.13.0    True        False         False      10m     
marketplace                                4.13.0    True        False         False      23m     
monitoring                                 4.13.0    True        False         False      7m4s    
network                                    4.13.0    True        False         False      24m     
node-tuning                                4.13.0    True        False         False      21m     
openshift-apiserver                        4.13.0    True        False         False      15m     
openshift-controller-manager               4.13.0    True        False         False      19m     
openshift-samples                          4.13.0    True        False         False      18m     
operator-lifecycle-manager                 4.13.0    True        False         False      23m     
operator-lifecycle-manager-catalog         4.13.0    True        False         False      22m     
operator-lifecycle-manager-packageserver   4.13.0    True        False         False      18m     
service-ca                                 4.13.0    True        False         False      24m     
storage                                    4.13.0    True        False         False      24m

最後にクラスターのインストールプロセスの完了を確認します。
WebコンソールへログインするためのURLとユーザーID/パスワードが表示されます。

# openshift-install --dir=config wait-for install-complete --log-level=info
INFO Waiting up to 40m0s (until 10:31PM) for the cluster at https://api.ocp4.ocptest.com:6443 to initialize... 
INFO Checking to see if there is a route at openshift-console/console... 
INFO Install complete!                            
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/config/auth/kubeconfig' 
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp4.ocptest.com 
INFO Login to the console with user: "kubeadmin", and password: "xxxxx" 

インストール後の作業

OperatorHubはオフライン環境では使用できないため一旦すべてのsourceをdisableにします。

# oc patch OperatorHub cluster --type json -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'

ミラーレジストリーの反映を行います。先ほどoc-mirrorで作られたディレクトリを参照します。
ImageContentPolicyとCatalogSourceの反映およびrelease signatureの反映を行います。

# oc apply -f oc-mirror-workspace/results-xxxx/
# oc apply -f oc-mirror-workspace/results-xxxx/release-signatures/

WebコンソールのOperatorHubなどで、ミラーされたOperatorが表示されるか確認を行います。

次にimage registryの設定を行います。今回はBastion上のNFSサーバーを使用しました。
以下の内容のimage-storage.yamlという名前のファイルを作成します。

image-storage.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: image-registry-pv
spec:
  capacity:
    storage: 100Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: image-registry-storage
    namespace: openshift-image-registry
  accessModes:
  - ReadWriteMany
  nfs:
    path: /export/image-registry
    server: 192.168.82.21
  persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  finalizers:
  - kubernetes.io/pvc-protection
  name: image-registry-storage
  namespace: openshift-image-registry
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 100Gi

registryを設定します。

# mkdir /export/image-registry
# chmod 777 /export/image-registry
# oc apply -f image-storage.yaml

registryの設定を修正します。

# oc edit configs.imageregistry.operator.openshift.io -n openshift-image-registry

spec.managementState を Removed から Managedに変更します
spec.storage を {} から以下に変更します。

spec:
  managementState: Managed
  storage:
    pvc:
      claim: image-registry-storage

image registryが使用可能であることを確認します。

# oc get co image-registry

外部経路を使用可能にします。

# oc -n openshift-image-registry patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge

最後にPVのdefault storage classとしてNFS client provisionerを設定します。
こちらもBastionのNFSサーバーを使用しています。
以下のコマンドで設定ファイルを作成していきます。

# oc create namespace openshift-nfs-storage
# oc label namespace openshift-nfs-storage "openshift.io/cluster-monitoring=true"
# cd
# tar xzvf /data/nfs-subdir.tgz
# cd nfs-subdir/
# oc project openshift-nfs-storage
# NAMESPACE=`oc project -q`
# sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/rbac.yaml ./deploy/deployment.yaml
# oc adm policy add-scc-to-user hostmount-anyuid system:serviceaccount:$NAMESPACE:nfs-client-provisioner

deploy/deployment.yamlのcontainersとvolumesの部分を以下のように変更します。

containers:
  - name: nfs-client-provisioner
    image: registry.ocp4.ocptest.com:5000/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.2
    volumeMounts:
      - name: nfs-client-root
        mountPath: /persistentvolumes
    env:
      - name: PROVISIONER_NAME
        value: k8s-sigs.io/nfs-subdir-external-provisioner
      - name: NFS_SERVER
        value: 192.168.82.21
      - name: NFS_PATH
        value: /export
volumes:
  - name: nfs-client-root
    nfs:
      server: 192.168.82.21
      path: /export

deploy/class.yamlを以下のように変更します。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client
  annotations:
    storageclass.kubernetes.io/is-default-class: 'true'
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
  archiveOnDelete: "false"
reclaimPolicy: Delete
volumeBindingMode: Immediate

設定を実施し、provisionerがreadyになるまで待ちます。

# oc create -f deploy/rbac.yaml
# oc create -f deploy/deployment.yaml
# oc create -f deploy/class.yaml
# oc wait --for=condition=ready -n openshift-nfs-storage -l app=nfs-client-provisioner pod
pod/nfs-client-provisioner-6cc66c5945-2d2xr condition met

provisionerのテストを行ってみます。
まずdeploy/test-pod.yamlのimage部分を下記のように変更し、ミラーレジストリーのimageを使用するようにします。

image: registry.ocp4.ocptest.com:5000/library/busybox:stable

testのpod作成後、NFSサーバー側にディレクトリが作成されているか確認してみます。

# oc create -f deploy/test-claim.yaml -f deploy/test-pod.yaml
# oc get pods -n openshift-nfs-storage
# ls /export
# oc delete -f deploy/test-pod.yaml -f deploy/test-claim.yaml
# ls /export

TIPS

インストールの各ノードのエラーは各ノードへログインしてjournalctlコマンドで確認できます。

# ssh bootstrap
# ssh master0
# ssh worker0

ocp4-helpernodeにてインストールされるhelpernodecheckコマンドにてbastionの各種情報は参照できます。

# helpernodecheck
Usage:
helpernodecheck {dns-masters|dns-workers|dns-etcd|dns-other|local-registry-info|install-info|haproxy|services|nfs-info}

TroubleShoot

OpenShiftインストール時にimageがミラーレジストリーサーバーからpullできない

ミラーレジストリーサーバーへのアクセスを下記コマンドで確認します。

# curl -u admin:admin https://registry.ocp4.ocptest.com:5000/v2/_catalog

応答がない場合は、下記コマンドでミラーレジストリーサーバーのサービスをリスタートします。

# systemctl restart local-registry

NTPサーバーとの同期ができない

NTPサーバーとの接続を各ノードで確認します。(例:master0)

# ssh master0
# sudo -i
# chronyc sources
# chronyc sourcestats
# chronyc ntpdata

sourcesコマンドで?が表示されるなどNTPサーバー側に問題がありそうな場合は、Bastion上のNTPサーバーをrestartさせてみます。

# systemctl restart chronyd

Reference

Ristricted network install on Power
Mirroring images for a disconnected installation using the oc-mirror plugin
Mirroring OpenShift Registries: The Easy Way
GitHub: ocp4-helpernode
GitHub: oc-mirror

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?