

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# Amazon EKS アドオンを更新する
<a name="updating-an-add-on"></a>

Amazon EKS は新しいバージョンがリリースされた場合、あるいはクラスターを新しい Kubernetes マイナーバージョンに更新しても、アドオンを自動的に更新しません。既存のクラスターのアドオンを更新するには更新を開始する必要があります。更新を開始した後、Amazon EKS がアドオンを更新します。アドオンを更新する前に、アドオンの現行のドキュメントを確認してください。利用可能なアドオンのリストについては「[AWSアドオン](workloads-add-ons-available-eks.md)」を参照してください。アドオンに IAM 役割が必要な場合、役割の作成の詳細については「[使用可能な AWS](workloads-add-ons-available-eks.md) の Amazon EKS アドオン」の特定のアドオンの詳細を参照してください。

## 前提条件
<a name="updating-an-add-on-prereq"></a>

アドオンを作成する前に、次を完了します:
+ アドオンに IAM 役割が必要かどうかを確認します。詳細については「[Amazon EKS アドオン](eks-add-ons.md)」を参照してください。
+ Amazon EKS アドオンバージョンがクラスターと互換性があることを検証します。詳細については「[Amazon EKS アドオンバージョンのクラスターとの互換性を検証する](addon-compat.md)」を参照してください。

## 手順
<a name="updating-an-add-on-procedure"></a>

`eksctl`、AWS マネジメントコンソール、AWS CLI のいずれかを使用して Amazon EKS アドオンを更新できます。

## アドオンの更新 (eksctl)
<a name="_update_add_on_eksctl"></a>

1. クラスターにインストールされている現在のアドオンおよびアドオンのバージョンを確認します。*マイクラスター* の部分は自分のクラスター名に置き換えます。

   ```
   eksctl get addon --cluster my-cluster
   ```

   出力例は次のとおりです。

   ```
   NAME        VERSION              STATUS  ISSUES  IAMROLE  UPDATE AVAILABLE
   coredns     v1.8.7-eksbuild.2    ACTIVE  0
   kube-proxy  v1.23.7-eksbuild.1   ACTIVE  0                v1.23.8-eksbuild.2
   vpc-cni     v1.10.4-eksbuild.1   ACTIVE  0                v1.12.0-eksbuild.1,v1.11.4-eksbuild.1,v1.11.3-eksbuild.1,v1.11.2-eksbuild.1,v1.11.0-eksbuild.1
   ```

   クラスターにあるアドオンおよびバージョンによって、出力が異なる場合があります。前述の出力例ではクラスターの既存のアドオン 2 つは `UPDATE AVAILABLE` 列に新しいバージョンがあることがわかります。

1. アドオンを更新します。

   1. デバイスに沿ったコマンドをコピーします。必要に応じてコマンドに次の変更を加えます。
      + *マイクラスター* の部分は自分のクラスター名に置き換えます。
      + *地域コード* を、クラスターのある AWS リージョンに置き換えます。
      + *vpc-cni* を更新する前のステップの出力で返されたアドオンの名前に置き換えます。
      + 利用可能な最新バージョンよりも前のバージョンに更新する場合、*latest* を使用する前のステップの出力で返されたバージョン番号に置き換えます。一部のアドオンには推奨バージョンがあります。詳細については更新するアドオンのドキュメントを参照してください。アドオンのリストについては「[AWSアドオン](workloads-add-ons-available-eks.md)」を参照してください。**\$1** アドオンが Kubernetes サービスアカウントおよび IAM ロールを使用する場合、*111122223333* をアカウント ID に置き換え、*role-name* を作成した既存の IAM ロールの名前に置き換えます。役割の作成手順については作成するアドオンのドキュメントを参照してください。アドオンのリストについては「[AWSアドオン](workloads-add-ons-available-eks.md)」を参照してください。サービスアカウント役割を指定するにはクラスター用に IAM OpenID Connect (OIDC) プロバイダーが必要です。クラスター用に持っているかどうかを確認、あるいは作成するには「[クラスターの IAM OIDC プロバイダーを作成するには](enable-iam-roles-for-service-accounts.md)」を参照してください。

        アドオンが Kubernetes サービスアカウントおよび IAM ロールを使用しない場合、`serviceAccountRoleARN: arn:aws:iam::111122223333:role/role-name ` 行を削除してください。
      + *保存*オプションはアドオンの既存値を保存します。アドオン設定にカスタム値を設定していて、このオプションを使用しない場合、Amazon EKS は値をデフォルト値で上書きします。このオプションを使用する場合、実稼働クラスターのアドオンを更新する前に、非稼動クラスターのフィールドおよび値変更をテストすることをお勧めします。この値を `overwrite` に変更する場合、すべての設定が Amazon EKS のデフォルト値に変更されます。いずれかの設定にカスタム値を設定した場合、Amazon EKS のデフォルト値で上書きされる可能性があります。この値を `none` に変更した場合、Amazon EKS は設定の値を一切変更しませんが、更新が失敗する可能性があります。更新に失敗した場合、競合の解決に役立つエラーメッセージが返されます。

        ```
        cat >update-addon.yaml <<EOF
        apiVersion: eksctl.io/v1alpha5
        kind: ClusterConfig
        metadata:
          name: my-cluster
          region: region-code
        
        addons:
        - name: vpc-cni
          version: latest
          serviceAccountRoleARN: arn:aws:iam::111122223333:role/role-name
          resolveConflicts: preserve
        EOF
        ```

   1. 変更コマンドを実行して `update-addon.yaml` ファイルを作成します。

   1. クラスターに設定ファイルを適用します。

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

   アドオンの更新の詳細については`eksctl` ドキュメントの「[アドオンの更新](https://eksctl.io/usage/addons/#updating-addons)」を参照してください。

## アドオンの更新 (AWS コンソール)
<a name="update_add_on_shared_aws_console"></a>

1. [Amazon EKS コンソール](https://console.aws.amazon.com/eks/home#/clusters)を開きます。

1. 左のナビゲーションペインで **[クラスター]** を選択してください。

1. アドオンを更新するクラスターの名前を選択してください。

1. **[アドオン]** タブを選択してください。

1. 更新するアドオンを選択してください。

1. [**編集**] を選択してください。

1. **[*アドオンの名前*を設定]** ページで、次を実行します:

   1. 使用する **[バージョン]** を選択してください。アドオンには推奨バージョンがある場合があります。詳細については更新するアドオンのドキュメントを参照してください。アドオンのリストについては「[AWSアドオン](workloads-add-ons-available-eks.md)」を参照してください。

   1. アドオンの役割を設定するにはEKS ポッド・アイデンティティー IAM 役割とサービスアカウント用の IAM 役割 (IRSA) の 2 つのオプションがあります。希望するオプションについては以下の適切なステップに従います。選択したすべてのアドオンの **[ステータス]** で **[サブスクリプションが必要]** と表示されている場合、**[次へ]** を選択してください。**[ステータス]** で **[サブスクリプションが必要]** と表示されていないアドオンの場合、次を実行してください。

      1. **[サービスアカウント用の ポッド・アイデンティティー IAM 役割]** で、既存の EKS Pod Identity IAM 役割を使用するか、または **[推奨役割を作成]** ボタンを使用して EKS Pod Identity IAM 役割を作成できます。このフィールドには適切な信頼ポリシーを持つオプションのみが表示されます。選択する役割がない場合は一致する信頼ポリシーを持つ既存の役割が存在しないことになります。選択したアドオンのサービスアカウント用の EKS Pod Identity IAM 役割を設定するには**[推奨役割を作成]** を選択してください。役割作成ウィザードが別のウィンドウで開きます。ウィザードは次のように役割の情報を自動的に入力してください。EKS Pod Identity IAM 役割を作成するアドオンごとに、IAM ウィザードのステップを次のように実行してください。
         + **[信頼されたエンティティを選択]** ステップでは **[EKS]** の AWS サービスオプションと **[EKS - Pod Identity]** のユースケースが事前に選択されており、アドオンのために適切な信頼ポリシーが自動的に入力されます。例えば、役割は「[EKS Pod Identity の利点](pod-identities.md#pod-id-benefits)」で詳述されているように、pods.eks.amazonaws.com の IAM プリンシパルを含む適切な信頼ポリシーを使用して作成されます。[**次へ**] を選択してください。
         + **[許可を追加]** ステップでは役割ポリシー用の適切なマネージドポリシーがアドオンのために事前に選択されています。例えば、Amazon VPC CNI アドオンの場合、役割は「[Amazon VPC CNI Kubernetes用プラグイン](workloads-add-ons-available-eks.md#add-ons-vpc-cni)」で詳述されているように、マネージドポリシー `AmazonEKS_CNI_Policy` を使用して作成されます。[**次へ**] を選択します。
         + **[名前、確認、作成]** のステップにおいて、**[役割名]** で、アドオンのためにデフォルトの役割名が自動的に入力されます。例えば、**Amazon VPC CNI** アドオンの場合、役割は **AmazonEKSPodIdentityAmazonVPCCNIRole** という名前で作成されます。**[説明]** ではアドオンのためにデフォルトの適切な説明が自動的に入力されます。例えば、Amazon VPC CNI アドオンの場合、役割は AWS リソースにアクセスすることを「**Amazon EKS クラスターで実行されているポッドに許可します**」という説明で作成されます。**[信頼ポリシー]** で、アドオンのために事前入力された信頼ポリシーを表示します。[**役割の作成**] を選択してください。
**注記**  
デフォルトの役割名を保持すると、EKS は新しいクラスターでアドオン用の役割を事前に選択したり、既存のクラスターにアドオンを追加したりできます。この名前は引き続き上書きでき、役割はクラスター全体でアドオンのために使用できますが、役割はドロップダウンから手動で選択する必要があります。

      1. **[ステータス]** が **[サブスクリプションが必要]** でなく、IRSA を使用して役割を設定するアドオンについてはIAM ポリシーを作成して役割にアタッチするために作成するアドオンに関するドキュメントを参照してください。アドオンのリストについては「[AWSアドオン](workloads-add-ons-available-eks.md)」を参照してください。IAM ロールを選択するにはクラスター用に OpenID Connect (OIDC) プロバイダーが必要です。クラスター用に持っているかどうかを確認、あるいは作成するには「[クラスターの IAM OIDC プロバイダーを作成するには](enable-iam-roles-for-service-accounts.md)」を参照してください。

   1. **[オプションの構成設定]** を展開します。

   1. **[設定値]** で、アドオン固有の設定情報を入力してください。詳細については更新するアドオンのドキュメントを参照してください。アドオンのリストについては「[AWSアドオン](workloads-add-ons-available-eks.md)」を参照してください。**[コンフリクト解決方法]** で、いずれかのオプションを選択してください。アドオン設定にカスタム値を設定している場合、**[保存]** オプションをお勧めします。このオプションを選択しない場合、Amazon EKS は値をデフォルト値で上書きします。このオプションを使用する場合、実稼働クラスターのアドオンを更新する前に、非稼動クラスターのフィールドおよび値変更をテストすることをお勧めします。この値を [上書き] に変更する場合、すべての設定が Amazon EKS のデフォルト値に変更されます。いずれかの設定にカスタム値を設定した場合、Amazon EKS のデフォルト値で上書きされる可能性があります。この値を [なし] に変更した場合、Amazon EKS は設定の値を一切変更しませんが、更新が失敗する可能性があります。更新に失敗した場合、競合の解決に役立つエラーメッセージが返されます。

1. **[Save changes]** (変更の保存) をクリックします。

## アドオンの更新 (AWS CLI)
<a name="update_add_on_shared_aws_cli"></a>

1. ご使用のデバイスまたは AWS CloudShell で、バージョン `2.12.3` 以降、または AWS コマンドラインインターフェイス (AWS CLI) のバージョン `1.27.160` 以降が必要です。現在のバージョンを確認するには「`aws --version | cut -d / -f2 | cut -d ' ' -f1`」を参照してください。`yum`、`apt-get`、macOS 用の Homebrew などのパッケージマネージャーは、多くの場合 AWS CLI の最新バージョンより数バージョン古くなっています。最新バージョンをインストールするには「*AWS コマンドラインインターフェイスユーザーガイド*」の「[インストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」および「[aws configure を使用したクイック設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)」を参照してください。AWS クラウドシェル にインストールされている AWS CLI バージョンも最新バージョンより数バージョン遅れることがあります。更新するには、「*AWS CloudShell ユーザーガイド*」の「[ホームディレクトリへの AWS CLI のインストール](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)」を参照してください。

1. インストールされているアドオンのリストを参照してください。*マイクラスター* の部分は自分のクラスター名に置き換えます。

   ```
   aws eks list-addons --cluster-name my-cluster
   ```

   出力例は次のとおりです。

   ```
   {
       "addons": [
           "coredns",
           "kube-proxy",
           "vpc-cni"
       ]
   }
   ```

1. 更新するアドオンの現在のバージョンを表示します。*マイクラスター* をクラスターの名前に置き換えて、*vpc-cni* を更新するアドオンの名前に置き換えます。

   ```
   aws eks describe-addon --cluster-name my-cluster --addon-name vpc-cni --query "addon.addonVersion" --output text
   ```

   出力例は次のとおりです。

   ```
   v1.10.4-eksbuild.1
   ```

1. クラスターのバージョンで使用できるアドオンのバージョンを確認します。*1.35* をクラスターのバージョンに置き換えて、*vpc-cni* を更新するアドオンの名前に置き換えます。

   ```
   aws eks describe-addon-versions --kubernetes-version 1.35 --addon-name vpc-cni \
       --query 'addons[].addonVersions[].{Version: addonVersion, Defaultversion: compatibilities[0].defaultVersion}' --output table
   ```

   出力例は次のとおりです。

   ```
   ------------------------------------------
   |          DescribeAddonVersions         |
   +-----------------+----------------------+
   | Defaultversion  |       Version        |
   +-----------------+----------------------+
   |  False          |  v1.12.0-eksbuild.1  |
   |  True           |  v1.11.4-eksbuild.1  |
   |  False          |  v1.10.4-eksbuild.1  |
   |  False          |  v1.9.3-eksbuild.1   |
   +-----------------+----------------------+
   ```

   `Defaultversion` 列に `True` と表示されているバージョンはデフォルトでアドオンが作成されたバージョンです。

1. アドオンを更新してください。デバイスに沿ったコマンドをコピーします。必要に応じてコマンドに次の変更を加え、変更したコマンドを実行してください。このコマンドの詳細については「Amazon EKS コマンドラインリファレンス」の「[update-addon](https://docs.aws.amazon.com/cli/latest/reference/eks/update-addon.html)」を参照してください。
   + *マイクラスター* の部分は自分のクラスター名に置き換えます。
   + *vpc-cni* を前のステップの出力で返された更新するアドオンの名前に置き換えます。
   + *version-number* を更新する前のステップの出力で返されたバージョンに置き換えます。一部のアドオンには推奨バージョンがあります。詳細については更新するアドオンのドキュメントを参照してください。アドオンのリストについては「[AWSアドオン](workloads-add-ons-available-eks.md)」を参照してください。**\$1** アドオンが Kubernetes サービスアカウントおよび IAM ロールを使用する場合、*111122223333* をアカウント ID に置き換え、*role-name* を作成した既存の IAM ロールの名前に置き換えます。役割の作成手順については作成するアドオンのドキュメントを参照してください。アドオンのリストについては「[AWSアドオン](workloads-add-ons-available-eks.md)」を参照してください。サービスアカウント役割を指定するにはクラスター用に IAM OpenID Connect (OIDC) プロバイダーが必要です。クラスター用に持っているかどうかを確認、あるいは作成するには「[クラスターの IAM OIDC プロバイダーを作成するには](enable-iam-roles-for-service-accounts.md)」を参照してください。

     アドオンが Kubernetes サービスアカウントおよび IAM ロールを使用しない場合、`serviceAccountRoleARN: arn:aws:iam::111122223333:role/role-name ` 行を削除してください。
   + `--resolve-conflicts PRESERVE` オプションはアドオンの既存値を保存します。アドオン設定にカスタム値を設定していて、このオプションを使用しない場合、Amazon EKS は値をデフォルト値で上書きします。このオプションを使用する場合、実稼働クラスターのアドオンを更新する前に、非稼動クラスターのフィールドおよび値変更をテストすることをお勧めします。この値を `OVERWRITE` に変更する場合、すべての設定が Amazon EKS のデフォルト値に変更されます。いずれかの設定にカスタム値を設定した場合、Amazon EKS のデフォルト値で上書きされる可能性があります。この値を `NONE` に変更した場合、Amazon EKS は設定の値を一切変更しませんが、更新が失敗する可能性があります。更新に失敗した場合、競合の解決に役立つエラーメッセージが返されます。
   + すべてのカスタム設定を削除する場合は*--configuration-values '\$1\$1'* オプションを使用して更新を実行してください。これにより、すべてのカスタム設定がデフォルト値に設定されます。カスタム設定を変更しない場合、*--configuration-values* フラグを指定しないでください。カスタム設定を調整する場合、*\$1\$1* を新しいパラメータに置き換えます。

     ```
     aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version version-number \
         --service-account-role-arn arn:aws:iam::111122223333:role/role-name --configuration-values '{}' --resolve-conflicts PRESERVE
     ```

1. 更新のステータスを確認します。*マイクラスター* をクラスターの名前に置き換えて、*vpc-cni* を更新するアドオンの名前に置き換えます。

   ```
   aws eks describe-addon --cluster-name my-cluster --addon-name vpc-cni
   ```

   出力例は次のとおりです。

   ```
   {
       "addon": {
           "addonName": "vpc-cni",
           "clusterName": "my-cluster",
           "status": "UPDATING",
       }
   }
   ```

   ステータスが `ACTIVE` に変わると更新が完了します。