

 **協助改進此頁面** 

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

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

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

# 建立 Amazon EKS 附加元件
<a name="creating-an-add-on"></a>

Amazon EKS 附加元件是 Amazon EKS 叢集彙整的附加元件軟體。所有 Amazon EKS 附加元件：
+ 包括最新的安全性修補程式和錯誤修正。
+ 經過 驗證 AWS ，可使用 Amazon EKS。
+ 減少管理附加元件軟體所需的工作量。

您可以使用 `eksctl`、 AWS 管理主控台或 CLI 建立 Amazon EKS AWS 附加元件。如果附加元件需要 IAM 角色，則請參閱 [Amazon EKS 附加元件](eks-add-ons.md)中特定附加元件的詳細資訊，以了解有關建立角色的詳細資訊。

## 先決條件
<a name="creating-an-add-on-prereq"></a>

請完成以下操作再建立附加元件：
+ 您必須先存在叢集，才能為其建立附加元件。如需詳細資訊，請參閱[建立 Amazon EKS 叢集](create-cluster.md)。
+ 檢查附加元件是否需要 IAM 角色。如需詳細資訊，請參閱[確認 Amazon EKS 附加元件版本與叢集的相容性](addon-compat.md)。
+ 確認 Amazon EKS 附加元件版本與叢集相容。如需詳細資訊，請參閱[確認 Amazon EKS 附加元件版本與叢集的相容性](addon-compat.md)。
+ 確認您的電腦或 AWS CloudShell 上安裝了 0.190.0 版或更新版本的`eksctl`命令列工具。如需詳細資訊，請參閱 `eksctl` 網站文章[安裝](https://eksctl.io/installation/)。

## 程序
<a name="creating-an-add-on-procedure"></a>

您可以使用 `eksctl`、 AWS 管理主控台或 CLI 建立 Amazon EKS AWS 附加元件。如果附加元件需要 IAM 角色，則請參閱 [AWS中可用的 Amazon EKS 附加元件](workloads-add-ons-available-eks.md)中的特定附加元件相關詳細資訊，了解有關建立角色的詳細資訊。

## 建立附加元件 (eksctl)
<a name="_create_add_on_eksctl"></a>

1. 檢視叢集版本可用附加元件的名稱。將 *1.35* 取代為您的叢集版本。

   ```
   eksctl utils describe-addon-versions --kubernetes-version 1.35 | grep AddonName
   ```

   範例輸出如下。

   ```
   "AddonName": "aws-ebs-csi-driver",
                           "AddonName": "coredns",
                           "AddonName": "kube-proxy",
                           "AddonName": "vpc-cni",
                           "AddonName": "adot",
                           "AddonName": "dynatrace_dynatrace-operator",
                           "AddonName": "upbound_universal-crossplane",
                           "AddonName": "teleport_teleport",
                           "AddonName": "factorhouse_kpow",
                           [...]
   ```

1. 檢視您想要建立之附加元件的可用版本。將 *1.35* 取代為您的叢集版本。請使用您想要檢視其版本之附加元件的名稱取代 *name-of-addon*。名稱必須是之前步驟中傳回的其中一個名稱。

   ```
   eksctl utils describe-addon-versions --kubernetes-version 1.35 --name name-of-addon | grep AddonVersion
   ```

   下列輸出是針對名為 `vpc-cni` 的附加元件傳回的範例。您可以看到附加元件有數個可用版本。

   ```
   "AddonVersions": [
       "AddonVersion": "v1.12.0-eksbuild.1",
       "AddonVersion": "v1.11.4-eksbuild.1",
       "AddonVersion": "v1.10.4-eksbuild.1",
       "AddonVersion": "v1.9.3-eksbuild.1",
   ```

   1. 決定您要建立的附加元件是 Amazon EKS 還是 AWS Marketplace 附加元件。 AWS Marketplace 具有第三方附加元件，要求您完成建立附加元件的額外步驟。

      ```
      eksctl utils describe-addon-versions --kubernetes-version 1.35 --name name-of-addon | grep ProductUrl
      ```

      如果沒有傳回輸出，則該附加元件是 Amazon EKS。如果傳回輸出，則附加元件是 AWS Marketplace 附加元件。下列輸出適用於名為 `teleport_teleport` 的附加元件。

      ```
      "ProductUrl": "https://aws.amazon.com/marketplace/pp?sku=3bda70bb-566f-4976-806c-f96faef18b26"
      ```

      您可以使用傳回的 URL，進一步了解 AWS Marketplace 中的附加元件。如果附加元件需要訂閱，您可以透過 AWS Marketplace 訂閱附加元件。如果您要從 AWS Marketplace 建立附加元件，則您用來建立附加元件的 [IAM 主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)必須具有建立 [AWSServiceRoleForAWSLicenseManagerRole](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager-role-core.html) 服務連結角色的許可。如需有關將許可指派給 IAM 實體的詳細資訊，請參閱《IAM 使用者指南》中的[新增和移除 IAM 身分許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

1. 建立 Amazon EKS 附加元件。複製命令並取代 *user-data*，如下所示：
   + 使用您叢集的名稱取代 *my-cluster*。
   + 使用您要建立之附加元件的名稱取代 *name-of-addon*。
   + 如果您想要比最新版本更早的附加元件版本，請使用您要使用的上一步輸出中傳回的版本編號取代*最新版本*。
   + 如果附加元件使用服務帳戶角色，請使用您的帳戶 ID 取代 *111122223333*，並使用角色名稱取代 *role-name*。如需為您的服務帳戶建立角色的說明，請參閱您所建立之附加元件的文件。若要獲取附加元件清單，請參閱 [AWS 附加元件](workloads-add-ons-available-eks.md)。若要指定服務帳戶角色，您的叢集需要具有 IAM OpenID Connect (OIDC) 提供者。若要判定您的叢集是否已經擁有一個提供者，或是要建立一個提供者，請參閱 [為您的叢集建立 IAM OIDC 身分提供者](enable-iam-roles-for-service-accounts.md)。

     如果附加元件未使用服務帳戶角色，請刪除 `--service-account-role-arn arn:aws: iam::111122223333:role/role-name`。
   + 此範例命令會覆寫任何現有自我管理附加元件版本的組態 (如果有的話)。如果您不想覆寫現有自我管理附加元件的組態，請移除 *--force* 選項。如果您移除該選項，並且 Amazon EKS 附加元件需要覆蓋現有自我管理附加元件的組態，則建立 Amazon EKS 附加元件的操作會失敗並會出現一條錯誤訊息，以幫助您解決衝突。指定此選項之前，請確定 Amazon EKS 附加元件未管理您需要管理的設定，因為這些設定會被此選項覆寫。

     ```
     eksctl create addon --cluster my-cluster --name name-of-addon --version latest \
         --service-account-role-arn arn:aws: iam::111122223333:role/role-name --force
     ```

     您可以查看該命令所有可用選項的清單。

     ```
     eksctl create addon --help
     ```

     如需有關可用選項的詳細資訊，請參閱 `eksctl` 文件中的 [Addons](https://eksctl.io/usage/addons/) (附加元件)。

## 建立附加元件AWS （主控台）
<a name="create_add_on_console"></a>

1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 在左側導覽窗格中選擇**叢集**。

1. 選擇您想要建立附加元件的叢集名稱。

1. 選擇**附加元件**索引標籤。

1. 選擇**取得更多附加元件**。

1. 在 **Select add-ons** (選取附加元件) 頁面上，選擇您要新增至叢集的附加元件。您可以視需要新增任意數量的 **Amazon EKS 附加元件**和 ** AWS Marketplace 附加元件**。

   對於 ** AWS Marketplace** 附加元件，您用來建立附加元件的 [IAM 主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)必須具有從 AWS LicenseManager 讀取附加元件權利的許可。 AWS LicenseManager 需要 [AWSServiceRoleForAWSLicenseManagerRole](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager-role-core.html) 服務連結角色 (SLR)，以允許 AWS 資源代表您管理授權。SLR 是每個帳戶的一次性要求，您不必為每個附加元件或每個叢集建立單獨的 SLR。如需有關將許可指派給 [IAM 主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)的詳細資訊，請參閱《IAM 使用者指南》中的[新增和移除 IAM 身分許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

   如果您想要安裝的 ** AWS Marketplace 附加元件**未列出，您可以按一下頁面編號以檢視其他頁面結果或在搜尋方塊中搜尋。您也可以在**篩選選項**中，依**類別**、**廠商**或**定價模式**搜尋，然後從搜尋結果中選擇附加元件。選取您要安裝的附加元件後，請選擇 **Next** (下一步)。

1. 在**設定選取的附加元件設定**頁面上，執行以下操作：

   1. 選擇**檢視訂閱選項**即可開啟**訂閱選項**表單。檢閱**定價詳細資料**和**法律**區段，然後選擇**訂閱**按鈕以繼續。

   1. 針對**版本**，選取您想要安裝的版本。除非您建立的個別附加元件建議使用不同的版本，否則我們建議您使用標記為**最新**的版本。若要判斷附加元件是否有建議的版本，請參閱您所建立之附加元件的文件。若要獲取附加元件清單，請參閱 [AWS 附加元件](workloads-add-ons-available-eks.md)。

   1. 您可使用兩個用於設定附加元件角色的選項：EKS Pod 身分識別 IAM 角色及服務帳戶 (IRSA) 的 IAM 角色。根據您喜好的選項，遵循下列適當步驟。如果您選取的所有附加元件在**狀態**下都有**需要訂閱**，請選擇**下一步**。在您建立叢集之後訂閱這些附加元件之前，您無法進一步[設定這些附加元件](updating-an-add-on.md)。針對**狀態**下沒有**需要訂閱**的附加元件，請執行以下操作：

      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. 選擇 **Optional configuration settings** (選用組態設定)。

      1. 如果附加元件需要組態，請在 **Configuration values** (組態值) 方塊中輸入。若要判斷附加元件是否需要組態資訊，請參閱您所建立之附加元件的文件。若要獲取附加元件清單，請參閱 [AWS 附加元件](workloads-add-ons-available-eks.md)。

      1. 對於**衝突解決方法**，請選取其中一個可用選項。對於**衝突解決方法**，如果您選擇**覆寫**，就可以使用 Amazon EKS 附加元件的設定來覆寫現有附加元件的一種或多種設定。若未啟用此選項，而且有設定與現有設定發生衝突，則操作會失敗。您可以使用產生的錯誤訊息對此衝突進行疑難排解。在選擇此選項之前，請確認 Amazon EKS 附加元件未管理您需要自我管理的設定。

      1. 如果您想要將附加元件安裝到特定命名空間，在**命名空間**欄位中輸入附加元件。對於 AWS 和 社群附加元件，您可以定義要安裝附加元件的自訂 Kubernetes 命名空間。如需詳細資訊，請參閱[附加元件的自訂命名空間](eks-add-ons.md#custom-namespace)。

      1. 選擇**下一步**。

1. 在**檢閱並新增**頁面上，選擇**建立**。附加元件安裝完成後，您會看到已安裝的附加元件。

1. 如果您安裝的任何附加元件需要訂閱，請完成下列步驟：

   1. 選擇附加元件右下角的 **Subscribe** (訂閱) 按鈕。系統會將您導向 AWS Marketplace 中附加元件的 頁面。請閱讀附加元件的相關資訊，例如其**產品概觀**和**定價資訊**。

   1. 選取附加元件頁面右上方的 **Continue to Subscribe** (繼續訂閱) 按鈕。

   1. 請完整閱讀**條款與條件**。如果您同意，請選擇 **Accept Terms** (接受條款)。處理訂閱可能需要幾分鐘的時間。訂閱正在處理時，**Return to Amazon EKS Console** (返回至 Amazon EKS 主控台) 按鈕會呈現灰色。

   1. 訂閱完成處理後，**Return to Amazon EKS Console** (返回至 Amazon EKS 主控台) 按鈕將不再呈現灰色。選擇按鈕以返回叢集的 Amazon EKS 主控台 **Add-ons** (附加元件) 索引標籤。

   1. 針對您訂閱的附加元件，請選擇 **Remove and reinstall** (移除後重新安裝)，然後選擇 **Reinstall add-on** (重新安裝附加元件)。安裝附加元件可能需要幾分鐘時間。安裝完成後，您可以設定附加元件。

## 建立附加元件 (AWS CLI)
<a name="create_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. 判斷有哪些附加元件可用。您可以查看所有可用的附加元件、其類型及其發佈者。您也可以查看可透過 AWS Marketplace 取得的附加元件 URL。將 *1.35* 取代為您的叢集版本。

   ```
   aws eks describe-addon-versions --kubernetes-version 1.35 \
       --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output table
   ```

   範例輸出如下。

   ```
   ---------------------------------------------------------------------------------------------------------------------------------------------------------
   |                                                                 DescribeAddonVersions                                                                 |
   +---------------------------------------------------------------+-------------------------------+------------------+--------------+---------------------+
   |                     MarketplaceProductUrl                     |             Name              |      Owner       |  Publisher   |        Type         |
   +---------------------------------------------------------------+-------------------------------+------------------+--------------+---------------------+
   |  None                                                         |  aws-ebs-csi-driver           |  aws             |  eks         |  storage            |
   |  None                                                         |  coredns                      |  aws             |  eks         |  networking         |
   |  None                                                         |  kube-proxy                   |  aws             |  eks         |  networking         |
   |  None                                                         |  vpc-cni                      |  aws             |  eks         |  networking         |
   |  None                                                         |  adot                         |  aws             |  eks         |  observability      |
   | https://aws.amazon.com/marketplace/pp/prodview-brb73nceicv7u |  dynatrace_dynatrace-operator |  aws-marketplace |  dynatrace   |  monitoring         |
   | https://aws.amazon.com/marketplace/pp/prodview-uhc2iwi5xysoc |  upbound_universal-crossplane |  aws-marketplace |  upbound     |  infra-management   |
   | https://aws.amazon.com/marketplace/pp/prodview-hd2ydsrgqy4li |  teleport_teleport            |  aws-marketplace |  teleport    |  policy-management  |
   | https://aws.amazon.com/marketplace/pp/prodview-vgghgqdsplhvc |  factorhouse_kpow             |  aws-marketplace |  factorhouse |  monitoring         |
   |  [...]                                                        |  [...]                        |  [...]           |  [...]       |  [...]              |
   +---------------------------------------------------------------+-------------------------------+------------------+--------------+---------------------+
   ```

   您的輸出可能不同。在此範例輸出中，有三種不同 `networking` 類型的附加元件可用，以及五個具有 `eks` 類型發佈者的附加元件。`Owner` 欄位中具有 `aws-marketplace` 的附加元件可能需要訂閱才能安裝它們。您可以造訪 URL 以深入了解附加元件並訂閱該附加元件。

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. (選用) 執行下列命令，尋找您所選附加元件的組態選項：

   ```
   aws eks describe-addon-configuration --addon-name vpc-cni --addon-version v1.12.0-eksbuild.1
   ```

   ```
   {
       "addonName": "vpc-cni",
       "addonVersion": "v1.12.0-eksbuild.1",
       "configurationSchema": "{\"$ref\":\"#/definitions/VpcCni\",\"$schema\":\"http://json-schema.org/draft-06/schema#\",\"definitions\":{\"Cri\":{\"additionalProperties\":false,\"properties\":{\"hostPath\":{\"$ref\":\"#/definitions/HostPath\"}},\"title\":\"Cri\",\"type\":\"object\"},\"Env\":{\"additionalProperties\":false,\"properties\":{\"ADDITIONAL_ENI_TAGS\":{\"type\":\"string\"},\"AWS_VPC_CNI_NODE_PORT_SUPPORT\":{\"format\":\"boolean\",\"type\":\"string\"},\"AWS_VPC_ENI_MTU\":{\"format\":\"integer\",\"type\":\"string\"},\"AWS_VPC_K8S_CNI_CONFIGURE_RPFILTER\":{\"format\":\"boolean\",\"type\":\"string\"},\"AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG\":{\"format\":\"boolean\",\"type\":\"string\"},\"AWS_VPC_K8S_CNI_EXTERNALSNAT\":{\"format\":\"boolean\",\"type\":\"string\"},\"AWS_VPC_K8S_CNI_LOGLEVEL\":{\"type\":\"string\"},\"AWS_VPC_K8S_CNI_LOG_FILE\":{\"type\":\"string\"},\"AWS_VPC_K8S_CNI_RANDOMIZESNAT\":{\"type\":\"string\"},\"AWS_VPC_K8S_CNI_VETHPREFIX\":{\"type\":\"string\"},\"AWS_VPC_K8S_PLUGIN_LOG_FILE\":{\"type\":\"string\"},\"AWS_VPC_K8S_PLUGIN_LOG_LEVEL\":{\"type\":\"string\"},\"DISABLE_INTROSPECTION\":{\"format\":\"boolean\",\"type\":\"string\"},\"DISABLE_METRICS\":{\"format\":\"boolean\",\"type\":\"string\"},\"DISABLE_NETWORK_RESOURCE_PROVISIONING\":{\"format\":\"boolean\",\"type\":\"string\"},\"ENABLE_POD_ENI\":{\"format\":\"boolean\",\"type\":\"string\"},\"ENABLE_PREFIX_DELEGATION\":{\"format\":\"boolean\",\"type\":\"string\"},\"WARM_ENI_TARGET\":{\"format\":\"integer\",\"type\":\"string\"},\"WARM_PREFIX_TARGET\":{\"format\":\"integer\",\"type\":\"string\"}},\"title\":\"Env\",\"type\":\"object\"},\"HostPath\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"type\":\"string\"}},\"title\":\"HostPath\",\"type\":\"object\"},\"Limits\":{\"additionalProperties\":false,\"properties\":{\"cpu\":{\"type\":\"string\"},\"memory\":{\"type\":\"string\"}},\"title\":\"Limits\",\"type\":\"object\"},\"Resources\":{\"additionalProperties\":false,\"properties\":{\"limits\":{\"$ref\":\"#/definitions/Limits\"},\"requests\":{\"$ref\":\"#/definitions/Limits\"}},\"title\":\"Resources\",\"type\":\"object\"},\"VpcCni\":{\"additionalProperties\":false,\"properties\":{\"cri\":{\"$ref\":\"#/definitions/Cri\"},\"env\":{\"$ref\":\"#/definitions/Env\"},\"resources\":{\"$ref\":\"#/definitions/Resources\"}},\"title\":\"VpcCni\",\"type\":\"object\"}}}"
   }
   ```

   輸出是標準的 JSON 結構描述。

   以下是適用於上述結構描述的有效組態值 (以 JSON 格式) 範例。

   ```
   {
     "resources": {
       "limits": {
         "cpu": "100m"
       }
     }
   }
   ```

   以下是適用於上述結構描述的有效組態值 (以 YAML 格式) 範例。

   ```
     resources:
       limits:
         cpu: 100m
   ```

1. 確定附加元件是否需要 IAM 許可。若是如此，您需要 (1) 確定要使用 EKS Pod 身分識別還是服務帳戶的 IAM 角色 (IRSA)，(2) 確定用於附加元件的 IAM 角色 ARN，以及 (3) 確定附加元件使用的 Kubernetes 服務帳戶名稱。如需詳細資訊，請參閱[擷取 Amazon EKS 附加元件的相關 IAM 資訊](retreive-iam-info.md)。
   + 如果附加元件支援，Amazon EKS 建議使用 EKS Pod 身分識別。這需要[您的叢集上已安裝 Pod 身分識別代理程式](pod-identities.md)。如需搭配附加元件使用 Pod 身分識別的詳細資訊，請參閱 [Amazon EKS 附加元件的 IAM 角色](add-ons-iam.md)。
   + 如果附加元件或您的叢集未設定用於 EKS Pod 身分識別，請使用 IRSA。[確認您的叢集已設定 IRSA。](iam-roles-for-service-accounts.md)
   +  [檢閱 Amazon EKS 附加元件文件以確定附加元件是否需要 IAM 許可及相關聯的 Kubernetes 服務帳戶名稱。](eks-add-ons.md)

     1. 建立 Amazon EKS 附加元件。將隨後的命令複製到您的裝置。視需要對命令進行下列修改，然後執行修改後的命令：
   + 使用您叢集的名稱取代 *my-cluster*。
   + 使用您想要建立之上一步輸出中傳回的附加元件名稱取代 *vpc-cni*。
   + 使用您想要使用之上一步輸出中傳回的版本取代 *version-number*。
   + 如果您想要將附加元件安裝到自訂 Kubernetes 命名空間，請新增 `--namespace-config 'namespace=<my-namespace>` 選項。此選項僅適用於 AWS 和 社群附加元件。如需詳細資訊，請參閱[附加元件的自訂命名空間](eks-add-ons.md#custom-namespace) 
   + 如果附加元件不需要 IAM 許可，則刪除 *<service-account-configuration>*。
   + 執行以下任意一項：
     + 如果附加元件 (1) 需要 IAM 許可，且 (2) 您的叢集使用 EKS Pod 身分識別，請將 *<service-account-configuration>* 取代為以下 Pod 身分識別關聯。將 *<service-account-name>* 取代為附加元件使用的服務帳戶名稱。將 *<role-arn>* 取代為 IAM 角色的 ARN。該角色必須具有 EKS Pod 身分識別所需的信任政策。

       ```
       --pod-identity-associations 'serviceAccount=<service-account-name>,roleArn=<role-arn>'
       ```
     + 如果附加元件 (1) 需要 IAM 許可，且 (2) 您的叢集使用 IRSA，請將 *<service-account-configuration>* 取代為以下 IRSA 組態。使用帳戶 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)。

       ```
       --service-account-role-arn arn:aws::iam::111122223333:role/role-name
       ```
   + 這些範例命令會覆寫任何現有自我管理附加元件版本的 `--configuration-values` 選項 (如果有的話)。將其取代為所需的組態值，例如字串或檔案輸入。如果您不想提供組態值，請刪除 `--configuration-values` 選項。如果您不希望 AWS CLI 覆寫現有自我管理附加元件的組態，請移除 *--resolve-conflicts OVERWRITE* 選項。如果您移除該選項，並且 Amazon EKS 附加元件需要覆蓋現有自我管理附加元件的組態，則建立 Amazon EKS 附加元件的操作會失敗並會出現一條錯誤訊息，以幫助您解決衝突。指定此選項之前，請確定 Amazon EKS 附加元件未管理您需要管理的設定，因為這些設定會被此選項覆寫。

     ```
     aws eks create-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version version-number \
          <service-account-configuration> --configuration-values '{"resources":{"limits":{"cpu":"100m"}}}' --resolve-conflicts OVERWRITE
     ```

     ```
     aws eks create-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version version-number \
         <service-account-configuration> --configuration-values 'file://example.yaml' --resolve-conflicts OVERWRITE
     ```

     如需可用選項的完整清單，請參閱 Amazon EKS Command Line Reference (《Amazon EKS 命令列參考》) 中的 ` [create-addon](https://docs.aws.amazon.com/cli/latest/reference/eks/create-addon.html) `。如果您建立的附加元件有 `aws-marketplace` 列在上一步的 `Owner` 欄位中，則建立操作可能會失敗，而且您可能會收到類似下列錯誤的錯誤訊息。

     ```
     {
         "addon": {
             "addonName": "addon-name",
             "clusterName": "my-cluster",
             "status": "CREATE_FAILED",
             "addonVersion": "version",
             "health": {
                 "issues": [
                     {
                         "code": "AddonSubscriptionNeeded",
                         "message": "You are currently not subscribed to this add-on. To subscribe, visit the AWS Marketplace console, agree to the seller EULA, select the pricing type if required, then re-install the add-on"
                     }
                 ]
             }
         }
     }
     ```

     如果您收到類似上一個輸出中之錯誤的錯誤，請造訪上一步輸出中的 URL，以訂閱附加元件。訂閱後，再次執行 `create-addon` 命令。