5.2.5. AWS でのカスタム /var パーティションを持つ新規 RHCOS ワーカーノードの追加
OpenShift Container Platform は、ブートストラップ時に処理されるマシン設定を使用したインストール時のデバイスのパーティション設定をサポートします。ただし、/var パーティション設定を使用する場合は、デバイス名はインストール時に決定する必要があり、変更することはできません。デバイス命名スキーマが異なる場合は、異なるインスタンスタイプをノードとして追加することはできません。たとえば、/var パーティションを m4.large インスタンスのデフォルトの AWS デバイス名 dev/xvdb で設定した場合、m5.large インスタンスはデフォルトで /dev/nvme1n1 デバイスを使用するため、AWS m5.large インスタンスを直接追加することはできません。異なる命名スキーマにより、デバイスはパーティション設定に失敗する可能性があります。
本セクションの手順では、インストール時に設定したものとは異なるデバイス名を使用するインスタンスと共に、新規の Red Hat Enterprise Linux CoreOS (RHCOS) コンピュートノードを追加する方法を説明します。カスタムユーザーデータシークレットを作成し、新規コンピュートマシンセットを設定します。これらの手順は AWS クラスターに固有のものです。この原則は、他のクラウドデプロイメントにも適用されます。ただし、デバイスの命名スキーマは他のデプロイメントでは異なり、ケースごとに決定する必要があります。
手順
コマンドラインで、
openshift-machine-apinamespace に移動します。$ oc project openshift-machine-apiworker-user-dataシークレットから新規シークレットを作成します。シークレットの
userDataセクションをテキストファイルにエクスポートします。$ oc get secret worker-user-data --template='{{index .data.userData | base64decode}}' | jq > userData.txtテキストファイルを編集して、新規ノードに使用するパーティションの
storage、filesystems、およびsystemdスタンザを追加します。必要に応じて Ignition 設定パラメーター を指定できます。注記ignitionスタンザの値は変更しないでください。{ "ignition": { "config": { "merge": [ { "source": "https:...." } ] }, "security": { "tls": { "certificateAuthorities": [ { "source": "data:text/plain;charset=utf-8;base64,.....==" } ] } }, "version": "3.2.0" }, "storage": { "disks": [ { "device": "/dev/nvme1n1",1 "partitions": [ { "label": "var", "sizeMiB": 50000,2 "startMiB": 03 } ] } ], "filesystems": [ { "device": "/dev/disk/by-partlabel/var",4 "format": "xfs",5 "path": "/var"6 } ] }, "systemd": { "units": [7 { "contents": "[Unit]\nBefore=local-fs.target\n[Mount]\nWhere=/var\nWhat=/dev/disk/by-partlabel/var\nOptions=defaults,pquota\n[Install]\nWantedBy=local-fs.target\n", "enabled": true, "name": "var.mount" } ] } }- 1
- AWS ブロックデバイスへの絶対パスを指定します。
- 2
- データパーティションのサイズをメビバイト単位で指定します。
- 3
- メビバイト単位でパーティションの開始点を指定します。データパーティションをブートディスクに追加する場合は、最小値の 25000 MB (メビバイト) が推奨されます。ルートファイルシステムは、指定したオフセットまでの利用可能な領域をすべて埋めるためにサイズを自動的に変更します。値の指定がない場合や、指定した値が推奨される最小値よりも小さい場合、生成されるルートファイルシステムのサイズは小さ過ぎるため、RHCOS の再インストールでデータパーティションの最初の部分が上書きされる可能性があります。
- 4
/varパーティションへの絶対パスを指定します。- 5
- ファイルシステムのフォーマットを指定します。
- 6
- Ignition がルートファイルシステムがマウントされる場所に対して相対的な場所で実行される、ファイルシステムのマウントポイントを指定します。これは実際のルートにマウントする場所と同じである必要はありませんが、同じにすることが推奨されます。
- 7
/dev/disk/by-partlabel/varデバイスを/varパーティションにマウントする systemd マウントユニットを定義します。
disableTemplatingセクションをwork-user-dataシークレットからテキストファイルに展開します。$ oc get secret worker-user-data --template='{{index .data.disableTemplating | base64decode}}' | jq > disableTemplating.txt2 つのテキストファイルから新しいユーザーデータのシークレットファイルを作成します。このユーザーデータのシークレットは、
userData.txtファイルの追加のノードパーティション情報を新規作成されたノードに渡します。$ oc create secret generic worker-user-data-x5 --from-file=userData=userData.txt --from-file=disableTemplating=disableTemplating.txt
新規ノードの新規コンピュートマシンセットを作成します。
AWS 向けに設定される新規のコンピュートマシンセット YAML ファイルを、以下のように作成します。必要なパーティションおよび新規に作成されたユーザーデータシークレットを追加します。
ヒント既存のコンピュートマシンセットをテンプレートとして使用し、新規ノード用に必要に応じてパラメーターを変更します。
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: auto-52-92tf4 name: worker-us-east-2-nvme1n11 namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: auto-52-92tf4 machine.openshift.io/cluster-api-machineset: auto-52-92tf4-worker-us-east-2b template: metadata: labels: machine.openshift.io/cluster-api-cluster: auto-52-92tf4 machine.openshift.io/cluster-api-machine-role: worker machine.openshift.io/cluster-api-machine-type: worker machine.openshift.io/cluster-api-machineset: auto-52-92tf4-worker-us-east-2b spec: metadata: {} providerSpec: value: ami: id: ami-0c2dbd95931a apiVersion: awsproviderconfig.openshift.io/v1beta1 blockDevices: - DeviceName: /dev/nvme1n12 ebs: encrypted: true iops: 0 volumeSize: 120 volumeType: gp2 - DeviceName: /dev/nvme1n23 ebs: encrypted: true iops: 0 volumeSize: 50 volumeType: gp2 credentialsSecret: name: aws-cloud-credentials deviceIndex: 0 iamInstanceProfile: id: auto-52-92tf4-worker-profile instanceType: m6i.large kind: AWSMachineProviderConfig metadata: creationTimestamp: null placement: availabilityZone: us-east-2b region: us-east-2 securityGroups: - filters: - name: tag:Name values: - auto-52-92tf4-worker-sg subnet: id: subnet-07a90e5db1 tags: - name: kubernetes.io/cluster/auto-52-92tf4 value: owned userDataSecret: name: worker-user-data-x54 コンピュートマシンセットを作成します。
$ oc create -f <file-name>.yamlマシンが利用可能になるまでに少し時間がかかる場合があります。
新しいパーティションとノードが作成されたことを確認します。
コンピュートマシンセットが作成されていることを確認します。
$ oc get machineset出力例
NAME DESIRED CURRENT READY AVAILABLE AGE ci-ln-2675bt2-76ef8-bdgsc-worker-us-east-1a 1 1 1 1 124m ci-ln-2675bt2-76ef8-bdgsc-worker-us-east-1b 2 2 2 2 124m worker-us-east-2-nvme1n1 1 1 1 1 2m35s1 - 1
- これが新しいコンピュートマシンセットです。
新規ノードが作成されていることを確認します。
$ oc get nodes出力例
NAME STATUS ROLES AGE VERSION ip-10-0-128-78.ec2.internal Ready worker 117m v1.31.3 ip-10-0-146-113.ec2.internal Ready master 127m v1.31.3 ip-10-0-153-35.ec2.internal Ready worker 118m v1.31.3 ip-10-0-176-58.ec2.internal Ready master 126m v1.31.3 ip-10-0-217-135.ec2.internal Ready worker 2m57s v1.31.31 ip-10-0-225-248.ec2.internal Ready master 127m v1.31.3 ip-10-0-245-59.ec2.internal Ready worker 116m v1.31.3- 1
- これは新しいノードです。
カスタム
/varパーティションが新しいノードに作成されていることを確認します。$ oc debug node/<node-name> -- chroot /host lsblk以下に例を示します。
$ oc debug node/ip-10-0-217-135.ec2.internal -- chroot /host lsblk出力例
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 202:0 0 120G 0 disk |-nvme0n1p1 202:1 0 1M 0 part |-nvme0n1p2 202:2 0 127M 0 part |-nvme0n1p3 202:3 0 384M 0 part /boot `-nvme0n1p4 202:4 0 119.5G 0 part /sysroot nvme1n1 202:16 0 50G 0 disk `-nvme1n1p1 202:17 0 48.8G 0 part /var1 - 1
nvme1n1デバイスが/varパーティションにマウントされます。