ワーカーノードが不要になった場合は、Container Service for Kubernetes (ACK) コンソールでノードプールまたはクラスターから削除できます。サービスの中断を防ぐため、この操作はオフピーク時に実行し、このトピックの注意事項と機能説明に従ってください。
シナリオ
ノードプール機能が導入される前に作成されたクラスターに、管理されていないワーカーノードが含まれている場合。管理されていないノードをクラスターから削除できます。後でノードを使用するには、既存のノードプールに追加してバッチ操作を容易にすることができます。
ノードプール内の古い Elastic Compute Service (ECS) インスタンスを新しいインスタンスに置き換えたい場合。これを行うには、新しいインスタンスをノードプールに追加してから古いインスタンスを削除します。
ノードプールが手動または自動スケーリングで構成されている場合。特定の ECS インスタンスを削除してノードプールをスケールインし、コストを節約できます。
あるノードプールから別のノードプールにノードを移行する必要がある場合。ソースノードプールからノードを削除し、宛先ノードプールに追加できます。
ECS インスタンスをスペックアップまたはスペックダウンする必要がある場合。対応するノードを削除し、ECS コンソールでインスタンス構成を変更してから、ノードをノードプールに再度追加できます。
ECS インスタンスの課金方法を変更する必要がある場合 (例: 従量課金からサブスクリプションへ)。対応するノードを削除し、ECS コンソールで課金方法を変更してから、ノードをノードプールに再度追加できます。
ノードが異常な場合。ノードをクラスターから削除してから再度追加することで、ノードを再初期化できます。
この操作は、システムディスクを置き換えることによってノードをリセットします。システムディスク上の重要なデータは必ずバックアップしてください。
注意事項
ノードを削除するときは、ACK コンソールで操作を実行してください。
kubectl delete nodeコマンドを実行して手動でノードを削除しないでください。ECS または Auto Scaling (ESS) コンソール、あるいはそれらの API を介してノードをリリースしたり、インスタンスを削除したりしないでください。サブスクリプションインスタンスが有効期限切れ時に自動的にリリースされるのを許可しないでください。これらの場合、ノードは停止され、ACK コンソールから自動的に削除されます。
ノードプールに希望するノード数が設定されている場合、ノードプールは自動的にスケールアウトして新しいインスタンスを作成し、指定されたノード数を維持します。
ノードの削除には Pod の移行が含まれ、サービスに影響を与える可能性があります。この操作はオフピーク時に実行してください。予期せぬリスクを防ぐため、事前にデータをバックアップしてください。
ノードを削除すると、ACK はノードをドレインします。アプリケーション Pod のスケジュールが失敗するのを防ぐため、クラスター内の他のノードに十分なリソースがあることを確認してください。
削除するノード上の Pod のノードアフィニティルールとスケジューリングポリシーを確認してください。これにより、ノードが削除された後、Pod が他のノードにスケジュールされることが保証されます。
システムディスクとデータディスクのライフサイクルはノードにバインドされています。ノードが削除時にリリースされると、そのディスクもリリースされます。ディスク上のすべてのデータは永久に失われ、回復できません。データを保護するには、永続ボリューム (PV) を使用して永続化が必要なデータを管理します。これにより、データがノードのライフサイクルから切り離されます。
機能説明
ノードの削除とは、1 つ以上のワーカーノードをノードプールまたはクラスターから削除することを意味します。ノードプールに [希望するノード数] (ノードプールが維持しなければならないノードの総数) を設定した場合、その値は自動的に調整されます。
削除後にインスタンスをクラスターに再度追加する方法については、「手順」をご参照ください。
ノードを削除する前に、ノードを自動的にドレインするかどうか、および ECS インスタンスをリリースするかどうかを選択できます。ノードをドレインすると、ノード上の Pod が他のノードに安全に退避されます。ECS インスタンスをリリースすると、そのデータディスクもリリースされます。
ノードの自動ドレイン
ノードが削除される前に、ノードはドレインされ、その Pod が他のノードに安全に退避されます。これにより、サービスの中断が防止されます。この操作を実行する前に、クラスター内の他のノードに十分なリソースがあることを確認し、アプリケーション Pod のスケジュールが失敗しないようにしてください。次の点に注意してください。
Pod のグレースフルシャットダウン構成: ノードを削除する場合、Pod のグレースフルシャットダウンのデフォルトのタイムアウト期間は 30 分です。Pod が 40 分などのより長い `terminationGracePeriodSeconds` 値で構成されている場合でも、システムは 30 分のタイムアウト期間を使用します。Pod が 30 分以内にグレースフルシャットダウンに失敗した場合、システムは Pod を強制的に終了します。ドレイン操作は失敗し、ノードの削除プロセスは停止します。操作を手動でリトライする必要があります。
アプリケーション Pod が長いグレースフルターミネーション期間を必要とする場合、まず
kubectl drain <nodeName> [options]コマンドを使用して手動でノードをドレインできます。ノードで実行されているアプリケーション Pod がなくなった後、[自動ノードドレイン (ドレイン)] チェックボックスをオフにし、その後ノードを削除します。Pod Disruption Budget (PDB) 構成: ノードのドレイン操作は、PDB に基づいて Pod を他の利用可能なノードに退避させます。ドレインの失敗を防ぐために、PDB ルールを確認して変更または削除してください。
ECS インスタンスのリリース
ノードが削除された後、ECS インスタンスとそのデータディスクをリリースできます。事前にデータをバックアップしてください。このオプションを選択しない場合、ECS インスタンスは引き続き課金され、そのライフサイクルを管理する必要があります。
従量課金の ECS インスタンスとそのデータディスクのみがリリース可能です。ECS インスタンスがリリースされない場合、引き続き課金されます。
サブスクリプションの ECS インスタンスは、サブスクリプション期間が終了すると自動的にリリースされます。サブスクリプションの ECS インスタンスが有効期限切れになる前に、返金をリクエストして事前にリリースすることができます。また、インスタンスの課金方法をサブスクリプションから従量課金に変換してからリリースすることもできます。
スマートホスティングが有効になっているノードプールの場合、システムはノードのライフサイクルを自動的に管理します。システムは、ワークロードの要件に基づいてノードを自動的に追加または削除します。ノードが削除されると、その基盤となる ECS リソースは完全に削除されます。
手順
ノードプールからノードを削除する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
ターゲットノードプールの名前をクリックします。[ノード] タブで、ノードを削除します。
単一ノードの削除: ターゲットノードを見つけ、[アクション] 列で を選択します。

複数ノードの削除: ターゲットノードを選択し、ページ下部の [一括削除] をクリックします。

[ノードの自動ドレイン] と [ECS インスタンスのリリース] を選択するかどうかを選びます。ページ上の注意を読み、画面の指示に従って操作を完了します。
[自動的にノードをドレイン] および [ECS インスタンスの解放] の注意事項の詳細については、「機能の説明」をご参照ください。

クラスターからノードを削除する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、変更したいクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[ノード] ページで、ノードを削除します。
単一ノードの削除: ターゲットノードを見つけ、[アクション] 列で を選択します。

複数ノードの削除: ターゲットノードを選択し、ページ下部の [一括削除] をクリックします。

[ノードの自動ドレイン] と [ECS インスタンスのリリース] を選択するかどうかを選びます。ページ上の注意を読み、画面の指示に従って操作を完了します。
[自動的にノードをドレイン] および [ECS インスタンスを解放] の注意事項の詳細については、「機能説明」をご参照ください。

よくある質問
ノードの削除に失敗した場合はどうすればよいですか?
グレースフルシャットダウン期間や PDB 構成などの理由で、ノードの削除に失敗することがあります。詳細については、「機能説明」をご参照ください。この場合、まず kubectl drain <nodeName> [options] コマンドを実行して手動でノードをドレインします。すべてのアプリケーション Pod がノードから退避された後、ノードを削除します。
<nodeName>: ノードの名前。例:cn-hangzhou.10.126.XX.XX。[options]: オプションのパラメーター。たとえば、このパラメーターを--force --ignore-daemonsets --delete-local-dataに設定できます。詳細については、kubectl drain --helpコマンドを実行してください。
関連ドキュメント
API 操作を呼び出してノードを削除することもできます。詳細については、「RemoveNodePoolNodes」および「DeleteClusterNodes」をご参照ください。
管理されていないノードを管理のためにノードプールに追加するには、「管理されていないノードをノードプールに移行する」をご参照ください。
ACK では、[希望するノード数] を調整してノードプールを手動でスケーリングし、指定されたノード数を維持できます。詳細については、「ノードプールを手動でスケーリングする」をご参照ください。
ECS インスタンスを購入し、それをワーカーノードとして ACK クラスターに追加したい場合、または削除したノードをノードプールに再度追加したい場合は、ACK コンソールでノードを自動または手動で追加できます。詳細については、「既存ノードの追加」をご参照ください。
ECS インスタンスをリセットしたり、そのシステムディスク上のデータをクリアしたりするには、「システムディスクの再初期化 (オペレーティングシステムのリセット)」をご参照ください。