翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ノードグループを操作する
ノードグループの作成
クラスターと共に作成された最初のノードグループに加えて、1 つ以上のノードグループを追加できます。
追加のノードグループを作成するには、以下を使用します。
eksctl create nodegroup --cluster=<clusterName> [--name=<nodegroupName>]
注記
--version
フラグはマネージド型ノードグループではサポートされていません。常にコントロールプレーンからバージョンを継承します。
デフォルトでは、新しいアンマネージド型ノードグループはコントロールプレーン (--version=auto
) からバージョンを継承しますが、別のバージョンを指定することもできます。また、 --version=latest
を使用して最新バージョンのどちらかを強制的に使用できます。
さらに、 と同じ設定ファイルを使用できますeksctl create cluster
。
eksctl create nodegroup --config-file=<path>
設定ファイルからのノードグループの作成
ノードグループは、クラスター定義または設定ファイルを使用して作成することもできます。次の設定ファイルの例と、 という既存のクラスターがあるとしますdev-cluster
。
# dev-cluster.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: dev-cluster region: eu-north-1 managedNodeGroups: - name: ng-1-workers labels: { role: workers } instanceType: m5.xlarge desiredCapacity: 10 volumeSize: 80 privateNetworking: true - name: ng-2-builders labels: { role: builders } instanceType: m5.2xlarge desiredCapacity: 2 volumeSize: 100 privateNetworking: true
ノードグループng-1-workers
と は、次のコマンドで作成ng-2-builders
できます。
eksctl create nodegroup --config-file=dev-cluster.yaml
ロードバランシング
既存のクラシックロードバランサーまたは/およびターゲットグループをノードグループにアタッチする準備ができている場合は、設定ファイルでこれらを指定できます。クラシックロードバランサーまたは/およびターゲットグループは、ノードグループの作成時に自動的に ASG に関連付けられます。これは、 nodeGroups
フィールドで定義されたセルフマネージド型ノードグループでのみサポートされます。
# dev-cluster-with-lb.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: dev-cluster region: eu-north-1 nodeGroups: - name: ng-1-web labels: { role: web } instanceType: m5.xlarge desiredCapacity: 10 privateNetworking: true classicLoadBalancerNames: - dev-clb-1 - dev-clb-2 asgMetricsCollection: - granularity: 1Minute metrics: - GroupMinSize - GroupMaxSize - GroupDesiredCapacity - GroupInServiceInstances - GroupPendingInstances - GroupStandbyInstances - GroupTerminatingInstances - GroupTotalInstances - name: ng-2-api labels: { role: api } instanceType: m5.2xlarge desiredCapacity: 2 privateNetworking: true targetGroupARNs: - arn:aws:elasticloadbalancing:eu-north-1:01234567890:targetgroup/dev-target-group-1/abcdef0123456789
設定ファイルでのノードグループの選択
設定ファイルで指定されたノードグループのサブセットに対してのみ create
または delete
オペレーションを実行するには、glob のリストを受け入れる CLI フラグ0—
が 2 つあります。1—
次に例を示します。
eksctl create nodegroup --config-file=<path> --include='ng-prod-*-??' --exclude='ng-test-1-ml-a,ng-test-2-?'
上記の設定ファイルの例を使用すると、次のコマンドでワーカーを除くすべてのワーカーノードグループを作成できます。
eksctl create nodegroup --config-file=dev-cluster.yaml --exclude=ng-1-workers
または、以下を使用してビルダーノードグループを削除することもできます。
eksctl delete nodegroup --config-file=dev-cluster.yaml --include=ng-2-builders --approve
この場合、ノードグループを実際に削除する--approve
には コマンドも指定する必要があります。
ルールを含めるおよび除外する
-
--include
または--exclude
が指定されていない場合、すべてが含まれます。 -
--include
のみを指定した場合、それらの glob に一致するノードグループのみが含まれます。 -
--exclude
のみを指定した場合、それらの glob と一致しないすべてのノードグループが含まれます。 -
両方を指定した場合、
--exclude
ルールが優先されます--include
(つまり、両方のグループのルールに一致するノードグループは除外されます)。
ノードグループの一覧表示
ノードグループまたはすべてのノードグループの詳細を一覧表示するには、以下を使用します。
eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>]
デフォルトのログテーブルよりも多くの情報を出力する YAML または JSON 形式で 1 つ以上のノードグループを一覧表示するには、以下を使用します。
# YAML format eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>] --output=yaml # JSON format eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>] --output=json
ノードグループのイミュータビリティ
設計上、ノードグループはイミュータブルです。つまり、AMI やノードグループのインスタンスタイプなどの何かを変更 (スケーリング以外) する必要がある場合は、必要な変更を加えて新しいノードグループを作成し、ロードを移動して古いノードグループを削除する必要があります。「ノードグループの削除とドレイン」セクションを参照してください。
ノードグループのスケーリング
Nodegroup スケーリングは、最大数分かかるプロセスです。--wait
フラグが指定されていない場合、 はノードグループのスケーリングをeksctl
楽観的に想定し、AWS API リクエストが送信されるとすぐに を返します。ノードが使用可能になるまでeksctl
待機するには、以下の例のような--wait
フラグを追加します。
注記
ノードグループをダウン/イン (ノード数を減らす) にスケールすると、ASG への純粋な変更に依存するため、エラーが発生する可能性があります。つまり、削除/終了されるノード (複数可) は明示的にドレインされません。これは将来改善の余地がある分野かもしれません。
マネージド型ノードグループのスケーリングは、マネージド型ノードグループ設定を更新する EKS API を直接呼び出すことで実現されます。
単一のノードグループのスケーリング
ノードグループは、 eksctl scale nodegroup
コマンドを使用してスケーリングできます。
eksctl scale nodegroup --cluster=<clusterName> --nodes=<desiredCount> --name=<nodegroupName> [ --nodes-min=<minSize> ] [ --nodes-max=<maxSize> ] --wait
たとえば、ノードグループcluster-1
を 5 つのノードng-a345f4e1
にスケールするには、以下を実行します。
eksctl scale nodegroup --cluster=cluster-1 --nodes=5 ng-a345f4e1
ノードグループは、 に渡される設定ファイルを使用して、 --config-file
でスケールするノードグループの名前を指定することでスケールすることもできます--name
。Eksctl は設定ファイルを検索し、そのノードグループとそのスケーリング設定値を検出します。
希望するノード数が現在の最小ノード数と現在の最大ノード数の範囲内NOT
にある場合、1 つの特定のエラーが表示されます。これらの値は、--nodes-max
それぞれフラグ --nodes-min
と で渡すこともできます。
複数のノードグループのスケーリング
Eksctl は、 で渡される設定ファイルにあるすべてのノードグループを検出してスケーリングできます--config-file
。
単一のノードグループのスケーリングと同様に、同じ検証セットが各ノードグループに適用されます。たとえば、必要なノード数は、ノードの最小数と最大数の範囲内である必要があります。
ノードグループの削除とドレイン
ノードグループを削除するには、以下を実行します。
eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName>
包含ルールと除外ルールは、このコマンドでも使用できます。
注記
これにより、インスタンスが削除される前に、そのノードグループからすべてのポッドがドレインされます。
ドレインプロセス中にエビクションルールをスキップするには、以下を実行します。
eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction
すべてのノードは接続され、すべてのポッドは削除時にノードグループから削除されますが、ノードグループを削除せずにドレインする必要がある場合は、以下を実行します。
eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName>
ノードグループのコードを解除するには、以下を実行します。
eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --undo
PodDisruptionBudget 設定などの削除ルールを無視するには、以下を実行します。
eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction
ドレインプロセスを高速化するには、並列でドレインするノードの数--parallel <value>
に を指定できます。
その他の機能
ノードグループの SSH、ASG アクセス、およびその他の機能を有効にすることもできます。次に例を示します。
eksctl create nodegroup --cluster=cluster-1 --node-labels="autoscaling=enabled,purpose=ci-worker" --asg-access --full-ecr-access --ssh-access
ラベルを更新する
ノードグループのラベルeksctl
を更新する特定のコマンドは にはありませんが、 kubectl
を使用して簡単に実行できます。例:
kubectl label nodes -l alpha.eksctl.io/nodegroup-name=ng-1 new-label=foo
SSH アクセス
ノードグループの SSH アクセスを有効にするには、ノードグループ設定publicKeyPath
で publicKeyName
、 publicKey
のいずれかを設定します。または、 でノードグループを設定することで、AWS Systems Manager (SSM) を使用してノードに SSH 接続することもできますenableSsm
。
managedNodeGroups: - name: ng-1 instanceType: m5.large desiredCapacity: 1 ssh: # import public key from file publicKeyPath: ~/.ssh/id_rsa_tests.pub - name: ng-2 instanceType: m5.large desiredCapacity: 1 ssh: # use existing EC2 key publicKeyName: ec2_dev_key - name: ng-3 instanceType: m5.large desiredCapacity: 1 ssh: # import inline public key publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqZEdzvHnK/GVP8nLngRHu/GDi/3PeES7+Bx6l3koXn/Oi/UmM9/jcW5XGziZ/oe1cPJ777eZV7muEvXg5ZMQBrYxUtYCdvd8Rt6DIoSqDLsIPqbuuNlQoBHq/PU2IjpWnp/wrJQXMk94IIrGjY8QHfCnpuMENCucVaifgAhwyeyuO5KiqUmD8E0RmcsotHKBV9X8H5eqLXd8zMQaPl+Ub7j5PG+9KftQu0F/QhdFvpSLsHaxvBzA5nhIltjkaFcwGQnD1rpCM3+UnQE7Izoa5Yt1xoUWRwnF+L2TKovW7+bYQ1kxsuuiX149jXTCJDVjkYCqi7HkrXYqcC1sbsror someuser@hostname" - name: ng-4 instanceType: m5.large desiredCapacity: 1 ssh: # enable SSH using SSM enableSsm: true