本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
附加元件
本主題說明如何使用 eksctl 管理 Amazon EKS 叢集的 Amazon EKS 附加元件。EKS 附加元件是一項功能,可讓您透過 EKS API 啟用和管理 Kubernetes 操作軟體,簡化安裝、設定和更新叢集附加元件的程序。
警告
eksctl 現在會將預設附加元件 (vpc-cni、coredns、kube-proxy) 安裝為 EKS 附加元件,而非自我管理的附加元件。這表示對於使用 eksctl v0.184.0 及更高版本建立的叢集,您應該使用 eksctl update addon而非 eksctl utils update-*命令。
當您想要使用 Cilium 和 Calico 等替代 CNI 外掛程式時,可以建立不含任何預設聯網附加元件的叢集。
EKS 附加元件現在支援透過 EKS Pod Identity Associations 接收 IAM 許可,允許它們與叢集外的 AWS 服務連線
建立附加元件
Eksctl 提供更多管理叢集附加元件的彈性:
在您的組態檔案中,您可以指定您想要的附加元件,以及 (如果需要) 要連接到這些附加元件的角色或政策:
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: example-cluster region: us-west-2 iam: withOIDC: true addons: - name: vpc-cni # all below properties are optional version: 1.7.5 tags: team: eks # you can specify at most one of: attachPolicyARNs: - arn:aws:iam::account:policy/AmazonEKS_CNI_Policy # or serviceAccountRoleARN: arn:aws:iam::account:role/AmazonEKSCNIAccess # or attachPolicy: Statement: - Effect: Allow Action: - ec2:AssignPrivateIpAddresses - ec2:AttachNetworkInterface - ec2:CreateNetworkInterface - ec2:DeleteNetworkInterface - ec2:DescribeInstances - ec2:DescribeTags - ec2:DescribeNetworkInterfaces - ec2:DescribeInstanceTypes - ec2:DetachNetworkInterface - ec2:ModifyNetworkInterfaceAttribute - ec2:UnassignPrivateIpAddresses Resource: '*'
您最多可以指定其中一個 attachPolicy、 attachPolicyARNs和 serviceAccountRoleARN。
如果未指定這些項目,則會使用已連接所有建議政策的角色來建立附加元件。
注意
若要將政策連接至附加元件,您的叢集必須OIDC已啟用。如果未啟用,我們會忽略任何附加的政策。
然後,您可以在叢集建立程序期間建立這些附加元件:
eksctl create cluster -f config.yaml
或者,在建立叢集後,使用組態檔案或 CLI 旗標明確建立附加元件:
eksctl create addon -f config.yaml
eksctl create addon --name vpc-cni --version 1.7.5 --service-account-role-arn <role-arn>
eksctl create addon --name aws-ebs-csi-driver --namespace-config 'namespace=custom-namespace'
提示
使用 --namespace-config旗標將附加元件部署到自訂命名空間,而不是預設命名空間。
在建立附加元件期間,如果叢集上已存在自我管理版本的附加元件,您可以透過組態檔案設定 resolveConflicts選項來選擇解決潛在configMap衝突的方式,例如
addons: - name: vpc-cni attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy resolveConflicts: overwrite
對於附加元件建立, resolveConflicts 欄位支援三個不同的值:
-
none- EKS 不會變更值。建立可能會失敗。 -
overwrite- EKS 會將任何組態變更覆寫回 EKS 預設值。 -
preserve- EKS 不會變更值。建立可能會失敗。(類似none,但與preserve更新附加元件不同)。
列出已啟用的附加元件
您可以執行下列動作,查看叢集中已啟用哪些附加元件:
eksctl get addons --cluster <cluster-name>
或
eksctl get addons -f config.yaml
設定附加元件的版本
設定附加元件的版本是選用的。如果version欄位保持空白, eksctl會解析附加元件的預設版本。如需哪些版本是特定附加元件預設版本的詳細資訊,請參閱 EKS 的 AWS 文件。請注意,預設版本不一定是可用的最新版本。
附加元件版本可設定為 latest。或者,您可以使用指定的 EKS 建置標籤來設定版本,例如 v1.7.5-eksbuild.1或 v1.7.5-eksbuild.2。它也可以設定為 附加元件的發行版本,例如 v1.7.5或 1.7.5,並且會為您探索和設定eksbuild尾碼標籤。
請參閱以下章節,了解如何探索可用的附加元件及其版本。
探索附加元件
您可以執行下列動作,探索可在叢集上安裝哪些附加元件:
eksctl utils describe-addon-versions --cluster <cluster-name>
這將探索叢集的 kubernetes 版本並篩選該版本。或者,如果您想要查看特定 kubernetes 版本可用的附加元件,您可以執行:
eksctl utils describe-addon-versions --kubernetes-version <version>
您也可以透過篩選附加元件的 type、 owner和/或 來探索附加元件publisher。例如,若要查看特定擁有者和類型的附加元件,您可以執行:
eksctl utils describe-addon-versions --kubernetes-version 1.22 --types "infra-management, policy-management" --owners "aws-marketplace"
types、 owners和 publishers旗標是選用的,可以一起或個別指定來篩選結果。
探索附加元件的組態結構描述
探索附加元件和版本後,您可以透過擷取其 JSON 組態結構描述來檢視自訂選項。
eksctl utils describe-addon-configuration --name vpc-cni --version v1.12.0-eksbuild.1
這會傳回此附加元件可用的各種選項的 JSON 結構描述。
使用組態值
ConfigurationValues 可以在建立或更新附加元件期間提供於組態檔案中。僅支援 JSON 和 YAML 格式。
例如,
addons: - name: coredns configurationValues: |- replicaCount: 2
addons: - name: coredns version: latest configurationValues: "{\"replicaCount\":3}" resolveConflicts: overwrite
注意
請記住,修改附加元件組態值時,會出現組態衝突。
Thus, we need to specify how to deal with those by setting the `resolveConflicts` field accordingly. As in this scenario we want to modify these values, we'd set `resolveConflicts: overwrite`.
此外,get 命令現在也會ConfigurationValues擷取附加元件的 。例如
eksctl get addon --cluster my-cluster --output yaml
- ConfigurationValues: '{"replicaCount":3}' IAMRole: "" Issues: null Name: coredns NewerVersion: "" Status: ACTIVE Version: v1.8.7-eksbuild.3
使用自訂命名空間
在建立附加元件期間,可以在組態檔案中提供自訂命名空間。建立附加元件後,命名空間就無法更新。
使用組態檔案
addons: - name: aws-ebs-csi-driver version: latest namespaceConfig: namespace: custom-namespace
使用 CLI 旗標
或者,您可以使用 --namespace-config旗標指定自訂命名空間:
eksctl create addon --cluster my-cluster --name aws-ebs-csi-driver --namespace-config 'namespace=custom-namespace'
get 命令也會擷取附加元件的命名空間值
- ConfigurationValues: "" IAMRole: "" Issues: null Name: aws-ebs-csi-driver NamespaceConfig: namespace: custom-namespace NewerVersion: "" PodIdentityAssociations: null Status: ACTIVE Version: v1.47.0-eksbuild.1
更新附加元件
您可以將附加元件更新為較新版本,並透過執行下列動作來變更附加的政策:
eksctl update addon -f config.yaml
eksctl update addon --name vpc-cni --version 1.8.0 --service-account-role-arn <new-role>
注意
建立附加元件後,命名空間組態就無法更新。--namespace-config 旗標僅在附加元件建立期間可用。
與附加元件建立類似,更新附加元件時,您可以完全控制先前套用在該附加元件的 上的組態變更configMap。具體而言,您可以保留或覆寫它們。此選用功能可透過相同的組態檔案欄位 取得resolveConflicts,例如
addons: - name: vpc-cni attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy resolveConflicts: preserve
對於附加元件更新, resolveConflicts 欄位接受三個不同的值:
-
none- EKS 不會變更值。更新可能會失敗。 -
overwrite- EKS 會將任何組態變更覆寫回 EKS 預設值。 -
preserve- EKS 會保留值。如果您選擇此選項,建議您在非生產叢集上測試任何欄位和值變更,然後再更新生產叢集上的附加元件。
刪除附加元件
您可以執行下列動作來刪除附加元件:
eksctl delete addon --cluster <cluster-name> --name <addon-name>
這將刪除附加元件和與其相關聯的任何 IAM 角色。
當您刪除叢集時,也會刪除與附加元件相關聯的所有 IAM 角色。
預設聯網附加元件的叢集建立彈性
建立叢集時,EKS 會自動將 VPC CNI、CoreDNS 和 kube-proxy 安裝為自我管理附加元件。若要停用此行為以使用 Cilium 和 Calico 等其他 CNI 外掛程式,eksctl 現在支援建立不含任何預設聯網附加元件的叢集。若要建立這類叢集,請設定 addonsConfig.disableDefaultAddons,如 所示:
addonsConfig: disableDefaultAddons: true
eksctl create cluster -f cluster.yaml
若要建立僅包含 CoreDNS 和 kube-proxy 而非 VPC CNI 的叢集,請在 中明確指定附加元件,addons並設定 addonsConfig.disableDefaultAddons,如 所示:
addonsConfig: disableDefaultAddons: true addons: - name: kube-proxy - name: coredns
eksctl create cluster -f cluster.yaml
作為此變更的一部分,如果 addonsConfig.disableDefaultAddons 未明確設定為 true,eksctl 現在會在叢集建立期間將預設附加元件安裝為 EKS 附加元件,而非自我管理附加元件。因此,eksctl utils update-*命令無法再用於更新使用 eksctl v0.184.0 及更高版本建立之叢集的附加元件:
-
eksctl utils update-aws-node -
eksctl utils update-coredns -
eksctl utils update-kube-proxy
相反地, eksctl update addon 應該立即使用。
若要進一步了解,請參閱 Amazon EKS 引入聯網附加元件的叢集建立彈性