Pod の事前ドレインや、基盤となる ECS インスタンスのリリースといったオプションを使用して、ワーカーノードを削除します。
ノードは常に Container Service for Kubernetes (ACK) コンソールから削除してください。 kubectl delete node を実行すると削除ワークフローがバイパスされ、ECS インスタンスが不整合な状態のまま残ります。
ユースケース
次のような場合にノードを削除します:
-
非管理対象ノードの廃止:ノードプール機能が提供される前に作成された古いクラスターには、非管理対象のワーカーノードが存在する場合があります。ノードを削除した後、既存のノードプールに追加して一元管理します。
-
ECS インスタンスの置き換え:新しい ECS インスタンスを先にノードプールに追加し、その後に古いインスタンスを削除します。
-
ノードプールのスケールイン:手動スケーリングまたは自動スケーリングを使用しているノードプールから特定の ECS インスタンスを削除し、コストを削減します。
-
ノードプール間でのノードの移行:移行元ノードプールからノードを削除し、移行先ノードプールに追加します。
-
ECS インスタンスのリサイズ:ノードを削除し、ECS コンソールでインスタンスタイプを変更してから、ノードを再度追加します。
-
課金方法の変更:ノードを削除し、ECS コンソールで課金方法を従量課金からサブスクリプションに変更してから、ノードを再度追加します。
-
異常なノードの再初期化:ノードを削除して再度追加し、システムディスクをリセットします。
警告ノードの再初期化ではシステムディスクが置き換えられます。続行する前に、システムディスク上のデータをバックアップしてください。
ノードを削除したときの動作
ノードを削除すると、ACK は次の手順を実行します:
-
ノードのドレイン ([ノードのドレイン] を選択した場合):ACK は削除前に、すべての Pod を利用可能な他のノードに退去させます。これによりサービスの中断を防げますが、残りのノードに十分なキャパシティが必要です。
-
クラスターからノードを削除:ノードプールに [期待されるノード数] が設定されている場合、ACK は自動的に調整します。
-
ECS インスタンスのリリース ([ECS インスタンスのリリース] を選択した場合):ACK は ECS インスタンスとそのデータディスクをリリースします。この操作は元に戻せません。
開始する前に、次の 2 つの削除オプションを確認してください:
| オプション | 選択するタイミング | 未選択の場合の影響 |
|---|---|---|
| [ノードのドレイン] | 手動でドレインした場合を除き、常に選択します | 削除前に Pod が退去されないため、サービスが中断する可能性があります |
| [ECS インスタンスのリリース] | ECS インスタンスが不要になった場合 | ECS インスタンスは稼働と課金が継続され、手動で管理する必要があります |
注意事項
-
ECS コンソール、Auto Scaling (ESS) コンソール、またはそれらの API でノードをリリースしたりインスタンスを削除したりしないでください。また、サブスクリプションインスタンスが有効期限切れで自動的にリリースされないようにしてください。これらの操作によりノードが停止し、ACK コンソールから削除されます。ノードプールに [期待されるノード数] が設定されている場合、ACK はスケールアウトして削除されたインスタンスを置き換えます。
-
ノードを削除する前にデータをバックアップしてください。削除中の Pod 移行により、稼働中のサービスに影響する場合があります。
-
ノードアフィニティとスケジューリングポリシーにより、他のノードに再スケジュールできることを確認してください。
-
ノードをリリースすると、データディスクとシステムディスクのデータは完全に失われます。ノードのライフサイクルを超えてデータを永続化するには、PersistentVolume (PV) を使用してください。
ノードのドレインの詳細
ノードのドレイン中のデフォルトのグレースフルターミネーションのタイムアウトは 30 分です。Pod の terminationGracePeriodSeconds がそれより長く設定されている場合 (例:40 分) でも同様です。Pod が 30 分以内に終了しない場合、ACK は Pod を強制終了するため、ドレインが失敗してノードの削除が停止します。再試行するには、コンソールで操作を再度開始してください。
Pod により長い終了時間が必要な場合は、先にノードを手動でドレインしてください:
kubectl drain <nodeName> [options]
| プレースホルダー | 説明 | 例 |
|---|---|---|
<nodeName> |
ドレインするノードの名前 | cn-hangzhou.10.126.XX.XX |
[options] |
オプションのフラグ | --force --ignore-daemonsets --delete-local-data |
オプションの一覧については、kubectl drain --help を実行してください。
すべての Pod が退去されたら、[ノードのドレイン] のチェックを外してノードを削除します。
PodDisruptionBudget (PDB): ドレインは、クラスター内の PDB ルールに従います。PDB により退去がブロックされると、ドレインは失敗します。ドレインする前に、該当する PDB ルールを確認して調整してください。
ECS インスタンスのリリースの詳細
-
すぐにリリースできるのは、従量課金 の ECS インスタンスとそのデータディスクのみです。
-
サブスクリプションの ECS インスタンスは、サブスクリプションの期限が切れると自動的にリリースされます。期限前にリリースする場合は、先に 返金を申請するか、または 課金方法を従量課金に変更してください。
-
スマートホスティング ノードプールでは、ACK がワークロードに基づいてノードのライフサイクルを自動的に管理します。ノードを削除すると、基盤となる ECS リソースが削除されます。
ノードプールからのノードの削除
-
ACK コンソールにログインします。左側のナビゲーションペインで、[クラスター]をクリックします。
-
[クラスター] ページで、クラスター名をクリックします。左側のナビゲーションペインで、[ノード] > [ノードプール] を選択します。
-
対象のノードプールの名前をクリックし、[ノード] タブに移動します。
-
ノードを削除します:
-
単一ノード:対象のノードの [アクション] 列で、[その他] > [削除] を選択します。

-
複数のノード: 対象のノードを選択し、[一括削除] をクリックします。

-
-
ダイアログで必要に応じて [ノードのドレイン] と [ECS インスタンスのリリース] を選択し、確認します。

クラスターからのノードの削除
-
ACK コンソールにログオンします。左側のナビゲーションペインで、[クラスター] をクリックします。
-
[クラスター] ページで、クラスター名をクリックします。左側のナビゲーションペインで、[ノード] > [ノード] を選択します。
-
[ノード] ページで、ノードを削除します:
-
単一ノード:対象のノードの[操作]列で、[その他] > [削除]を選択します。

-
複数のノード:対象のノードを選択し、[一括削除] をクリックします。

-
-
ダイアログで必要に応じて [ノードのドレイン] と [ECS インスタンスのリリース] を選択し、確認します。

トラブルシューティング
ノードの削除に失敗する場合
ノードの削除は、グレースフルターミネーションのタイムアウトや、PDB による退去のブロックが原因で失敗することがあります。解決するには、先にノードを手動でドレインしてください:
kubectl drain <nodeName> [options]
| プレースホルダー | 説明 | 例 |
|---|---|---|
<nodeName> |
ドレインするノードの名前 | cn-hangzhou.10.126.XX.XX |
[options] |
オプションのフラグ | --force --ignore-daemonsets --delete-local-data |
すべての Pod が退去されたら、[ノードのドレイン] のチェックを外してノードを削除します。
次のステップ
-
ノードをクラスターまたはノードプールに再度追加する方法については、「既存ノードの追加」をご参照ください。
-
プログラムからノードを削除する方法については、「RemoveNodePoolNodes」および「DeleteClusterNodes」をご参照ください。
-
非管理対象ノードをノードプールに移行する方法については、「非管理対象ノードをノードプールに移行」をご参照ください。
-
[期待されるノード数] を使用してノードプールのサイズを手動で調整する方法については、「ノードプールの手動スケーリング」をご参照ください。
-
ノードを再追加した後にシステムディスクを再初期化する方法については、「システムディスクの再初期化」をご参照ください。