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

最終更新日: 2020 年 1 月 27 日

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

簡単な説明

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

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

解決方法

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

次のコマンドを実行して、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.    AWS CloudFormation テンプレートを使用して、Windows または Linux のワーカーノードを起動します。

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

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

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

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

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

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

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

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

ノードグループのドレインアクションを元に戻すには、次のコマンドを実行します。

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

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

ワーカーノードの起動に eksctl を使用していない場合は、次のコードを使用して特定の Kubernetes バージョン (この場合は 1.14.7-eks-1861c5) のノードのすべてを識別し、ドレインします。

#!/bin/bash
K8S_VERSION=1.14.7-eks-1861c5
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 バージョン (この場合は 1.14.7-eks-1861c5) のノードのすべてを識別し、ドレインします。

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

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

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

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

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

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

kubectl drain node_name --ignore-daemonsets

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

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

kubectl uncordon name

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

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

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

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

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

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

マネージドノードグループがある場合は、「マネージドノードグループの削除」のステップを完了してください。

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

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


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

改善できることはありますか?


さらにサポートが必要な場合