不要になったノードを削除するには、Container Service for Kubernetes (ACK) コンソールの [ノードプール] ページで操作を実行する必要があります。 これにより、ユーザーのエラーを防ぐことができます。 ノードを削除すると、そのノードで実行されるポッドが他のノードに移行されます。 これは、サービスの中断を引き起こし得る。 オフピーク時にノードを削除することを推奨します。
前提条件
ACKクラスターが作成されます。 詳細については、「ACK管理クラスターの作成」または「ACK専用クラスターの作成」をご参照ください。
kubectlクライアントがクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
ノードを削除する方法
ノードプールからノードを削除すると、ACKはノードプール内のノードの予想数を自動的に調整します。 新しい予想ノード数は、元の予想ノード数から除去されたノード数を引いたものに等しい。 予想されるノード数を変更する方法の詳細については、「ノードプールのスケーリング」をご参照ください。
ノードを削除するときは、次のオプションを選択できます。
ECSインスタンスのリリース: ノードが削除された後、Elastic Compute Service (ECS) インスタンスをリリースします。
重要ECSインスタンスがサブスクリプション課金方法を使用している場合、ノードが削除された後、システムはインスタンスをリリースしません。
ドレインノード: ノードが削除される前にノードを自動的にドレインします。
説明ノード削除タスクのタイムアウト時間は30分です。 ノード上のポッドのterminationGracePeriodSecondsパラメーター (グレースフルシャットダウン期間) が40分などの大きな値に設定されている場合、ノードの削除タスクがタイムアウトする前にノードのドレインを完了することはできません。 これは、ノード除去タスクのタイムアウト期間がグレースフルシャットダウン期間よりも優先され、グレースフルシャットダウン期間がタイムアウト期間よりも長いためである。 この場合、ノードのドレインは30分後に終了し、失敗したと見なされます。 ノードを手動でドレインする必要があります。
ノードのドレインが失敗すると、ノード削除タスクは直ちにキャンセルされます。 ノード上のアプリケーションポッドがより長いグレースフルシャットダウン期間を必要とする場合、
kubectl drain [node-name] [options]
コマンドを実行して、ノードからポッドを手動で削除できます。 ノードが空になったら、ノードを削除できます。 この場合、ノードを削除するときに [ドレインノード] オプションを選択しないでください。
ノードプールからノードを削除するには、次の手順を実行します。
[ドレインノード] オプションを選択すると、システムは最初にノードをドレインします。 システムがノードのドレインに失敗した場合、ノード削除タスクはキャンセルされます。 削除するノードから追い出されたポッドに対して、クラスターに十分なノードリソースがあることを確認します。
kubectl drain [node-name] [options]
コマンドを実行して、ノードを削除する前にノードを手動でドレインします。 この場合、ノードを削除するときに [ドレインノード] オプションを選択しないでください。クラスターのKubernetes APIサーバーからノードを削除します。
スケーリンググループからノードを削除します。 ECSインスタンスがサブスクリプション課金方法を使用している場合、[ECSインスタンスのリリース] オプションを選択しても、システムはインスタンスをリリースしません。 ECSコンソールまたはECS APIを呼び出してインスタンスを削除できます。 [ECSインスタンスのリリース] オプションを選択し、ECSインスタンスが従量課金方式を使用している場合、ノードが削除された後、システムはインスタンスをリリースします。 ノードを削除する前に、ノードのデータをバックアップすることをお勧めします。
使用上の注意
ノードを削除すると、そのノードで実行されるポッドが他のノードに移行されます。 これは、サービスの中断を引き起こし得る。 オフピーク時にノードを削除することを推奨します。
ノードを削除すると、不明なエラーが発生する場合があります。 ノードを削除する前に、ノードのデータをバックアップします。
ノードは、削除されているときにスケジュール不可状態のままです。
ワーカーノードのみを削除できます。 マスターノードは削除できません。
ACKコンソールでノードを削除することを推奨します。 kubectl delete nodeコマンドを実行してACKクラスターからノードを削除する場合は、次の制限事項に注意してください。
削除されたノードを他のACKクラスターに追加することはできません。
ノードがデプロイされているECS (Elastic Compute Service) インスタンスは、ノードが削除されるとリリースされます。
ECSまたはAuto Scalingコンソールを使用してノードを削除したり、ノードプールからインスタンスをリリースしたりすると、ノードまたはインスタンスは自動的に中断され、ACKコンソールから削除されます。 ECSまたはAuto Scaling APIを使用してノードを削除またはインスタンスをリリースする場合、またはノードプール内のインスタンスのサブスクリプションが期限切れになった場合も、同じルールが適用されます。 ノードプールが予想されるノード数で構成されている場合、ノードプールはノードプールの構成に基づいて予想されるノード数に自動的にスケールされます。
手順
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページで、管理するノードプールの名前をクリックします。 [ノード] タブで、削除するノードを選択し、ページ下部の [一括削除] をクリックします。
オプション: [ノードの削除] ダイアログボックスで、[ECSインスタンスのリリース] および [ドレインノード] を選択します。
ECSインスタンスのリリース:
pas-as-you-go ECSインスタンスとインスタンス上のデータディスクのみがリリースされます。 リリースされていないECSインスタンスに対しては引き続き課金されます。
サブスクリプションECSインスタンスは、サブスクリプションの有効期限が切れると自動的にリリースされます。
[ECSインスタンスのリリース] を選択しない場合でも、ノードがデプロイされているECSインスタンスに対して課金されます。
Drain Node: 削除するノードで実行されるポッドをクラスター内の他のノードに移行します。 このオプションを選択した場合、クラスター内の他のノードにこれらのポッドをホストするのに十分なリソースがあることを確認します。
kubectl drain node-name [options]
コマンドを実行して、ノードで実行されているポッドをクラスター内の他のノードに移行することもできます。説明node-nameはyour-region-nameである必要があります。node-id形式。
your-region-nameは、管理するクラスターがデプロイされているリージョンを指定します。 node-idは、削除するノードがデプロイされているECSインスタンスのIDを指定します。 ノード名の例: cn-hangzhou.i-i-bp1asavedmte377c3 **** 。
options
は、コマンドのオプションパラメーターを指定します。 オプションの例:-- force -- ignore-daemonsets -- delete-local-data
kubectl drain -- help
コマンドを実行して、ヘルプ情報を表示できます。
上記の情報を理解した上、ノードを削除したいを選択し、OKをクリックします。
説明ノードの削除に失敗したことを示すメッセージが表示された場合は、[ECSインスタンスのリリース] と [ノードのドレイン] をクリアしてから、ノードを再度削除します。
よくある質問
ノードプールの [ノード] タブでノードが見つからない場合、ノードを削除するにはどうすればよいですか。
ノードを削除するには、次の操作を実行します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
ノードページで、削除するノードを選択し、ページの下部にある一括削除をクリックします。
[ノードの削除] ダイアログボックスで情報を確認し、OKをクリックします。
関連ドキュメント
ACKを使用すると、ノードプール内のノードの予想数を変更することで、ノードプールをスケーリングできます。 ノードプールをスケールアウトしてビジネス開発の要件を満たし、ノードプールをスケールインしてリソースコストを削減できます。 詳細については、「ノードプールのスケーリング」をご参照ください。
既存のECSインスタンスをACKクラスターに追加したり、既存のノードをノードプールに再追加したりできます。 これを行うには、ACKコンソールにログインして手動でノードを追加するか、ノードを自動的に追加するようにACKを設定します。 詳細については、「既存のECSインスタンスをACKクラスターに追加する」をご参照ください。
データディスクに影響を与えずにノードプールを更新する方法については、「ノードプールの更新」をご参照ください。