

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 更新 Amazon EKS 附加元件
<a name="updating-an-add-on"></a>

當新版本發布或您將叢集更新到新的 Kubernetes 次要版本之後，Amazon EKS 不會自動更新附加元件。若要更新現有叢集的附加元件，您必須啟動更新。在您啟動更新後，Amazon EKS 會為您更新附加元件。在更新附加元件之前，請檢閱附加元件目前的文件。如需可用附加元件的清單，請參閱 [AWS 附加元件](workloads-add-ons-available-eks.md)。如果附加元件需要 IAM 角色，則請參閱 [AWS中可用的 Amazon EKS 附加元件](workloads-add-ons-available-eks.md)中的特定附加元件相關詳細資訊，了解有關建立角色的詳細資訊。

## 先決條件
<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 管理主控台或 CLI 更新 Amazon EKS AWS 附加元件。

## 更新附加元件 (eksctl)
<a name="_update_add_on_eksctl"></a>

1. 判斷叢集上安裝的目前附加元件和附加元件版本。使用您叢集的名稱取代 *my-cluster*。

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

   您的輸出可能看起來有所不同，具體取決於您的叢集上有哪些附加元件和版本。您可以看到，在前面的範例輸出中，叢集上的兩個現有附加元件在 `UPDATE AVAILABLE` 欄位中具有較新的版本。

1. 更新附加元件。

   1. 將隨後的命令複製到您的裝置。視需要對命令進行下列修改：
      + 使用您叢集的名稱取代 *my-cluster*。
      + 將 *region-code* 取代為您的叢集所在的 AWS 區域。
      + 使用您想要更新的上一步輸出中傳回的附加元件名稱取代 *vpc-cni*。
      + 如果您想要更新為比最新可用版本更早的版本，請使用您要使用的上一步輸出中傳回的版本編號取代 *latest*。某些附加元件有建議的版本。如需詳細資訊，請參閱您所更新之附加元件的文件。若要獲取附加元件清單，請參閱 [AWS 附加元件](workloads-add-ons-available-eks.md)。**\$1** 若附加元件使用 Kubernetes 服務帳戶和 IAM 角色，請使用您的帳戶 ID 取代 *111122223333*，並使用您已建立的現有 IAM 角色的名稱取代 *role-name*。如需建立角色的說明，請參閱您所建立之附加元件的文件。若要獲取附加元件清單，請參閱 [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 ` 列。
      + *preserve* 選項會保留附加元件的現有值。如果您已為附加元件設定設定了自訂值，但未使用此選項，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 Pod 身分識別 IAM 角色及服務帳戶 (IRSA) 的 IAM 角色。根據您喜好的選項，遵循下列適當步驟。如果您選取的所有附加元件在**狀態**下都有**需要訂閱**，請選擇**下一步**。針對**狀態**下沒有**需要訂閱**的附加元件，請執行以下操作：

      1. 若是**服務帳戶的 Pod 身分識別 IAM 角色**，您可使用現有的 EKS Pod 身分識別 IAM 角色，或是使用**建立建議的角色**按鈕來建立一個。此欄位僅提供包含適當信任政策的選項。若沒有可選取的角色，則表示您沒有包含相符信任政策的現有角色。如需針對所選附加元件的服務帳戶設定 EKS Pod 身分識別 IAM 角色，則選擇**建立建議的角色**。角色建立精靈會在單獨的視窗中開啟。精靈會自動填入如下所示角色資訊。針對您想要建立 EKS Pod 身分識別 IAM 角色的每個附加元件，完成如下所示 IAM 精靈中的步驟。
         + 在**選取信任實體**步驟中，**EKS** AWS 的服務選項和 **EKS - Pod Identity** 的使用案例會預先選取，且會自動填入附加元件的適當信任政策。例如，將會如 [EKS Pod 身分識別的優勢](pod-identities.md#pod-id-benefits) 中詳述，透過包含 pods.eks.amazonaws.com IAM Principal 的適當信任政策來建立角色。選擇**下一步**。
         + 在**新增許可**步驟中，將會針對附加元件預先選取適用於該角色政策的適當受管政策。舉例來說，針對 Amazon VPC CNI 附加元件，將會透過如 [Kubernetes 專用 Amazon VPC CNI 外掛程式](workloads-add-ons-available-eks.md#add-ons-vpc-cni) 中詳述的受管政策 `AmazonEKS_CNI_Policy` 來建立角色。選擇**下一步**。
         + 在**命名、檢閱及建立**步驟中，**角色名稱**會自動填入附加元件的預設角色名稱。舉例來說，針對 **Amazon VPC CNI** 附加元件，將會使用名稱 **AmazonEKSPodIdentityAmazonVPCCNIRole** 來建立角色。在**描述**中，預設描述會自動填入附加元件的適當描述。例如，對於 Amazon VPC CNI 附加元件，將使用描述建立角色 **允許在 Amazon EKS 叢集中執行的 Pod **存取 AWS 資源。在**信任政策**中，檢視針對附加元件填入的信任政策。選擇建**立角色**。
**注意**  
保留預設角色名稱，能夠讓 EKS 在新叢集中或新增附加元件至現有叢集時，預先選取附加元件的角色。您仍可覆寫此名稱，並且可在所有叢集的附加元件使用該角色，但需要從下拉式選單中手動選取該角色。

      1. 若要了解**狀態**項下沒有**需要訂閱**選項的附加元件，以及您想要使用 IRSA 設定角色的位置，請參閱您要建立的附加元件相關文件，以便建立 IAM 政策並與角色連接。若要獲取附加元件清單，請參閱 [AWS 附加元件](workloads-add-ons-available-eks.md)。若要選取 IAM 角色，您的叢集需要具有 IAM OpenID Connect (OIDC) 提供者。若要判定您的叢集是否已經擁有一個提供者，或是要建立一個提供者，請參閱 [為您的叢集建立 IAM OIDC 身分提供者](enable-iam-roles-for-service-accounts.md)。

   1. 展開**選用組態設定**。

   1. 在**組態值**中，輸入任意附加元件特定組態資訊。如需詳細資訊，請參閱您所更新之附加元件的文件。若要獲取附加程式清單，請參閱 [AWS 附加元件](workloads-add-ons-available-eks.md)…​針對**衝突解決方法**，請選取其中一個選項。如果您已設定附加元件設定的自訂值，我們建議您使用 **Preserve** (保留) 選項。如果您不選擇此選項，Amazon EKS 會以其預設值覆寫您的值。如果您使用此選項，建議您在更新生產叢集上的附加元件之前，測試非生產叢集上的任何欄位和值變更。如果您將此值變更為「覆寫」，則所有設定都會變更為 Amazon EKS 預設值。如果您已設定任何設定的自訂值，則可能會使用 Amazon EKS 預設值覆寫這些值。如果您將此值變更為「無」，Amazon EKS 不會變更任何設定的值，但更新可能會失敗。若更新失敗，您會收到錯誤訊息，以協助您解決衝突。

1. 選擇**儲存變更**。

## 更新附加元件 (AWS CLI)
<a name="update_add_on_shared_aws_cli"></a>

1. 您需要在裝置或 AWS CloudShell 上安裝和設定版本 `2.12.3`或更新版本或版本 `1.27.160`或更新版本的 AWS 命令列界面 (AWS CLI)。若要檢查您目前的版本，請使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1`。適用於 macOS 的 `yum`、 `apt-get`或 Homebrew 等套件管理員通常是最新版本 CLI AWS 後面的幾個版本。若要安裝最新版本，請參閱《 * AWS 命令列界面使用者指南*》中的使用 aws 設定[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 和快速組態。 [https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)在 AWS CloudShell 中安裝的 AWS CLI 版本也可能是最新版本後面的幾個版本。若要更新它，請參閱《CloudShell [AWS 使用者指南》中的將 CLI 安裝到您的主目錄](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。 * AWS CloudShell *

1. 請參閱已安裝附加元件的清單。使用您叢集的名稱取代 *my-cluster*。

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

   範例輸出如下。

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

1. 檢視您想要更新之附加元件的目前版本。請使用叢集名稱取代 *my-cluster* 並使用您想要更新之附加元件的名稱取代 *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)。
   + 使用您叢集的名稱取代 *my-cluster*。
   + 使用您想要更新之附加元件的名稱取代 *vpc-cni*，該名稱在上一步輸出中傳回。
   + 使用您想要更新之上一步輸出中傳回的版本取代 *version-number*。某些附加元件有建議的版本。如需詳細資訊，請參閱您所更新之附加元件的文件。若要獲取附加元件清單，請參閱 [AWS 附加元件](workloads-add-ons-available-eks.md)。**\$1** 若附加元件使用 Kubernetes 服務帳戶和 IAM 角色，請使用您的帳戶 ID 取代 *111122223333*，並使用您已建立的現有 IAM 角色的名稱取代 *role-name*。如需建立角色的說明，請參閱您所建立之附加元件的文件。若要獲取附加元件清單，請參閱 [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. 查看更新狀態。請使用叢集名稱取代 *my-cluster* 並使用您所更新之附加元件的名稱取代 *vpc-cni*。

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

   範例輸出如下。

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

   當狀態為 `ACTIVE` 時，即表示更新已完成。