eksctl または Amazon Elastic Kubernetes Service (Amazon EKS) コンソールを使用してワーカーノードの確認、スケーリング、ドレイン、または削除を行いました。
解決策
ワーカーノードを確認する
Amazon EKS コントロールプレーンに登録されているワーカーノードを一覧表示するには、次のコマンドを実行します。
kubectl get nodes -o wide
出力には、ワーカーノードの名前、Kubernetes のバージョン、オペレーティングシステム (OS)、IP アドレスが表示されます。
特定のワーカーノードに関する追加情報を取得するには、次のコマンドを実行します。
kubectl describe node/node_name
注: node_name をワーカーノードの Amazon リソースネーム (ARN) に置き換えてください。(例: ip-AA-BB-CC-DD.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 用のワーカーノードを起動します。次に、CloudFormation スタックの NodeAutoScalingGroupDesiredCapacity、NodeAutoScalingGroupMinSize、NodeAutoScalingGroupMaxSize パラメータを変更します。
ワーカーノードをドレインする
重要: ドレインアクションではワーカーノードが分離されるため、Kubernetes はノードで新しいポッドをスケジュールしないようになります。ノードのドレインにより、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
注: 1.18.8-eks-7c9bda を 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
注: 1.18.8-eks-7c9bda を Kubernetes の実際のバージョンに置き換えてください。
ワーカーノードのバージョン番号を取得するには、次のコマンドを実行します。
kubectl get nodesNAME
注: nodesNAME を実際のノード名に置き換えてください。
出力例:
$ kubectl get nodesNAME STATUS ROLES AGE VERSION
ip-ABC-ACB-DE-ABC.ec2.internal Ready <none> 6d4h v1.18.8-eks-7c9bda
ip-ABC-ABC-DE-ABC.ec2.internal Ready <none> 6d4h v1.18.8-eks-7c9bda
バージョン番号は VERSION 列に表示されています。
単一のワーカーノードをドレインする
ワーカーノードの起動または特定のノードのドレインに eksctl を使用しなかった場合は、ワーカーノードを安全に分離してください。次のコマンドを実行します。
kubectl drain node_name --ignore-daemonsets
注: node_name を実際のノード名に置き換えてください。
分離を取り消すには、次のコマンドを実行します。
kubectl uncordon node_name
注: node_name を実際のノード名に置き換えてください。
既存のアプリケーションを新しいワーカーノードグループに移行することもできます。
ワーカーノードを削除する
重要: 削除操作は元に戻せません。
eksctl を使用している場合は、次のコマンドを実行します。
eksctl delete nodegroup --cluster=clusterName --name=nodegroupName
注: 実際のものでそれぞれ、clusterName をクラスター名に、nodegroupName をノードグループ名に置き換えてください。
マネージドノードグループがある場合は、「クラスターからマネージドノードグループを削除する」を参照してください。
アンマネージドノードグループがあり、CloudFormation テンプレートを使用してワーカーノードを起動した場合は、そのノードグループのスタックを削除します。
アンマネージドノードグループがあるものの、CloudFormation テンプレートを使用しなかった場合は、Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling グループを削除します。Amazon EC2 Auto Scaling グループを使用しなかった場合は、インスタンスを削除します。