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
注: clusterName、desiredCount、および nodegroupName は、お使いの値に置き換えてください。
(オプション 2) マネージド型ノードグループの更新の「ノードグループ設定を編集するには」のセクションにある手順を完了して、eksctl を使用せずにマネージドワーカーノードをスケールします。
(オプション 3) 以下の手順を実行して、AWS CloudFormation を使ってアンマネージドワーカーノードをスケーリングします。
1. CloudFormation テンプレートを使用して、Windows または Linux のワーカーノードを起動します。
2. CloudFormation スタックの NodeAutoScalingGroupDesiredCapacity、NodeAutoScalingGroupMinSize、または NodeAutoScalingGroupMaxSize パラメータを変更します。
ワーカーノードをドレインする
重要: ドレインアクションはワーカーノードを分離して、そのノードでの新しいポッドのスケジュールを停止するよう Kubernetes に指示します。ノードをドレインすることによって、ターゲットノードで実行されているポッドがエビクトされます (つまり、ポッドが停止されます)。これが本番環境に与え得る影響を検討するようにしてください。
ノードグループ全体、または単一のワーカーノードをドレインできます。適切なオプションを選択してください。
(オプション 1) ノードグループ全体をドレインする。
ワーカーノードの起動に eksctl を使用している場合は、次のコマンドを実行します。
eksctl drain nodegroup --cluster=clusterName --name=nodegroupName
注: clusterName と nodegroupName は、お使いの値に置き換えてください。
ノードグループを uncordon するには、次のコマンドを実行します。
eksctl drain nodegroup --cluster=clusterName --name=nodegroupName --undo
注: clusterName と nodegroupName は、お使いの値に置き換えてください。
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 グループを使用しなかった場合は、直接インスタンスを終了します。