創建一個 Amazon EKS 插件 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。

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

創建一個 Amazon EKS 插件

Amazon EKS 附加組件是 Amazon EKS 集群的附加軟件。所有 Amazon EKS 附加組件

  • 包括最新的安全性修補程式和錯誤修正。

  • 通過與 Amazon AWS 合作驗證EKS。

  • 減少管理附加軟體所需的工作量。

您可以使用eksctl、或建立 Amazon EKS 附加元件 AWS CLI。 AWS Management Console如果附加元件需要IAM角色,請參閱中特定附加元件的詳細資料,以Amazon EKS 插件取得有關建立角色的詳細資訊。

必要條件

建立附加元件之前,請先完成下列步驟:

程序

您可以使用eksctl、或建立 Amazon EKS 附加元件 AWS CLI。 AWS Management Console如果附加元件需要IAM角色,請參閱中特定附加元件的詳細資料,以可從 Amazon EKS 附加組件 AWS取得有關建立角色的詳細資訊。

eksctl
若要使用建立 Amazon EKS 附加元件 eksctl
  1. 檢視叢集版本可用附加元件的名稱。使用您叢集的版本取代 1.30

    eksctl utils describe-addon-versions --kubernetes-version 1.30 | 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",
                            [...]
  2. 檢視您想要建立之附加元件的可用版本。使用您叢集的版本取代 1.30。請使用您想要檢視其版本之附加元件的名稱取代 name-of-addon。名稱必須是上一個步驟中傳回的其中一個名稱。

    eksctl utils describe-addon-versions --kubernetes-version 1.30 --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",
  3. 判斷您要建立的附加元件是 Amazon EKS 還是 AWS Marketplace 附加元件。 AWS Marketplace 具有第三方附加元件,需要您完成其他步驟才能建立附加元件。

    eksctl utils describe-addon-versions --kubernetes-version 1.30 --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"

    您可以在中了解有關返回的附加組件 AWS Marketplace 的更多信息URL。如果附加元件需要訂閱,您可以透過 AWS Marketplace訂閱附加元件。如果您要從建立附加元件 AWS Marketplace,則您用來建立附加元件的IAM主體必須具有建立AWSServiceRoleForAWSLicenseManagerRole服務連結角色的權限。如需有關指派權限給IAM實體的詳細資訊,請參閱IAM使用指南中的新增和移除IAM身分識別權限

  4. 創建一個 Amazon EKS 插件。複製指令並取代 user-data 命中率:

    • 使用您叢集的名稱取代 my-cluster

    • 使用您要建立之附加元件的名稱取代 name-of-addon

    • 如果您想要比最新版本更早的附加元件版本,請使用您要使用的上一步輸出中傳回的版本編號取代 latest

    • 如果附加元件使用服務帳戶角色,請使用您的帳戶 ID 取代 111122223333,並使用角色名稱取代 role-name。如需為您的服務帳戶建立角色的說明,請參閱您所建立之附加元件的文件。若要指定服務帳戶角色,叢集需要 IAM OpenID Connect (OIDC) 提供者。若要判定您的叢集是否已經擁有一個提供者,或是要建立一個提供者,請參閱 為您的叢集建立IAMOIDC提供者

      如果附加元件未使用服務帳戶角色,請刪除 --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 (附加元件)。

AWS Management Console
若要使用建立 Amazon EKS 附加元件 AWS Management Console
  1. https://console.aws.amazon.com/eks/家裡 #/集群打開 Amazon EKS 控制台。

  2. 在左側導覽窗格中選擇 Clusters (叢集)。

  3. 選擇您要為其建立附加元件的叢集名稱。

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

  5. 選擇取得更多附加元件

  6. Select add-ons (選取附加元件) 頁面上,選擇您要新增至叢集的附加元件。您可以根據需要添加任意數量的 Amazon EKS AWS Marketplace 附加組件和附加組件。

    對於AWS Marketplace附加元件,您用來建立附加元件的IAM主體必須具有讀取附加元件之權利的權限。 AWS LicenseManager AWS LicenseManager 需要AWSServiceRoleForAWSLicenseManagerRole服務連結角色 (SLR),以允許 AWS 資源代表您管理授權。每個帳戶都SLR是一次性要求,您不必為每個附加元件或每個叢集建立單獨SLR的要求。如需有關指派權限給IAM主參與者的詳細資訊,請參閱IAM使用者指南中的新增和移除IAM身分識別權限

    如果未列出您要安裝的 AWS Marketplace 附加元件,則您可以在搜尋方框中輸入文字來搜尋可用的附加元件。您也可以在篩選選項中,依類別廠商定價模式搜尋,然後從搜尋結果中選擇附加元件。選取您要安裝的附加元件後,請選擇 Next (下一步)。

  7. 設定選取的附加元件設定頁面上,執行以下操作:

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

    2. 在「版本」中,選擇您要安裝的版本。除非您建立的個別附加元件建議使用不同的版本,否則我們建議您使用標記為最新的版本。若要判斷附加元件是否有建議的版本,請參閱您所建立之附加元件的文件

    3. 如果您選取的所有附加元件都有 [狀態] 下的 [需要訂閱],請選擇 [下步] 在您建立叢集之後訂閱這些附加元件之前,您無法進一步設定這些附加元件。對於 [狀態] 下沒有 [需要訂閱] 的附加元件,請執行下列動作:

      1. 對於 「選取IAM角色」,請接受預設選項,除非附加元件需要IAM權限。如果附加元件需要 AWS 權限,您可以使用節點的IAM角色 (未設定) 或您建立用於附加元件的現有角色。若沒有可選取的角色,則表示您沒有現有角色。無論您選擇哪個選項,請參閱您建立的附加元說明文件,以建立IAM原則並將其附加至角色。選取IAM角色需要叢集的 IAM OpenID Connect (OIDC) 提供者。若要判定您的叢集是否已經擁有一個提供者,或是要建立一個提供者,請參閱 為您的叢集建立IAMOIDC提供者

      2. 選擇 Optional configuration settings (選用組態設定)。

      3. 如果附加元件需要組態,請在 Configuration values (組態值) 方塊中輸入。若要判斷附加元件是否需要組態資訊,請參閱您所建立之附加元件的文件

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

      5. 選擇 Next (下一步)

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

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

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

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

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

    4. 訂閱完成處理後,「返回 Amazon EKS 主控台」按鈕將不再呈現灰色。選擇按鈕以返回叢集的 Amazon EKS 主控台附加元件索引標籤。

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

AWS CLI
先決條件

您裝置上安裝和設定的 AWS Command Line Interface (AWS CLI) 的版本1.27.160或更新版本、版本或更新版本或更新版本或更新版本 AWS CloudShell。2.12.3若要檢查您目前的版本,請使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。如 yumapt-get 或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI落後數個版本之多。若要安裝最新版本,請參閱《AWS Command Line Interface 使用者指南》中的安裝、更新和解除安裝 AWS CLI以及使用 aws configure 的快速組態。安裝在中的 AWS CLI 版本也 AWS CloudShell 可能是最新版本之後的幾個版本。若要進行更新,請參閱《AWS CloudShell 使用者指南》中的〈安裝 AWS CLI 到主目錄

若要使用建立 Amazon EKS 附加元件 AWS CLI
  1. 判斷有哪些附加元件可用。您可以查看所有可用的附加元件、其類型及其發佈者。您還可以查看可通過的附加組件 AWS Marketplace。URL使用您叢集的版本取代 1.30

    aws eks describe-addon-versions --kubernetes-version 1.30 \ --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以深入瞭解附加元件並訂閱該附加元件。

  2. 您可以查看每個附加元件可用的版本。使用您的叢集版本取代 1.30,並使用上一步傳回的附加元件名稱取代 vpc-cni

    aws eks describe-addon-versions --kubernetes-version 1.30 --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 的版本在預設情況下是用來建立附加元件的版本。

  3. (選用) 執行下列命令,尋找您所選附加元件的組態選項:

    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    
  4. 判斷附加元件是否需要IAM權限。如果是這樣,您需要 (1) 決定是否要針對服務帳戶使用EKS網繭身分或IAM角色 (IRSA)、(2) 決定要與附加元件搭配使用ARN的IAM角色,以及 (3) 決定附加元件所使用之 Kubernetes 服務帳戶的名稱。如需詳細資訊,請參閱擷取有IAM關 Amazon EKS 附加元件的資訊

  5. 創建一個 Amazon EKS 插件。將隨後的命令複製到您的裝置。視需要對命令進行下列修改,然後執行修改後的命令:

    • 使用您叢集的名稱取代 my-cluster

    • 使用您想要建立之上一步輸出中傳回的附加元件名稱取代 vpc-cni

    • 使用您想要使用之上一步輸出中傳回的版本取代 version-number

    • 如果附加元件不需要IAM權限,請刪除<service-account-configuration>

    • 執行以下任意一項:

      • 如果附加元件 (1) 需要IAM權限,且 (2) 您的叢集使用EKS網繭識別,請以下列網繭身分識別關聯取代<service-account-configuration>。替換<service-account-name>為附加元件使用的服務帳戶名稱。取<role-arn>代為ARNIAM角色的。角色必須具有EKS網繭識別所需的信任原則。

        --pod-identity-associations 'serviceAccount=<service-account-name>,roleArn=<role-arn>'
      • 如果附加元件 (1) 需要IAM權限,以及 (2) 您的叢集使用IRSA,請以下列IRSA組態取代<service-account-configuration>。以您111122223333的帳戶 ID role-name 和您建立的現有IAM角色名稱取代。如需建立角色的說明,請參閱您所建立之附加元件的文件。若要指定服務帳戶角色,叢集需要 IAM OpenID Connect (OIDC) 提供者。若要判定您的叢集是否已經擁有一個提供者,或是要建立一個提供者,請參閱 為您的叢集建立IAMOIDC提供者

        --service-account-role-arn arn:aws::iam::111122223333:role/role-name
    • 這些範例命令會覆寫任何現有自我管理附加元件版本的 --configuration-values 選項 (如果有的話)。將其取代為所需的組態值,例如字串或檔案輸入。如果您不想提供組態值,請刪除 --configuration-values 選項。如果您不想覆寫現有自我管理附加元件的組態,請移除該--resolve-conflicts OVERWRITE選項。 AWS CLI 如果您移除該選項,且 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令列參考create-addon中的。如果您建立的附加元件有 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 命令。