ワーカー・ノードの削除

ワーカー・ノードの削除、およびContainer Engine for Kubernetes (OKE)を使用したコードンおよびドレイン・オプションの設定に関するノートを参照してください。

Container Engine for Kubernetesで作成したクラスタのノード・プール内の特定のワーカー・ノードを削除できます。

次の考慮事項に注意してください。

  • ワーカー・ノードを削除すると、その特定のワーカー・ノードがノード・プールから削除され、オプションで、ノード・プールに指定されたワーカー・ノードの数から1を減算して、ノード・プール自体がスケール・ダウンされます。ノード・プールをスケール・ダウンせずにワーカー・ノードを削除すると、それを置き換える新しいワーカー・ノードが作成されます。
  • 管理対象ノードを削除すると、選択した「コードンおよびドレイン」オプションによって、ワーカー・ノードが終了するタイミングと方法が決まります。終了前の管理対象ノードのコード化およびドレインに関するノートを参照してください。
  • 特定のワーカー・ノードを削除できるだけでなく、ノード・プールをスケール・ダウンして配置構成を変更すると、ワーカー・ノードも削除されることに注意してください。
  • ワーカー・ノードに削除のマークを付けた場合(ノードの削除操作中、スケール・ダウン操作中、または配置構成の変更中)、ノードはリカバリできません。ノードの削除操作が最初に失敗した場合でも、次のノード・プールの更新操作(スケール・アップ操作を含む)はノードの再終了を試みます。
  • Container Engine for Kubernetesは、自動的に生成された名前でクラスタにワーカー・ノードを作成します。管理対象ノード名の形式は、oke-c<part-of-cluster-OCID>-n<part-of-node-pool-OCID>-s<part-of-subnet-OCID>-<slot>です。仮想ノード名は、ノードのプライベートIPアドレスと同じです。ワーカー・ノードの自動生成された名前は変更できません。ワーカー・ノードの自動生成された名前を変更してからクラスタを削除する場合、名前を変更したワーカー・ノードは削除されません。名前を変更したワーカー・ノードは手動で削除する必要があります。

コンソール、CLIおよびAPIを使用してワーカー・ノードを削除できます。「ワーカー・ノードの削除」を参照してください。

終了前の管理対象ノードのコード化およびドレインに関するノート

コーディング

コード作成は、Kubernetesクラスタ内のワーカー・ノードをスケジュール不可能としてマークするために指定される名前です。ワーカー・ノードをコード化すると、kubeスケジューラはそのノードに新しいポッドを配置できなくなりますが、ノード上の既存のポッドには影響しません。ワーカー・ノードのコード化は、ノードを終了して管理タスク(ノードの削除、ノード・プールのスケール・ダウン、配置構成の変更など)を実行する前に、有用な準備ステップです。詳細は、Kubernetesドキュメントの手動ノード管理を参照してください。

排出

ドレインとは、Kubernetesクラスタのワーカー・ノードからポッドを安全に削除するために指定される名前です。ポッドを安全に削除すると、ポッドのコンテナが正常に終了し、必要なクリーンアップが実行されます。詳細は、Kubernetesドキュメントのノードを安全に排出およびポッドの終了を参照してください。

ポッド中断予算

ポッド中断予算は、アプリケーションで発生する同時中断の数を制限するKubernetes機能です。ポッド・ディスラプション予算を使用すると、高いアプリケーションの可用性が確保され、同時にワーカー・ノード上で管理タスクを実行できます。ポッド中断予算は、ワーカー・ノードの排出時にポッドが削除されるのを防ぐことができます。詳細は、Kubernetesドキュメントのアプリケーションの中断予算の指定を参照してください。

「注意が必要」ステータスのノード・プール

Container Engine for Kubernetesで作成したクラスタからワーカー・ノードを削除する場合、次の「コードンおよびドレイン」オプションを使用して、ワーカー・ノードを終了するタイミングと方法を指定できます:

  • 削除猶予期間(分):ワーカー・ノードを終了する前に、ノードをコードンおよびドレインできる時間の長さ。デフォルト(60分)を受け入れるか、または代替を指定します。たとえば、ノード・プールのスケール・ダウンや配置構成の変更時に、ワーカー・ノードを30分間コード化してワークロードを排出できます。ワーカー・ノードをコード化およびドレインせずにただちに終了するには、0分を指定します。
  • 猶予期間後に強制終了:正常にコード化およびドレインされていない場合でも、削除猶予期間の終了時にワーカー・ノードを終了するかどうか。デフォルトでは、このオプションは選択されていません。

    ワーカー・ノードが正常にコード化およびドレインされていない場合でも、削除猶予期間の終了時に常にワーカー・ノードを終了させる場合は、このオプションを選択します。

    正常にコード化されて排出されていないワーカー・ノードを削除猶予期間の終了時に終了させない場合は、このオプションの選択を解除します。削除猶予期間内に終了できなかったワーカー・ノードを含むノード・プールは、「注意が必要」ステータスになります。クラスタのモニタリングを参照してください。

「注意が必要」ステータスのノード・プールは、ノード・プール内の1つ以上のワーカー・ノードが、削除猶予期間内にそのノードで実行されているすべてのポッドの削除に失敗したことを示します。終了操作を開始した作業リクエストのステータスが「失敗」に設定されます。作業リクエスト・ログに、削除できない特定のポッドなど、失敗の理由を表示できます(作業リクエストの表示を参照)。制限的なポッド中断予算など、ポッドを削除できない理由はいくつか考えられます。詳細は、Kubernetesドキュメントのスケジューリング、プリエンプションおよびエビクションを参照してください。

ノード・プールの「注意が必要」ステータスを解決し、影響を受けるワーカー・ノードを終了するには、次のいずれかのアクションを実行します:

  • 元のコマンドを再発行し、「猶予期間後に強制終了」オプションを選択します。ノードは、正常にコード化およびドレインされていない場合でも、削除猶予期間の終了時に終了します。
  • 作業リクエスト・ログを調べて、削除失敗の理由を判別し、(たとえば、制限の少ないポッド中断予算を作成して)その理由に対処し、元のコマンドを再発行します。

CLIを使用したノード・プールの「注意が必要」ステータスの解決

CLIを使用してノード・プールの「注意が必要」ステータスを解決し、影響を受けるワーカー・ノードを終了するには、次のように入力します:

oci ce node-pool get --node-pool-id <nodepool-ocid> | jq '{ state: .data."lifecycle-state", nodes: (.data.nodes | .[] | {id, "node-error"} ) }'

--node-pool-id <nodepool-ocid>は、「注意が必要」ステータスのノード・プールのOCIDです。

例:

oci ce node-pool get --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya | jq '{ state: .data."lifecycle-state", nodes: (.data.nodes | .[] | {id, "node-error"} ) }'

このコマンドへのレスポンスには、現在ノード・エラー状態にあるワーカー・ノードと説明がリストされます。例:

{
	"state": "NEEDS_ATTENTION",
	"nodes": {
		"id": "ocid1.instance.oc1.iad.anu___4cq",
		"node-error":

		{
			"code": "PodEvictionFailureError",
			"message": "Pod(s) {sigterm - app - 55 c4f4f657 - wccqn} of Node ocid1.instance.oc1.iad.anuwc______4cq could not be evicted.",
			"opc-request-id": null,
			"status": null
		}
	}
}

この例では、削除猶予期間内にワーカー・ノードからポッドを削除できなかったことがわかります。その結果、ワーカー・ノードを終了できませんでした。ポッドを削除できなかった理由を特定し、根本的な問題を修正するのはユーザーの責任です。たとえば、制限の少ないポッド中断予算を作成します。

問題を修正したら、次のように入力してワーカー・ノードを削除できます。

oci ce node-pool delete-node --node-pool-id <nodepool-ocid> --node-id <node-ocid>

例:

oci ce node-pool delete-node --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya --node-id ocid1.instance.oc1.iad.anu___4cq

ワーカー・ノードをコード化およびドレインせずに、基礎となる問題を修正せずにワーカー・ノードを強制的に削除する場合は、次のように入力します。

oci ce node-pool delete-node --node-pool-id <nodepool-ocid> --node-id <node-ocid> --override-eviction-grace-duration PT0M

ここで、--override-eviction-grace-duration PT0Mは削除猶予期間を0分に設定します。

例:

oci ce node-pool delete-node --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya --node-id ocid1.instance.oc1.iad.anu___4cq --override-eviction-grace-duration PT0M

quantityPerSubnetが1以上のノード・プール

以前のContainer Engine for Kubernetesリリースでノード・プールを作成および更新するときに、「サブネット当たりの数量」プロパティの値(APIのquantityPerSubnet)を入力して、ノード・プールに必要なワーカー・ノードの数を指定しました。

より新しいContainer Engine for Kubernetesリリースでは、「ノード数」プロパティ(APIのsize)の値を入力して、ノード・プールに必要なワーカー・ノードの数を指定します。

「サブネット当たりの数量」(quantityPerSubnet)がゼロまたはnullに設定されているノード・プールから削除する場合、特定のワーカー・ノードを削除(および「コードンおよびドレイン」オプションを選択)のみできることに注意してください。To delete specific worker nodes (and select Cordon and drain options) from an older node pool that has Quantity per subnet (quantityPerSubnet) set to 1 or more, you must first set Quantity per subnet (quantityPerSubnet) to zero or null.「サブネット当たりの数量」(quantityPerSubnet)をゼロまたはnullに設定した後、かわりに「ノード数」(size)の値を入力して、ワーカー・ノードの数を指定できます。その時点以降、特定のワーカー・ノードを削除できます(「Cordon and drain」オプションを選択)。

ノード・プールのサブネット当たりの数量(quantityPerSubnet)の値を確認するには、次のコマンドを入力します:

oci ce node-pool get --node-pool-id <node-pool-ocid>