

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

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

# Amazon VPC CNI を更新する (Amazon EKS アドオン)
<a name="vpc-add-on-update"></a>

Amazon EKS タイプの Amazon VPC CNI Plugin for Kubernetes アドオンを更新します。Amazon EKS タイプのアドオンをクラスターに追加していない場合は「[Amazon VPC CNI Amazon EKS アドオンの追加します。](vpc-add-on-create.md)」に従ってインストールできます。または「[Amazon VPC CNI の更新 (セルフマネージド型アドオン)](vpc-add-on-self-managed-update.md)」に従って他のタイプの VPC CNI インストールを更新します。

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

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

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

   ```
   v1.20.0-eksbuild.1
   ```

   バージョンを [Amazon VPC CNI のバージョン](managing-vpc-cni.md#vpc-cni-latest-available-version) の最新バージョンの表と比較します。返されたバージョンが、最新バージョンの表にあるクラスターの Kubernetes バージョンのバージョンと同じである場合は既に最新バージョンがクラスターにインストールされているため、この手順の残りを完了する必要はありません。出力にバージョン番号ではなくエラーが表示される場合はAmazon EKS タイプのアドオンがクラスターにインストールされていません。この手順でアドオンを更新する前に、アドオンを作成する必要があります。VPC CNI アドオンの Amazon EKS タイプを作成するには「[Amazon VPC CNI Amazon EKS アドオンの追加します。](vpc-add-on-create.md)」に従います。

1. 現在インストールされているアドオンの設定を保存します。

   ```
   kubectl get daemonset aws-node -n kube-system -o yaml > aws-k8s-cni-old.yaml
   ```

1. AWS CLI を使用してアドオンを更新します。AWS マネジメントコンソール または `eksctl` を使用してアドオンを更新する場合は「[Amazon EKS アドオンを更新する](updating-an-add-on.md)」を参照してください。デバイスに沿ったコマンドをコピーします。必要に応じてコマンドに次の変更を加え、変更したコマンドを実行してください。
   + {{マイクラスター}} の部分は、自分のクラスター名に置き換えます。
   + {{v1.20.0-eksbuild.1}} を、使用しているクラスターバージョンに対して最新バージョンの表に記載されている最新バージョンに置き換えます。
   + {{111122223333}} を、アカウント ID に置き換えます。また、{{AmazonEKSVPCCNIRole}} を、作成した既存の IAM 役割の名前に置き換えます。VPC CNI の IAM 役割を作成するには「[ステップ 1: Amazon VPC CNI plugin for Kubernetes の IAM ロールを作成する](cni-iam-role.md#cni-iam-role-create-role)」を参照してください。ロールを指定するには、クラスター用に IAM OpenID Connect (OIDC) プロバイダーが必要です。クラスター用に持っているかどうかを確認、あるいは作成するには「[クラスターの IAM OIDC プロバイダーを作成するには](enable-iam-roles-for-service-accounts.md)」を参照してください。
   + `--resolve-conflicts PRESERVE` オプションはアドオンの既存の設定値を保存します。アドオン設定にカスタム値を設定していて、このオプションを使用しない場合、Amazon EKS は値をデフォルト値で上書きします。このオプションを使用する場合、実稼働クラスターのアドオンを更新する前に、非稼動クラスターのフィールドおよび値変更をテストすることをお勧めします。この値を `OVERWRITE` に変更する場合、すべての設定が Amazon EKS のデフォルト値に変更されます。いずれかの設定にカスタム値を設定した場合、Amazon EKS のデフォルト値で上書きされる可能性があります。この値を `none` に変更した場合、Amazon EKS は設定の値を一切変更しませんが、更新が失敗する可能性があります。更新に失敗した場合、競合の解決に役立つエラーメッセージが返されます。
   + 構成設定を更新しない場合はコマンドから `--configuration-values '{{{"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}}}}'` を削除します。構成設定を更新する場合は{{"env":{"AWS\_VPC\_K8S\_CNI\_EXTERNALSNAT":"true"}}} を、希望する設定に置き換えます。この例では`AWS_VPC_K8S_CNI_EXTERNALSNAT` 環境変数は `true` に設定されています。指定する値は設定スキーマに対して有効である必要があります。設定スキーマが不明である場合は `aws eks describe-addon-configuration --addon-name vpc-cni --addon-version {{v1.20.0-eksbuild.1}} ` を実行して、{{v1.20.0-eksbuild.1}} を、設定を表示するアドオンのバージョン番号に置き換えます。出力でスキーマが返されます。既存のカスタム設定があり、それをすべて削除してすべての設定の値を Amazon EKS のデフォルトに戻したい場合はコマンドから {{"env":{"AWS\_VPC\_K8S\_CNI\_EXTERNALSNAT":"true"}}} を削除して、`{}` が空になるようにします。各設定の説明についてはGitHub の「[CNI 設定変数](https://github.com/aws/amazon-vpc-cni-k8s#cni-configuration-variables)」を参照してください。

     ```
     aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.20.3-eksbuild.1 \
         --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole \
         --resolve-conflicts PRESERVE --configuration-values '{"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}}'
     ```

     更新が完了するまでに数秒かかる場合があります。

1. アドオンのバージョンが更新されたことを確認します。{{マイクラスター}} の部分は自分のクラスター名に置き換えます。

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

   更新が完了するまでに数秒かかる場合があります。

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

   ```
   {
       "addon": {
           "addonName": "vpc-cni",
           "clusterName": "my-cluster",
           "status": "ACTIVE",
           "addonVersion": "v1.20.3-eksbuild.1",
           "health": {
               "issues": []
           },
           "addonArn": "arn:aws:eks:region:111122223333:addon/my-cluster/vpc-cni/74c33d2f-b4dc-8718-56e7-9fdfa65d14a9",
           "createdAt": "2023-04-12T18:25:19.319000+00:00",
           "modifiedAt": "2023-04-12T18:40:28.683000+00:00",
           "serviceAccountRoleArn": "arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole",
           "tags": {},
           "configurationValues": "{\"env\":{\"AWS_VPC_K8S_CNI_EXTERNALSNAT\":\"true\"}}"
       }
   }
   ```

## トラブルシューティング
<a name="_troubleshooting"></a>

VPC CNI を v1.13.2 より前のバージョンからアップグレードする場合は、更新後にクラスター内のすべてのノードを置き換える必要があります。v1.13.2 より前のバージョンでは、iptables-legacy バックエンドを使用して、ソース NAT (SNAT) などの適切な機能に必要な iptables ルールを挿入します。

バージョン v1.13.2 は、[iptables-wrapper を導入](https://github.com/aws/amazon-vpc-cni-k8s/pull/2402)した重要なリリースであり、チェーンとルールを挿入するための適切な iptables バックエンド (iptables-legacy または iptables-nft) を自動的に検出します。この変更は、パフォーマンスの制限によりレガシーバックエンドから離れるというアップストリーム Kubernetes の決定方針と一致しています。

VPC CNI を v1.13.2 より前のバージョンからアップグレードした場合、ノードを置き換える必要があります。これは、iptables-legacy バックエンドと iptables-nft バックエンドの両方にルールを導入すると、プライマリ以外の ENI から発生するトラフィックに予期しない動作が生じる可能性があるためです。