2.4. Bare Metal Operator を使用したユーザープロビジョニングクラスターのスケーリング
user-provisioned infrastructure クラスターをデプロイした後、Bare Metal Operator (BMO) およびその他の metal3 コンポーネントを使用して、クラスター内のベアメタルホストをスケーリングできます。このアプローチは、ユーザーがプロビジョニングしたクラスターをより自動化された方法でスケーリングするために役立ちます。
2.4.1. Bare Metal Operator を使用したユーザープロビジョニングクラスターのスケーリングについて
Bare Metal Operator (BMO) およびその他の metal3 コンポーネントを使用して、user-provisioned infrastructure クラスターをスケーリングできます。user-provisioned infrastructure のインストールには、Machine API Operator が含まれていません。通常は Machine API Operator がクラスター内のベアメタルノードのライフサイクルを管理します。しかし、Machine API Operator がなくても、BMO およびその他の Metal 3 コンポーネントを使用して、ユーザーがプロビジョニングしたクラスター内のノードをスケーリングすることは可能です。
2.4.1.1. ユーザーがプロビジョニングしたクラスターをスケーリングするための前提条件
- user-provisioned infrastructure クラスターをベアメタルにインストールしました。
- ホストへのベースボード管理コントローラー (BMC) アクセス権限がある。
2.4.1.2. ユーザーがプロビジョニングしたクラスターのスケーリングに関する制限事項
Bare Metal Operator (BMO) では、プロビジョニングネットワークを使用して、user-provisioned infrastructure クラスターをスケーリングすることはできません。
-
したがって、仮想メディアネットワークの起動をサポートするベアメタルホストドライバー (
redfish-virtualmedia
やidrac-virtualmedia
など) のみを使用できます。
-
したがって、仮想メディアネットワークの起動をサポートするベアメタルホストドライバー (
-
BMO を使用して、user-provisioned infrastructure クラスター内の
MachineSet
オブジェクトをスケーリングすることはできません。
2.4.2. ユーザーがプロビジョニングしたクラスターをスケーリングするためのプロビジョニングリソースの設定
Provisioning
カスタムリソース (CR) を作成して、user-provisioned infrastructure クラスターで Metal プラットフォームコンポーネントを有効にします。
前提条件
- user-provisioned infrastructure クラスターをベアメタルにインストールしました。
手順
Provisioning
CR を作成します。次の YAML を
provisioning.yaml
ファイルに保存します。apiVersion: metal3.io/v1alpha1 kind: Provisioning metadata: name: provisioning-configuration spec: provisioningNetwork: "Disabled" watchAllNamespaces: false
注記OpenShift Container Platform 4.18 では、Bare Metal Operator を使用してユーザーがプロビジョニングしたクラスターをスケーリングする場合、プロビジョニングネットワークの有効化がサポートされません。
次のコマンドを実行して、
Provisioning
CR を作成します。$ oc create -f provisioning.yaml
出力例
provisioning.metal3.io/provisioning-configuration created
検証
次のコマンドを実行して、プロビジョニングサービスが実行されていることを確認します。
$ oc get pods -n openshift-machine-api
出力例
NAME READY STATUS RESTARTS AGE cluster-autoscaler-operator-678c476f4c-jjdn5 2/2 Running 0 5d21h cluster-baremetal-operator-6866f7b976-gmvgh 2/2 Running 0 5d21h control-plane-machine-set-operator-7d8566696c-bh4jz 1/1 Running 0 5d21h ironic-proxy-64bdw 1/1 Running 0 5d21h ironic-proxy-rbggf 1/1 Running 0 5d21h ironic-proxy-vj54c 1/1 Running 0 5d21h machine-api-controllers-544d6849d5-tgj9l 7/7 Running 1 (5d21h ago) 5d21h machine-api-operator-5c4ff4b86d-6fjmq 2/2 Running 0 5d21h metal3-6d98f84cc8-zn2mx 5/5 Running 0 5d21h metal3-image-customization-59d745768d-bhrp7 1/1 Running 0 5d21h
2.4.3. BMO を使用して、ユーザーがプロビジョニングしたクラスターで新しいホストをプロビジョニングする
Bare Metal Operator (BMO) を使用して、BareMetalHost
カスタムリソース (CR) を作成すると、ユーザーがプロビジョニングしたクラスターにベアメタルホストをプロビジョニングできます。
BMO を使用してベアメタルホストをクラスターにプロビジョニングすると、BareMetalHost
カスタムリソースの spec.externallyProvisioned
仕様がデフォルトで false
に設定されます。spec.externallyProvisioned
仕様を true
に設定しないでください。この設定により予期しない動作が発生するためです。
前提条件
- ユーザーがプロビジョニングしたベアメタルクラスターを作成しました。
- ホストへのベースボード管理コントローラー (BMC) アクセス権限がある。
-
Provisioning
CR を作成して、クラスターにプロビジョニングサービスをデプロイしました。
手順
ベアメタルノードの設定ファイルを作成します。静的設定を使用するか、DHCP サーバーを使用するかに応じて、次のサンプル
bmh.yaml
ファイルのいずれかを選択します。YAML 内の値を環境に合わせて置き換えて、ニーズに合わせて設定します。静的設定でデプロイする場合は、次の
bmh.yaml
ファイルを作成します。--- apiVersion: v1 kind: Secret metadata: name: openshift-worker-<num>-network-config-secret 1 namespace: openshift-machine-api type: Opaque stringData: nmstate: | 2 interfaces: 3 - name: <nic1_name> 4 type: ethernet state: up ipv4: address: - ip: <ip_address> 5 prefix-length: 24 enabled: true dns-resolver: config: server: - <dns_ip_address> 6 routes: config: - destination: 0.0.0.0/0 next-hop-address: <next_hop_ip_address> 7 next-hop-interface: <next_hop_nic1_name> 8 --- apiVersion: v1 kind: Secret metadata: name: openshift-worker-<num>-bmc-secret namespace: openshift-machine-api type: Opaque data: username: <base64_of_uid> 9 password: <base64_of_pwd> --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: openshift-worker-<num> namespace: openshift-machine-api spec: online: true bootMACAddress: <nic1_mac_address> 10 bmc: address: <protocol>://<bmc_url> 11 credentialsName: openshift-worker-<num>-bmc-secret disableCertificateVerification: false customDeploy: method: install_coreos userData: name: worker-user-data-managed namespace: openshift-machine-api rootDeviceHints: deviceName: <root_device_hint> 12 preprovisioningNetworkDataName: openshift-worker-<num>-network-config-secret
- 1
name
、credentialsName
、およびpreprovisioningNetworkDataName
フィールドのすべての<num>
を、ベアメタルノードの一意のコンピュートノード番号に置き換えます。- 2
- NMState YAML 構文を追加して、ホストインターフェイスを設定します。新しく作成されたノードのネットワークインターフェイスを設定するには、ネットワーク設定が含まれるシークレットの名前を指定します。
nmstate
構文に従って、ノードのネットワーク設定を定義します。NMState 構文の設定の詳細は、「ベアメタルノードの準備」を参照してください。 - 3
- オプション:
nmstate
を使用してネットワークインターフェイスを設定しており、インターフェイスを無効にする場合は、IP アドレスをenabled: false
に設定してstate: up
を設定します。 - 4
<nic1_name>
は、ベアメタルノードの最初のネットワークインターフェイスコントローラー (NIC) の名前に置き換えます。- 5
<ip_address>
は、ベアメタルノードの NIC の IP アドレスに置き換えます。- 6
<dns_ip_address>
は、ベアメタルノードの DNS リゾルバーの IP アドレスに置き換えます。- 7
<next_hop_ip_address>
は、ベアメタルノードの外部ゲートウェイの IP アドレスに置き換えます。- 8
<next_hop_nic1_name>
は、ベアメタルノードの外部ゲートウェイの名前に置き換えます。- 9
<base64_of_uid>
と<base64_of_pwd>
は、ユーザー名とパスワードの base64 文字列に置き換えます。- 10
<nic1_mac_address>
は、ベアメタルノードの最初の NIC の MAC アドレスに置き換えます。追加の BMC 設定オプションは、「BMC アドレス指定」のセクションを参照してください。- 11
<protocol>
は、IPMI、Redfish などの BMC プロトコルに置き換えます。<bmc_url>
は、ベアメタルノードのベースボード管理コントローラーの URL に置き換えます。- 12
- オプション: ルートデバイスのヒントを指定する場合は、
<root_device_hint>
をデバイスパスに置き換えます。詳細は、「ルートデバイスのヒント」を参照してください。
nmstate
を使用して静的設定でネットワークインターフェイスを設定する場合は、IP アドレスをenabled: false
に設定してstate: up
を設定します。--- apiVersion: v1 kind: Secret metadata: name: openshift-worker-<num>-network-config-secret namespace: openshift-machine-api # ... interfaces: - name: <nic_name> type: ethernet state: up ipv4: enabled: false ipv6: enabled: false # ...
DHCP 設定でデプロイする場合は、次の
bmh.yaml
ファイルを作成します。--- apiVersion: v1 kind: Secret metadata: name: openshift-worker-<num>-bmc-secret 1 namespace: openshift-machine-api type: Opaque data: username: <base64_of_uid> 2 password: <base64_of_pwd> --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: openshift-worker-<num> namespace: openshift-machine-api spec: online: true bootMACAddress: <nic1_mac_address> 3 bmc: address: <protocol>://<bmc_url> 4 credentialsName: openshift-worker-<num>-bmc disableCertificateVerification: false customDeploy: method: install_coreos userData: name: worker-user-data-managed namespace: openshift-machine-api rootDeviceHints: deviceName: <root_device_hint> 5
- 1
name
およびcredentialsName
フィールドの<num>
は、ベアメタルノードの一意のコンピュートノード番号に置き換えます。- 2
<base64_of_uid>
と<base64_of_pwd>
は、ユーザー名とパスワードの base64 文字列に置き換えます。- 3
<nic1_mac_address>
は、ベアメタルノードの最初の NIC の MAC アドレスに置き換えます。追加の BMC 設定オプションは、「BMC アドレス指定」のセクションを参照してください。- 4
<protocol>
は、IPMI、Redfish などの BMC プロトコルに置き換えます。<bmc_url>
は、ベアメタルノードのベースボード管理コントローラーの URL に置き換えます。- 5
- オプション: ルートデバイスのヒントを指定する場合は、
<root_device_hint>
をデバイスパスに置き換えます。詳細は、「ルートデバイスのヒント」を参照してください。
重要既存のベアメタルノードの MAC アドレスが、プロビジョニングしようとしているベアメタルホストの MAC アドレスと一致する場合、インストールが失敗します。ホストの登録、検査、クリーニング、またはその他の手順が失敗した場合、Bare Metal Operator がインストールを継続的に再試行します。詳細は、「クラスター内の新しいホストをプロビジョニングする際の重複する MAC アドレスの診断」を参照してください。
次のコマンドを実行してベアメタルノードを作成します。
$ oc create -f bmh.yaml
出力例
secret/openshift-worker-<num>-network-config-secret created secret/openshift-worker-<num>-bmc-secret created baremetalhost.metal3.io/openshift-worker-<num> created
次のコマンドを実行してベアメタルノードを検査します。
$ oc -n openshift-machine-api get bmh openshift-worker-<num>
ここでは、以下のようになります。
- <num>
コンピュートノード番号を指定します。
出力例
NAME STATE CONSUMER ONLINE ERROR openshift-worker-<num> provisioned true
すべての証明書署名要求 (CSR) を承認します。
次のコマンドを実行して、保留中の CSR のリストを取得します。
$ oc get csr
出力例
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION csr-gfm9f 33s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-o perator:node-bootstrapper <none> Pending
次のコマンドを実行して、CSR を承認します。
$ oc adm certificate approve <csr_name>
出力例
certificatesigningrequest.certificates.k8s.io/<csr_name> approved
検証
次のコマンドを実行して、ノードの準備ができていることを確認します。
$ oc get nodes
出力例
NAME STATUS ROLES AGE VERSION app1 Ready worker 47s v1.24.0+dc5a2fd controller1 Ready master,worker 2d22h v1.24.0+dc5a2fd
2.4.4. オプション: BMO を使用して、ユーザーがプロビジョニングしたクラスターで既存のホストを管理する
オプションで、Bare Metal Operator (BMO) を使用して、既存のホストの BareMetalHost
オブジェクトを作成すると、ユーザーがプロビジョニングしたクラスターで既存のベアメタルコントローラーホストを管理できます。ユーザーがプロビジョニングした既存のホストを管理する必要はありません。ただし、それらをインベントリー目的で外部プロビジョニングされたホストとして登録することはできます。
BMO を使用して、既存のホストを管理するには、BareMetalHost
カスタムリソースの spec.externallyProvisioned
仕様を true
に設定して、BMO がホストを再プロビジョニングしないようにする必要があります。
前提条件
- ユーザーがプロビジョニングしたベアメタルクラスターを作成しました。
- ホストへのベースボード管理コントローラー (BMC) アクセス権限がある。
-
Provisioning
CR を作成して、クラスターにプロビジョニングサービスをデプロイしました。
手順
Secret
CR とBareMetalHost
CR を作成します。次の YAML を
controller.yaml
ファイルに保存します。--- apiVersion: v1 kind: Secret metadata: name: controller1-bmc namespace: openshift-machine-api type: Opaque data: username: <base64_of_uid> password: <base64_of_pwd> --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: controller1 namespace: openshift-machine-api spec: bmc: address: <protocol>://<bmc_url> 1 credentialsName: "controller1-bmc" bootMACAddress: <nic1_mac_address> customDeploy: method: install_coreos externallyProvisioned: true 2 online: true userData: name: controller-user-data-managed namespace: openshift-machine-api
次のコマンドを実行して、ベアメタルホストオブジェクトを作成します。
$ oc create -f controller.yaml
出力例
secret/controller1-bmc created baremetalhost.metal3.io/controller1 created
検証
次のコマンドを実行して、BMO がベアメタルホストオブジェクトを作成したことを確認します。
$ oc get bmh -A
出力例
NAMESPACE NAME STATE CONSUMER ONLINE ERROR AGE openshift-machine-api controller1 externally provisioned true 13s
2.4.5. BMO を使用して、ユーザーがプロビジョニングしたクラスターからホストを削除する
Bare Metal Operator (BMO) を使用して、ユーザーがプロビジョニングしたクラスターからベアメタルホストを削除できます。
前提条件
- ユーザーがプロビジョニングしたベアメタルクラスターを作成しました。
- ホストへのベースボード管理コントローラー (BMC) アクセス権限がある。
-
Provisioning
CR を作成して、クラスターにプロビジョニングサービスをデプロイしました。
手順
次のコマンドを実行して、ノードをスケジューリング対象から外してドレインします。
$ oc adm drain app1 --force --ignore-daemonsets=true
出力例
node/app1 cordoned WARNING: ignoring DaemonSet-managed Pods: openshift-cluster-node-tuning-operator/tuned-tvthg, openshift-dns/dns- default-9q6rz, openshift-dns/node-resolver-zvt42, openshift-image-registry/node-ca-mzxth, openshift-ingress-cana ry/ingress-canary-qq5lf, openshift-machine-config-operator/machine-config-daemon-v79dm, openshift-monitoring/nod e-exporter-2vn59, openshift-multus/multus-additional-cni-plugins-wssvj, openshift-multus/multus-fn8tg, openshift -multus/network-metrics-daemon-5qv55, openshift-network-diagnostics/network-check-target-jqxn2, openshift-ovn-ku bernetes/ovnkube-node-rsvqg evicting pod openshift-operator-lifecycle-manager/collect-profiles-27766965-258vp evicting pod openshift-operator-lifecycle-manager/collect-profiles-27766950-kg5mk evicting pod openshift-operator-lifecycle-manager/collect-profiles-27766935-stf4s pod/collect-profiles-27766965-258vp evicted pod/collect-profiles-27766950-kg5mk evicted pod/collect-profiles-27766935-stf4s evicted node/app1 drained
BareMetalHost
CR からcustomDeploy
仕様を削除します。次のコマンドを実行して、ホストの
BareMetalHost
CR を編集します。$ oc edit bmh -n openshift-machine-api <host_name>
spec.customDeploy
およびspec.customDeploy.method
の行を削除します。... customDeploy: method: install_coreos
次のコマンドを実行して、ホストのプロビジョニング状態が
deprovisioning
に変わることを確認します。$ oc get bmh -A
出力例
NAMESPACE NAME STATE CONSUMER ONLINE ERROR AGE openshift-machine-api controller1 externally provisioned true 58m openshift-machine-api worker1 deprovisioning true 57m
BareMetalHost
の状態がavailable
に変わったら、次のコマンドを実行してホストを削除します。$ oc delete bmh -n openshift-machine-api <bmh_name>
注記このステップは、
BareMetalHost
CR を編集しなくても実行できます。BareMetalHost
の状態がdeprovisioning
からavailable
に変わるまでに、しばらく時間がかかる場合があります。次のコマンドを実行して、ノードを削除します。
$ oc delete node <node_name>
検証
次のコマンドを実行して、ノードが削除されたことを確認します。
$ oc get nodes
出力例
NAME STATUS ROLES AGE VERSION controller1 Ready master,worker 2d23h v1.24.0+dc5a2fd