6.6.6. ノード、ベアメタルホスト、マシンの関連付け
マシンを作成し、それを新しい BareMetalHost オブジェクトおよびノードに関連付けることで、新しいコントロールプレーンノードの作成を続行します。
手順
次のコマンドを実行して、コントロールプレーンノードの
providerIDを取得します。$ oc get -n openshift-machine-api baremetalhost -l installer.openshift.io/role=control-plane -ojson | jq -r '.items[] | "baremetalhost:///openshift-machine-api/" + .metadata.name + "/" + .metadata.uid'出力例
baremetalhost:///openshift-machine-api/master-00/6214c5cf-c798-4168-8c78-1ff1a3cd2cb4 baremetalhost:///openshift-machine-api/master-01/58fb60bd-b2a6-4ff3-a88d-208c33abf954 baremetalhost:///openshift-machine-api/master-02/dc5a94f3-625b-43f6-ab5a-7cc4fc79f105次のコマンドを実行して、ラベルのクラスター情報を取得します。
$ oc get machine -n openshift-machine-api \ -l machine.openshift.io/cluster-api-machine-role=master \ -L machine.openshift.io/cluster-api-cluster出力例
NAME PHASE TYPE REGION ZONE AGE CLUSTER-API-CLUSTER ci-op-jcp3s7wx-ng5sd-master-0 Running 10h ci-op-jcp3s7wx-ng5sd ci-op-jcp3s7wx-ng5sd-master-1 Running 10h ci-op-jcp3s7wx-ng5sd ci-op-jcp3s7wx-ng5sd-master-2 Running 10h ci-op-jcp3s7wx-ng5sd次のような yaml ファイルを作成して、新しいコントロールプレーンノードの
Machineオブジェクトを作成します。apiVersion: machine.openshift.io/v1beta1 kind: Machine metadata: annotations: metal3.io/BareMetalHost: openshift-machine-api/<new_control_plane_machine>1 finalizers: - machine.machine.openshift.io labels: machine.openshift.io/cluster-api-cluster: <cluster_api_cluster>2 machine.openshift.io/cluster-api-machine-role: master machine.openshift.io/cluster-api-machine-type: master name: <new_control_plane_machine>3 namespace: openshift-machine-api spec: metadata: {} providerID: <provider_id>4 providerSpec: value: apiVersion: baremetal.cluster.k8s.io/v1alpha1 hostSelector: {} image: checksum: "" url: "" kind: BareMetalMachineProviderSpec userData: name: master-user-data-managed各項目の説明:
<new_control_plane_machine>- 新しいマシンの名前を指定します。これは、以前に削除されたマシンの名前と同じにすることができます。
<cluster_api_cluster>-
前の手順の出力に示されている、他のコントロールプレーンマシンの
CLUSTER-API-CLUSTER値を指定します。 <provider_id>-
前の手順の出力に表示されている、新しいベアメタルホストの
providerID値を指定します。
次の警告が想定されます。
Warning: metadata.finalizers: "machine.machine.openshift.io": prefer a domain-qualified finalizer name to avoid accidental conflicts with other finalizer writers単一の bash シェルセッションで次の手順を実行して、新しいコントロールプレーンノードと
MachineオブジェクトをBareMetalHostオブジェクトに関連付けます。次のコマンドを実行して、
NEW_NODE_NAME変数を定義します。$ NEW_NODE_NAME=<new_node_name><new_node_name>は、新しいコントロールプレーンノードの名前に置き換えます。次のコマンドを実行して、
NEW_MACHINE_NAME変数を定義します。$ NEW_MACHINE_NAME=<new_machine_name><new_machine_name>は、新しいマシンの名前に置き換えます。以下のコマンドを実行して
BMH_UIDを定義し、これを新しいノードのBareMetalHostオブジェクトから抽出します。$ BMH_UID=$(oc get -n openshift-machine-api bmh $NEW_NODE_NAME -ojson | jq -r .metadata.uid)$ echo $BMH_UID次のコマンドを実行して、ベアメタルホストに
consumerRefオブジェクトをパッチ適用します。$ oc patch -n openshift-machine-api bmh $NEW_NODE_NAME --type merge --patch '{"spec":{"consumerRef":{"apiVersion":"machine.openshift.io/v1beta1","kind":"Machine","name":"'$NEW_MACHINE_NAME'","namespace":"openshift-machine-api"}}}'次のコマンドを実行して、新しいノードに
providerID値をパッチ適用します。$ oc patch node $NEW_NODE_NAME --type merge --patch '{"spec":{"providerID":"baremetalhost:///openshift-machine-api/'$NEW_NODE_NAME'/'$BMH_UID'"}}'次のコマンドを実行して、
providerID値を確認します。$ oc get node -l node-role.kubernetes.io/control-plane -ojson | jq -r '.items[] | .metadata.name + " " + .spec.providerID'
次のコマンドを実行して、
BareMetalHostオブジェクトのpoweredOnステータスをtrueに設定します。$ oc patch -n openshift-machine-api bmh $NEW_NODE_NAME --subresource status --type json -p '[{"op":"replace","path":"/status/poweredOn","value":true}]'次のコマンドを実行して、
BareMetalHostオブジェクトのpoweredOnステータスを確認します。$ oc get bmh -n openshift-machine-api -ojson | jq -r '.items[] | .metadata.name + " PoweredOn:" + (.status.poweredOn | tostring)'次のコマンドを実行して、
BareMetalHostオブジェクトのプロビジョニング状態を確認します。$ oc get bmh -n openshift-machine-api -ojson | jq -r '.items[] | .metadata.name + " ProvisioningState:" + .status.provisioning.state'重要プロビジョニング状態が
unmanagedでない場合は、次のコマンドを実行してプロビジョニング状態を変更します。$ oc patch -n openshift-machine-api bmh $NEW_NODE_NAME --subresource status --type json -p '[{"op":"replace","path":"/status/provisioning/state","value":"unmanaged"}]'次のコマンドを実行して、マシンの状態を
Provisionedに設定します。$ oc patch -n openshift-machine-api machines $NEW_MACHINE_NAME -n openshift-machine-api --subresource status --type json -p '[{"op":"replace","path":"/status/phase","value":"Provisioned"}]'