Amazon EKS のワーカーノードをチェック、スケール、削除、またはドレインする方法を教えてください。

最終更新日: 2021 年 7 月 20 日

Amazon Elastic Kubernetes Service (Amazon EKS) ワーカーノードを eksctl または AWS マネジメントコンソールを使用して起動しました。次に、ワーカーノードをチェック、スケール、ドレイン、または削除したいと考えています。

簡単な説明

必要に応じて、該当するセクションのステップを完了してください。

  • ワーカーノードをチェックする
  • ワーカーノードをスケールする
  • ワーカーノードをドレインする
  • ワーカーノードを削除する

解決方法

ワーカーノードをチェックする

次のコマンドを実行して、Amazon EKS コントロールプレーンに登録されているワーカーノードをリストします。

kubectl get nodes -o wide

出力は、ワーカーノードの名前、Kubernetes バージョン、オペレーティングシステム、および IP アドレスを返します。

単一のワーカーノードに関する追加情報を取得するには、次のコマンドを実行します。

kubectl describe node/node_name

注: node_name はお使いの値に置き換えてください。例: ip-XX-XX-XX-XX.us-east-1.compute.internal

出力には、ラベル、テイント、システム情報、およびステータスなどのワーカーノードに関するより多くの情報が表示されます。

ワーカーノードをスケールする

注: ノードグループが Amazon EKS コンソールに表示される場合は、マネージドノードグループを使用します。それ以外の場合は、アンマネージドノードグループを使用します。

(オプション 1) 次のコマンドを実行して、eksctl を使ってマネージドワーカーノードまたはアンマネージドワーカーノードをスケールします。

eksctl scale nodegroup --cluster=clusterName --nodes=desiredCount --name=nodegroupName

注: clusterNamedesiredCount、および nodegroupName は、お使いの値に置き換えてください。

- または -

(オプション 2) マネージド型ノードグループの更新の「ノードグループ設定を編集するには」のセクションにある手順を完了して、eksctl を使用せずにマネージドワーカーノードをスケールします。

- または -

(オプション 3) 以下の手順を実行して、AWS CloudFormation を使ってアンマネージドワーカーノードをスケーリングします。

1.    CloudFormation テンプレートを使用して、Windows または Linux のワーカーノードを起動します。

2.    CloudFormation スタックの NodeAutoScalingGroupDesiredCapacityNodeAutoScalingGroupMinSize、または NodeAutoScalingGroupMaxSize パラメータを変更します。

ワーカーノードをドレインする

重要: ドレインアクションはワーカーノードを分離して、そのノードでの新しいポッドのスケジュールを停止するよう Kubernetes に指示します。ノードをドレインすることによって、ターゲットノードで実行されているポッドがエビクトされます (つまり、ポッドが停止されます)。これが本番環境に与え得る影響を検討するようにしてください。

ノードグループ全体、または単一のワーカーノードをドレインできます。適切なオプションを選択してください。

(オプション 1) ノードグループ全体をドレインする。

ワーカーノードの起動に eksctl を使用している場合は、次のコマンドを実行します。

eksctl drain nodegroup --cluster=clusterName --name=nodegroupName

注: clusterNamenodegroupName は、お使いの値に置き換えてください。

ノードグループを uncordon するには、次のコマンドを実行します。

eksctl drain nodegroup --cluster=clusterName --name=nodegroupName --undo

注: clusterNamenodegroupName は、お使いの値に置き換えてください。

eksctl を使用してワーカーノードを起動していない場合は、特定の Kubernetes バージョンのすべてのノードを識別してドレインします。以下はその例です。

#!/bin/bash
K8S_VERSION=1.18.8-eks-7c9bda
nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}")
for node in ${nodes[@]}
do
    echo "Draining $node"
    kubectl drain $node --ignore-daemonsets --delete-local-data
done

特定の Kubernetes バージョンのすべてのノードを識別して uncordon するには、次のコードを使用します。

#!/bin/bash
K8S_VERSION=1.18.8-eks-7c9bda
nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}")
for node in ${nodes[@]}
do
    echo "Uncordon $node"
    kubectl uncordon $node
done

注: ワーカーノードのバージョンを取得するには、次のコマンドを実行します。

$ kubectl get nodes
NAME                                      STATUS   ROLES    AGE     VERSION
ip-XXX-XXX-XX-XXX.ec2.internal            Ready    <none>   6d4h    v1.18.8-eks-7c9bda
ip-XXX-XXX-XX-XXX.ec2.internal            Ready    <none>   6d4h    v1.18.8-eks-7c9bda

注: バージョン番号は [VERSION] 列に表示されます。

(オプション 2) 単一のワーカーノードをドレインする

ワーカーノードの起動に eksctl を使用していない、または特定のノードだけをドレインしたい場合は、ワーカーノードをグレースフルに分離します。

kubectl drain node_name --ignore-daemonsets

注: node_name はお使いの値に置き換えてください。

分離を元に戻すには、次のコマンドを実行します。

kubectl uncordon node_name

注: node_name はお使いの値に置き換えてください。

既存のアプリケーションを新しいワーカーノードグループに移行するには、新しいノードグループへの移行を参照してください。

ワーカーノードを削除する

重要: 削除アクションは復旧不可能です。これが本番環境に与え得る影響を検討するようにしてください。

eksctl を使用している場合は、次のコマンドを実行します。

eksctl delete nodegroup --cluster=clusterName --name=nodegroupName

マネージドノードグループがある場合は、マネージド型ノードグループの削除の手順を完了してください。

アンマネージドノードグループがあり、CloudFormation テンプレートを使用してワーカーノードを起動した場合は、CloudFormation スタックを削除します。Windows または Linux のノードグループ用に作成したスタックを削除する必要があります。

アンマネージドノードグループがあり、ワーカーノードの起動に CloudFormation テンプレートを使用しなかった場合は、ワーカーノードの Auto Scaling グループを削除します。または、Auto Scaling グループを使用しなかった場合は、直接インスタンスを終了します。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?