跳至內容

如何在建立或更新 Amazon EKS 受管附加元件時防止組態衝突?

3 分的閱讀內容
0

我想在建立或更新 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-k8saws-ebs-csi-drivercoredns

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 主控台

請完成下列步驟:

  1. 開啟 Amazon EKS console (Amazon EKS 主控台)。
  2. 選擇 Add-ons (附加元件) 索引標籤。
  3. 選取您的附加元件,然後選擇 Edit (編輯)
  4. 選擇 Optional configuration (選用組態) 設定。
  5. 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 來套用這些更新。

  1. 以 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 替換為 NoSchedulePreferNoScheduleNoExecute,並將 example-operator 替換為 EqualExists。最後,將 example-key 替換為您的節點污點索引鍵,並將 example-value 替換為節點污點值。

  2. 套用組態。可使用以下任一選項:

    • Amazon EKS 主控台: 依照「使用 Amazon EKS 主控台」一節中的相同步驟操作。
      -或-
    • AWS CLI: 使用 create-addon 命令或具有 --resolve-conflicts OVERWRITE 參數的 update-addon 命令,如「使用 AWS CLI」一節中所示。

相關資訊

判斷可自訂的 Amazon EKS 附加元件欄位

Amazon EKS 附加元件: 進階組態

AWS 官方已更新 7 個月前