如何在建立或更新 Amazon EKS 受管附加元件時防止組態衝突?
我想在建立或更新 Amazon Elastic Kubernetes Service (Amazon EKS) 受管附加元件時,避免組態衝突。
簡短說明
當您使用 AWS Command Line Interface (AWS CLI) 修改 Amazon EKS 受管附加元件組態時,可能會發生組態衝突。如果您未指定如何處理這些衝突,那麼您會收到以下錯誤訊息:
「Conflicts found when trying to apply.Will not continue due to resolve conflicts mode.」
若要解決此錯誤,請執行下列其中一個動作:
- 使用自動管理組態衝突的 Amazon EKS 主控台更新組態。
- 使用 AWS CLI 並加上 resolve-conflicts OVERWRITE 參數,以明確覆寫現有組態。
解決方法
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
將組態寫入 JSON 檔案
根據您使用的附加元件,將組態寫入 JSON 檔案。有關附加元件組態選項的資訊,請參閱 GitHub 網站上的 amazon-vpc-cni-k8s、aws-ebs-csi-driver 與 coredns。
Amazon Virtual Private Cloud (Amazon VPC) CNI 附加元件:
cat <<EOF > example-json-file { "env": { "MINIMUM_IP_TARGET": "example-minimum-ip-target", "WARM_ENI_TARGET": "example-warm-eni-target", "WARM_IP_TARGET": "example-ip-target" } } EOF
**注意:**將 example-minimum-ip-target 替換為每個節點必須維持的最少 IP 位址數量。同時,將 example-warm-eni-target 替換為附加元件必須保持可用,以供 Pod 指派的彈性網路介面數量。最後,將 example-ip-target 替換為附加元件必須保持可用,以供 Pod 指派的 IP 位址數量。
Amazon Elastic Block Store (Amazon EBS) CSI 驅動程式附加元件:
cat <<EOF > example-json-file { "node": { "volumeAttachLimit": example-volume-limit } } EOF
**注意:**將 example-volume-limit 替換為 Amazon EBS CSI 驅動程式附加元件可附加到節點的最大磁碟區數量。此值必須小於或等於 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體類型的磁碟區附加配額。
CoreDNS:
cat <<EOF > example-json-file { "resources": { "limits": { "cpu": "example-cpu-limit", "memory": "example-memory-limit", }, "requests": { "cpu": "example-cpu-request", "memory": "example-memory-request" } } } EOF
**注意:**將 example-cpu-limit 替換為 CoreDNS 可使用的最大 CPU,並將 example-memory-limit 替換為 CoreDNS 可使用的最大記憶體資源。同時,將 example-cpu-request 替換為 CoreDNS 執行所需的最小 CPU,將 example-memory-request 替換為 CoreDNS 執行所需的最小記憶體資源。
將 JSON 檔案套用到附加元件
使用 Amazon EKS 主控台
請完成下列步驟:
- 開啟 Amazon EKS console (Amazon EKS 主控台)。
- 選擇 Add-ons (附加元件) 索引標籤。
- 選取您的附加元件,然後選擇 Edit (編輯)
- 選擇 Optional configuration (選用組態) 設定。
- 在 Configuration values (組態值) 中,輸入 JSON 檔案中的組態值。
使用 AWS CLI
若要在首次安裝附加元件時套用 JSON 檔案,請執行以下 create-addon 命令:
aws eks create-addon --addon-name add-on ---cluster-name example-cluster-name --resolve-conflicts OVERWRITE --configuration-values file://example-json-file
**注意:**將 example-cluster-name 替換為您的 Amazon EKS 叢集名稱。同時,將 add-on 替換為 Amazon VPC CNI 附加元件的 vpc-cni、Amazon EBS CSI 驅動程式附加元件的 aws-ebs-csi-driver,或 CoreDNS 附加元件的 coredns。最後,將 example-json-file 替換為您的 JSON 組態檔名稱。
若要將 JSON 檔案套用到現有附加元件,請執行以下 update-addon 命令:
aws eks update-addon --addon-name add-on ---cluster-name example-cluster-name --resolve-conflicts OVERWRITE --configuration-values file://example-json-file
**注意:**將 example-cluster-name 替換為您的 Amazon EKS 叢集名稱。同時,將 add-on 替換為 Amazon VPC CNI 附加元件的 vpc-cni、Amazon EBS CSI 驅動程式附加元件的 aws-ebs-csi-driver,或 CoreDNS 附加元件的 coredns。最後,將 example-json-file 替換為您的 JSON 組態檔名稱。
測試您的更新
若要確認附加元件已使用更新後的組態,請根據您使用的附加元件執行以下命令。
Amazon VPC CNI 與 CoreDNS:
kubectl get pods -n kube-system example-aws-node-pod-ID -o jsonpath='{.spec.containers[*].env}'
**注意:**將 example-aws-node-pod-ID 替換為您的節點 Pod ID 或 CoreDNS Pod ID。
Amazon EBS CSI 驅動程式:
kubectl get ds -n kube-system ebs-csi-node -o jsonpath='{.spec.template.spec.containers[*].args}'
更新容忍度
當您需要更新附加元件的節點容忍度時,可將其包含在組態檔中。如同其他組態變更,您可以使用 Amazon EKS 主控台具有 resolve-conflicts OVERWRITE 參數的 AWS CLI 來套用這些更新。
-
以 YAML 格式建立容忍度組態:
cat <<EOF > example-yaml-file tolerations: - effect: example-effect key: example-key operator: example-operator value: example-value EOF**注意:**將 example-yaml-file 替換為您的 YAML 組態檔名稱。另外,將 example-effect 替換為 NoSchedule、PreferNoSchedule 或 NoExecute,並將 example-operator 替換為 Equal 或 Exists。最後,將 example-key 替換為您的節點污點索引鍵,並將 example-value 替換為節點污點值。
-
套用組態。可使用以下任一選項:
- Amazon EKS 主控台: 依照「使用 Amazon EKS 主控台」一節中的相同步驟操作。
-或- - AWS CLI: 使用 create-addon 命令或具有 --resolve-conflicts OVERWRITE 參數的 update-addon 命令,如「使用 AWS CLI」一節中所示。
- Amazon EKS 主控台: 依照「使用 Amazon EKS 主控台」一節中的相同步驟操作。
相關資訊
- 語言
- 中文 (繁體)
