eksctl または AWS マネジメントコンソールを使用して、Amazon Elastic Kubernetes Service (Amazon EKS) ワーカーノードを起動しました。次に、ワーカーノードをチェック、スケール、ドレイン、削除したいと考えています。
解決策
ワーカーノードをチェックする
Amazon EKS コントロールプレーンに登録されているワーカーノードをリストするには、次のコマンドを実行します。
kubectl get nodes -o wide
出力には、ワーカーノードの名前、Kubernetes バージョン、オペレーティングシステム (OS)、IP アドレスが返されます。
単一のワーカーノードに関する追加情報を取得するには、次のコマンドを実行します。
kubectl describe node/node_name
注: node_name は、ip-XX-XX-XX-XX.us-east-1.compute.internal のような実際の値に置き換えてください。
出力には、ラベル、テイント、システム情報、ステータスなど、ワーカーノードに関する詳細情報が表示されます。
ワーカーノードをスケールする
注: Amazon EKS コンソールにノードグループが表示される場合は、マネージドノードグループを使用します。そうでない場合は、アンマネージドノードグループを使用します。
次のいずれかの方法を使用して、ワーカーノードをスケールします。
eksctl を使用してワーカーノートをスケールする
eksctl を使用してマネージドワーカーノードまたはアンマネージドワーカーノードをスケールするには、次のコマンドを実行します。
eksctl scale nodegroup --cluster=clusterName --nodes=desiredCount --name=nodegroupName
注: clusterName、desiredCount、および nodegroupName を実際の値に置き換えてください。
eksctl を使用せずにワーカーノードをスケールする
eksctl を使用せずにマネージドワーカーノードをスケールするには、ノードグループ設定を編集します。
CloudFormation でワーカーノードをスケールする
AWS CloudFormation を使用してアンマネージドワーカーノードをスケールするには、次の手順を実行します。
- CloudFormation テンプレートを使用して、Windows または Linux 用のワーカーノードを起動します。
- NodeAutoScalingGroupDesiredCapacity、NodeAutoScalingGroupMinSize、NodeAutoScalingGroupMaxSize パラメータを CloudFormation スタックで変更します。
ワーカーノードをドレインする
重要: ドレインアクションはワーカーノードを分離し、Kubernetes はノードでの新しいポッドをスケジュールしないようになります。ターゲットノードで実行されているポッドは、ドレインノードから削除され、停止されます。
ノードグループ全体または単一のワーカーノードのいずれかをドレインできます。
ノードグループ全体をドレインする
eksctl を使用してワーカーノードを起動する場合は、次のコマンドを実行します。
eksctl drain nodegroup --cluster=clusterName --name=nodegroupName
注: clusterName および nodegroupName を実際の値に置き換えてください。
ノードグループをドレインするには、次のコマンドを実行します。
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 バージョンのすべてのノードを識別してドレインするには、次のコードを使用します。
#!/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
注: ワーカーノードのバージョンを取得するには、次のコマンドを実行してください。バージョン番号は VERSION 列に表示されます。
$ kubectl get nodesNAME 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
単一のワーカーノードをドレインする
eksctl を使用してワーカーノードを起動しない場合、または特定のノードのみをドレインしたい場合は、ワーカーノードを正常に分離します。
kubectl drain node_name --ignore-daemonsets
**注:**node_name を実際の値に置き換えます。
分離を解除するには、次のコマンドを実行します。
kubectl uncordon node_name
**注:**node_name を実際の値に置き換えます。
既存のアプリケーションを新しいワーカーノードグループに移行する方法については「アプリケーションを新しいノードグループに移行する」を参照してください。
ワーカーノードを削除する
重要: 削除アクションは回復不能です。
eksctl を使用している場合は、次のコマンドを実行します。
eksctl delete nodegroup --cluster=clusterName --name=nodegroupName
マネージドノードグループがある場合は、「マネージドノードグループを削除する」の手順を実行します。
アンマネージドノードグループがあり、CloudFormation テンプレートを使用してワーカーノードを起動した場合は、そのスタックを削除します。Windows または Linux のノードグループ用に作成したスタックを削除する必要があります。
アンマネージドノードグループがあり、CloudFormation テンプレートを使用せずにワーカーノードを起動した場合は、Auto Scaling グループを削除します。Auto Scaling グループを使用しなかった場合は、直接インスタンスを終了します。