

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

# ノードグループを操作する
<a name="general-nodegroups"></a>

## ノードグループの作成
<a name="_creating_nodegroups"></a>

クラスターとともに作成された最初のノードグループに加えて、1 つ以上のノードグループを追加できます。

追加のノードグループを作成するには、以下を使用します。

```
eksctl create nodegroup --cluster=<clusterName> [--name=<nodegroupName>]
```

**注記**  
 `--version` フラグはマネージド型ノードグループではサポートされていません。常にコントロールプレーンからバージョンを継承します。

デフォルトでは、新しいアンマネージド型ノードグループはコントロールプレーン (`--version=auto`) からバージョンを継承しますが、別のバージョンを指定することもできます。また、 `--version=latest`を使用して最新バージョンのどちらかを強制的に使用できます。

さらに、 と同じ設定ファイルを使用できます`eksctl create cluster`。

```
eksctl create nodegroup --config-file=<path>
```

### 設定ファイルからのノードグループの作成
<a name="_creating_a_nodegroup_from_a_config_file"></a>

Nodegroups は、クラスター定義または設定ファイルを使用して作成することもできます。次の設定ファイルの例と、 という既存のクラスターがあるとします`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
```

#### ロードバランシング
<a name="_load_balancing"></a>

既存のクラシックロードバランサーまたは/およびターゲットグループをノードグループにアタッチする準備ができている場合は、設定ファイルでこれらを指定できます。クラシックロードバランサーまたは/およびターゲットグループは、ノードグループの作成時に自動的に 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
```

## 設定ファイルでのノードグループの選択
<a name="_nodegroup_selection_in_config_files"></a>

設定ファイルで指定されたノードグループのサブセットに対してのみ `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`には コマンドも指定する必要があります。

### ルールを含めるおよび除外する
<a name="node-include"></a>
+ `--include` または `--exclude` が指定されていない場合は、すべてが含まれます。
+ `--include` のみを指定した場合、それらの glob に一致するノードグループのみが含まれます。
+ `--exclude` のみを指定した場合、それらの glob と一致しないすべてのノードグループが含まれます。
+ 両方が指定されている場合、`--exclude`ルールが優先されます `--include` (つまり、両方のグループのルールに一致するノードグループは除外されます）。

## ノードグループの一覧表示
<a name="_listing_nodegroups"></a>

ノードグループまたはすべてのノードグループの詳細を一覧表示するには、以下を使用します。

```
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
```

## ノードグループのイミュータビリティ
<a name="_nodegroup_immutability"></a>

設計上、ノードグループはイミュータブルです。つまり、AMI やノードグループのインスタンスタイプなどの何かを変更 (スケーリング以外) する必要がある場合は、必要な変更を加えて新しいノードグループを作成し、ロードを移動して古いノードグループを削除する必要があります。[「ノードグループの削除とドレイン](#nodegroup-delete)」セクションを参照してください。

## ノードグループのスケーリング
<a name="_scaling_nodegroups"></a>

Nodegroup スケーリングは、最大数分かかるプロセスです。`--wait` フラグが指定されていない場合、 はノードグループのスケーリングを`eksctl`楽観的に想定し、AWS API リクエストが送信されるとすぐに を返します。ノードが使用可能になるまで`eksctl`待機するには、以下の例のような`--wait`フラグを追加します。

**注記**  
ノードグループをダウン/イン (ノード数を減らす) にスケールすると、ASG への純粋な変更に依存するため、エラーが発生する可能性があります。つまり、削除/終了されるノード (複数可) は明示的にドレインされません。これは将来改善の余地がある分野かもしれません。

マネージド型ノードグループのスケーリングは、マネージド型ノードグループ設定を更新する EKS API を直接呼び出すことで実現されます。

### 単一のノードグループのスケーリング
<a name="_scaling_a_single_nodegroup"></a>

ノードグループは、 `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`と で渡すこともできます。

### 複数のノードグループのスケーリング
<a name="_scaling_multiple_nodegroups"></a>

Eksctl は、 で渡される設定ファイルにあるすべてのノードグループを検出してスケーリングできます`--config-file`。

単一のノードグループのスケーリングと同様に、同じ検証セットが各ノードグループに適用されます。たとえば、必要なノード数は、ノードの最小数と最大数の範囲内である必要があります。

## ノードグループの削除とドレイン
<a name="nodegroup-delete"></a>

ノードグループを削除するには、以下を実行します。

```
eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName>
```

 [包含ルールと除外ルール](#node-include)は、このコマンドでも使用できます。

**注記**  
これにより、インスタンスが削除される前に、そのノードグループからすべてのポッドがドレインされます。

ドレインプロセス中にエビクションルールをスキップするには、以下を実行します。

```
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>`に を指定できます。

## その他の機能
<a name="_other_features"></a>

ノードグループの SSH、ASG アクセス、およびその他の機能を有効にすることもできます。次に例を示します。

```
eksctl create nodegroup --cluster=cluster-1 --node-labels="autoscaling=enabled,purpose=ci-worker" --asg-access --full-ecr-access --ssh-access
```

### ラベルを更新する
<a name="_update_labels"></a>

ノードグループのラベル`eksctl`を更新する特定のコマンドは にはありませんが、 `kubectl`を使用して簡単に実行できます。例:

```
kubectl label nodes -l alpha.eksctl.io/nodegroup-name=ng-1 new-label=foo
```

### SSH アクセス
<a name="_ssh_access"></a>

ノードグループの SSH アクセスを有効にするには、ノードグループ設定`publicKeyPath`で `publicKeyName`、 `publicKey`のいずれかを設定します。または、 でノードグループを設定することで、[AWS Systems Manager (SSM)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli) を使用してノードに 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
```