10.2. ノードのメンテナンスモードへの設定
Web コンソール、CLI、または NodeMaintenance
カスタムリソースを使用してノードをメンテナンス状態にします。
10.2.1. Web コンソールでのノードのメンテナンスモードへの設定
Compute
手順
-
OpenShift Virtualization コンソールで、 Compute
Nodes をクリックします。 この画面からノードをメンテナンスモードに設定できます。 これにより、1 つの画面で複数のノードに対してアクションを実行することがより容易になります。 または、Node Details 画面からノードをメンテナンスモードに設定することもできます。 この場合、選択されたノードの総合的な詳細情報を確認できます。
- ノードの末尾の Options メニュー をクリックし、Start Maintenance を選択します。
-
ノード名をクリックし、Node Details 画面を開いて Actions
Stat Maintenance をクリックします。
- 確認ウィンドウで Start Maintenance をクリックします。
ノードは liveMigration
エビクションストラテジーを持つ仮想マシンインスタンスのライブマイグレーションを行い、このノードはスケジュール対象外となります。このノードの他のすべての Pod および仮想マシンは削除され、別のノードで再作成されます。
10.2.2. CLI でのノードのメンテナンスモードへの設定
ノードをスケジュール対象外としてマークし、oc adm drain
コマンドを使用してノードから Pod をエビクトまたは削除して、ノードをメンテナンスモードに設定します。
手順
ノードにスケジュール対象外 (unschedulable) のマークを付けます。ノードのステータスが
NotReady,SchedulingDisabled
に切り替わります。$ oc adm cordon <node1>
メンテナンスの準備のためにノードをドレイン (解放) します。ノードは、
LiveMigratable
の状態がTrue
に設定され、spec:evictionStrategy
フィールドがLiveMigrate
に設定された仮想マシンインスタンスのライブマイグレーションを行います。このノードの他のすべての Pod および仮想マシンは削除され、別のノードで再作成されます。$ oc adm drain <node1> --delete-emptydir-data --ignore-daemonsets=true --force
-
--delete-emptydir-data
フラグは、emptyDir
ボリュームを使用するノード上の仮想マシンインスタンスを削除します。これらのボリュームのデータは一時的なものであり、終了後に削除しても問題はありません。 -
--ignore-daemonsets=true
フラグは、デーモンセットは無視され、Pod のエビクションが正常に続行されるようにします。 -
--force
フラグは、レプリカセットまたはデーモンセットコントローラーによって管理されない Pod を削除するために必要です。
-
10.2.3. NodeMaintenance カスタムリソースを使用したノードのメンテナンスモードへの設定
NodeMaintenance
カスタムリソース (CR) を使用してノードをメンテナンスモードにできます。NodeMaintenance
CR を適用する場合、許可されるすべての Pod はエビクトされ、ノードはシャットダウンします。エビクトされた Pod は、クラスター内の別のノードに移動するようにキューに置かれます。
前提条件
-
OpenShift Container Platform CLI (
oc
) をインストールしている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。
手順
以下のノードメンテナンス CR を作成し、そのファイルを
nodemaintenance-cr.yaml
として保存します。apiVersion: nodemaintenance.kubevirt.io/v1beta1 kind: NodeMaintenance metadata: name: maintenance-example 1 spec: nodeName: node-1.example.com 2 reason: "Node maintenance" 3
以下のコマンドを実行してノードのメンテナンススケジュールを適用します。
$ oc apply -f nodemaintenance-cr.yaml
以下のコマンドを実行して、
<node-name>
をノードの名前に置き換えて、メンテナンスタスクの進捗を確認します。$ oc describe node <node-name>
出力例
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal NodeNotSchedulable 61m kubelet Node node-1.example.com status is now: NodeNotSchedulable
10.2.3.1. 現在の NodeMaintenance CR タスクのステータスの確認
現在の NodeMaintenance
CR タスクのステータスを確認できます。
前提条件
-
OpenShift Container Platform CLI (
oc
) をインストールしている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
以下のコマンドを実行して、現在のノードのメンテナンスタスクのステータスを確認します。
$ oc get NodeMaintenance -o yaml
出力例
apiVersion: v1 items: - apiVersion: nodemaintenance.kubevirt.io/v1beta1 kind: NodeMaintenance metadata: ... spec: nodeName: node-1.example.com reason: Node maintenance status: evictionPods: 3 1 pendingPods: - pod-example-workload-0 - httpd - httpd-manual phase: Running lastError: "Last failure message" 2 totalpods: 5 ...