

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

# アドオン
<a name="addons"></a>

このトピックでは、eksctl を使用して Amazon EKS クラスターの Amazon EKS アドオンを管理する方法について説明します。EKS アドオンは、EKS API を使用して Kubernetes 運用ソフトウェアを有効化および管理できる機能で、クラスターアドオンのインストール、設定、更新のプロセスを簡素化します。

**警告**  
eksctl は、セルフマネージドアドオンではなく EKS アドオンとしてデフォルトのアドオン (vpc-cni、coredns、kube-proxy) をインストールするようになりました。つまり、eksctl v0.184.0 以降で作成されたクラスターでは、 `eksctl utils update-*` コマンド`eksctl update addon`の代わりに を使用する必要があります。

Cilium や Calico などの代替 CNI プラグインを使用する場合は、デフォルトのネットワークアドオンなしでクラスターを作成できます。

EKS アドオンは、EKS Pod Identity Associations を介した IAM アクセス許可の受信をサポートし、クラスター外の AWS サービスに接続できるようになりました。

## アドオンの作成
<a name="addons-create"></a>

Eksctl は、クラスターアドオンをより柔軟に管理できます。

設定ファイルで、必要なアドオンと、それらにアタッチするロールまたはポリシー (必要な場合) を指定できます。

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: example-cluster
  region: us-west-2

iam:
  withOIDC: true

addons:
- name: vpc-cni
  # all below properties are optional
  version: 1.7.5
  tags:
    team: eks
  # you can specify at most one of:
  attachPolicyARNs:
  - arn:aws:iam::account:policy/AmazonEKS_CNI_Policy
  # or
  serviceAccountRoleARN: arn:aws:iam::account:role/AmazonEKSCNIAccess
  # or
  attachPolicy:
    Statement:
    - Effect: Allow
      Action:
      - ec2:AssignPrivateIpAddresses
      - ec2:AttachNetworkInterface
      - ec2:CreateNetworkInterface
      - ec2:DeleteNetworkInterface
      - ec2:DescribeInstances
      - ec2:DescribeTags
      - ec2:DescribeNetworkInterfaces
      - ec2:DescribeInstanceTypes
      - ec2:DetachNetworkInterface
      - ec2:ModifyNetworkInterfaceAttribute
      - ec2:UnassignPrivateIpAddresses
      Resource: '*'
```

`attachPolicy`、、 `attachPolicyARNs` のうち最大 1 つを指定できます`serviceAccountRoleARN`。

これらが指定されていない場合、アドオンはすべての推奨ポリシーがアタッチされたロールで作成されます。

**注記**  
アドオンにポリシーをアタッチするには、クラスターで `OIDC`が有効になっている必要があります。有効になっていない場合、アタッチされたポリシーは無視されます。

その後、クラスター作成プロセス中にこれらのアドオンを作成できます。

```
eksctl create cluster -f config.yaml
```

または、設定ファイルまたは CLI フラグを使用して、クラスターの作成後に明示的にアドオンを作成します。

```
eksctl create addon -f config.yaml
```

```
eksctl create addon --name vpc-cni --version 1.7.5 --service-account-role-arn <role-arn>
```

```
eksctl create addon --name aws-ebs-csi-driver --namespace-config 'namespace=custom-namespace'
```

**ヒント**  
`--namespace-config` フラグを使用して、デフォルトの名前空間ではなくカスタム名前空間にアドオンをデプロイします。

アドオンの作成中に、アドオンのセルフマネージドバージョンがクラスターに既に存在する場合は、設定ファイルを介して `resolveConflicts`オプションを設定することで、潜在的な`configMap`競合を解決する方法を選択できます。例:

```
addons:
- name: vpc-cni
  attachPolicyARNs:
    - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
  resolveConflicts: overwrite
```

アドオン作成の場合、 `resolveConflicts`フィールドは 3 つの異なる値をサポートします。
+  `none` - EKS は値を変更しません。作成が失敗する可能性があります。
+  `overwrite` - EKS は、設定の変更を EKS のデフォルト値に上書きします。
+  `preserve` - EKS は値を変更しません。作成が失敗する可能性があります。( に似ていますが`none`、[`preserve`アドオンの更新とは異なります](#update-addons))。

## 有効なアドオンの一覧表示
<a name="_listing_enabled_addons"></a>

クラスターで有効になっているアドオンを確認するには、以下を実行します。

```
eksctl get addons --cluster <cluster-name>
```

または

```
eksctl get addons -f config.yaml
```

## アドオンのバージョンの設定
<a name="_setting_the_addons_version"></a>

アドオンのバージョンの設定はオプションです。`version` フィールドを空のままにすると`eksctl`、アドオンのデフォルトバージョンが解決されます。特定のアドオンのデフォルトバージョンであるバージョンの詳細については、EKS に関する AWS ドキュメントを参照してください。デフォルトバージョンは、必ずしも利用可能な最新バージョンではない場合があります。

アドオンバージョンは に設定できます`latest`。または、 バージョンは、 `v1.7.5-eksbuild.1`や などの EKS ビルドタグを指定して設定できます`v1.7.5-eksbuild.2`。また、 `v1.7.5`や などのアドオンのリリースバージョンに設定することもでき`1.7.5`、`eksbuild`サフィックスタグが検出されて設定されます。

利用可能なアドオンとそのバージョンを検出する方法については、以下のセクションを参照してください。

## アドオンの検出
<a name="_discovering_addons"></a>

クラスターにインストールできるアドオンを確認するには、以下を実行します。

```
eksctl utils describe-addon-versions --cluster <cluster-name>
```

これにより、クラスターの kubernetes バージョンが検出され、そのバージョンがフィルタリングされます。または、特定の kubernetes バージョンで使用できるアドオンを確認したい場合は、以下を実行します。

```
eksctl utils describe-addon-versions --kubernetes-version <version>
```

アドオンは`type`、、`owner`および/または でフィルタリングして検出することもできます`publisher`。例えば、特定の所有者とタイプのアドオンを表示するには、以下を実行できます。

```
eksctl utils describe-addon-versions --kubernetes-version 1.22 --types "infra-management, policy-management" --owners "aws-marketplace"
```

`types`、、 `owners``publishers`フラグはオプションであり、結果をフィルタリングするために一緒にまたは個別に指定できます。

## アドオンの設定スキーマの検出
<a name="_discovering_the_configuration_schema_for_addons"></a>

アドオンとバージョンを検出したら、JSON 設定スキーマを取得してカスタマイズオプションを表示できます。

```
eksctl utils describe-addon-configuration --name vpc-cni --version v1.12.0-eksbuild.1
```

これにより、このアドオンで使用できるさまざまなオプションの JSON スキーマが返されます。

## 設定値の操作
<a name="_working_with_configuration_values"></a>

 `ConfigurationValues` は、アドオンの作成時または更新時に設定ファイルで提供できます。JSON 形式と YAML 形式のみがサポートされています。

例:

```
addons:
- name: coredns
  configurationValues: |-
    replicaCount: 2
```

```
addons:
- name: coredns
  version: latest
  configurationValues: "{\"replicaCount\":3}"
  resolveConflicts: overwrite
```

**注記**  
アドオン設定値を変更すると、設定の競合が発生することに注意してください。

```
Thus, we need to specify how to deal with those by setting the `resolveConflicts` field accordingly.
As in this scenario we want to modify these values, we'd set `resolveConflicts: overwrite`.
```

さらに、get コマンドはアドオン`ConfigurationValues`の も取得するようになりました。例:

```
eksctl get addon --cluster my-cluster --output yaml
```

```
- ConfigurationValues: '{"replicaCount":3}'
  IAMRole: ""
  Issues: null
  Name: coredns
  NewerVersion: ""
  Status: ACTIVE
  Version: v1.8.7-eksbuild.3
```

## カスタム名前空間の使用
<a name="_using_custom_namespace"></a>

カスタム名前空間は、アドオンの作成時に設定ファイルで指定できます。アドオンが作成されると、名前空間を更新することはできません。

### 設定ファイルの使用
<a name="_using_config_file"></a>

```
addons:
  - name: aws-ebs-csi-driver
    version: latest
    namespaceConfig:
      namespace: custom-namespace
```

### CLI フラグの使用
<a name="_using_cli_flag"></a>

または、 `--namespace-config`フラグを使用してカスタム名前空間を指定することもできます。

```
eksctl create addon --cluster my-cluster --name aws-ebs-csi-driver --namespace-config 'namespace=custom-namespace'
```

get コマンドはアドオンの名前空間値も取得します。

```
- ConfigurationValues: ""
  IAMRole: ""
  Issues: null
  Name: aws-ebs-csi-driver
  NamespaceConfig:
    namespace: custom-namespace
  NewerVersion: ""
  PodIdentityAssociations: null
  Status: ACTIVE
  Version: v1.47.0-eksbuild.1
```

## アドオンの更新
<a name="update-addons"></a>

アドオンを新しいバージョンに更新し、以下を実行してアタッチするポリシーを変更できます。

```
eksctl update addon -f config.yaml
```

```
eksctl update addon --name vpc-cni --version 1.8.0 --service-account-role-arn <new-role>
```

**注記**  
アドオンが作成されると、名前空間設定を更新することはできません。`--namespace-config` フラグはアドオンの作成時にのみ使用できます。

アドオンの作成と同様に、アドオンを更新すると、そのアドオンの に以前に適用した設定変更を完全に制御できます`configMap`。具体的には、それらを保存または上書きできます。このオプション機能は、同じ設定ファイルフィールド を介して使用できます。`resolveConflicts`例:

```
addons:
- name: vpc-cni
  attachPolicyARNs:
    - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
  resolveConflicts: preserve
```

アドオンの更新の場合、 `resolveConflicts`フィールドは 3 つの異なる値を受け入れます。
+  `none` - EKS は値を変更しません。更新が失敗する可能性があります。
+  `overwrite` - EKS は、設定の変更を EKS のデフォルト値に上書きします。
+  `preserve` - EKS は 値を保持します。このオプションを選択した場合は、本番クラスターのアドオンを更新する前に、非本番クラスターでフィールドと値の変更をテストすることをお勧めします。

## アドオンの削除
<a name="_deleting_addons"></a>

アドオンを削除するには、以下を実行します。

```
eksctl delete addon --cluster <cluster-name> --name <addon-name>
```

これにより、アドオンとそれに関連付けられた IAM ロールが削除されます。

クラスターを削除すると、アドオンに関連付けられたすべての IAM ロールも削除されます。

## デフォルトのネットワーキングアドオンのクラスター作成の柔軟性
<a name="barecluster"></a>

クラスターが作成されると、EKS は VPC CNI、CoreDNS、kube-proxy をセルフマネージドアドオンとして自動的にインストールします。Cilium や Calico などの他の CNI プラグインを使用するためにこの動作を無効にするために、eksctl はデフォルトのネットワークアドオンなしでクラスターの作成をサポートするようになりました。このようなクラスターを作成するには、次のように を設定します`addonsConfig.disableDefaultAddons`。

```
addonsConfig:
  disableDefaultAddons: true
```

```
eksctl create cluster -f cluster.yaml
```

CoreDNS と kube-proxy のみを使用してクラスターを作成し、VPC CNI を使用してクラスターを作成するには、 で明示的にアドオンを指定`addons`し`addonsConfig.disableDefaultAddons`、次のように を設定します。

```
addonsConfig:
  disableDefaultAddons: true
addons:
  - name: kube-proxy
  - name: coredns
```

```
eksctl create cluster -f cluster.yaml
```

この変更の一環として、 が明示的に true に設定されていない場合、eksctl `addonsConfig.disableDefaultAddons`はクラスターの作成中にセルフマネージド型アドオンではなく EKS アドオンとしてデフォルトアドオンをインストールするようになりました。そのため、`eksctl utils update-*`コマンドは eksctl v0.184.0 以降で作成されたクラスターのアドオンの更新に使用されなくなりました。
+  `eksctl utils update-aws-node` 
+  `eksctl utils update-coredns` 
+  `eksctl utils update-kube-proxy` 

代わりに、 を今すぐ使用`eksctl update addon`する必要があります。

詳細については、[「Amazon EKS がネットワークアドオンにクラスター作成の柔軟性を導入](https://aws.amazon.com/about-aws/whats-new/2024/06/amazon-eks-cluster-creation-flexibility-networking-add-ons/)する」を参照してください。