ノードグループを操作する - Eksctl ユーザーガイド

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ノードグループを操作する

ノードグループの作成

クラスターと共に作成された最初のノードグループに加えて、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 アクセスを有効にするには、ノードグループ設定publicKeyPathpublicKeyNamepublicKeyのいずれかを設定します。または、 でノードグループを設定することで、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