使用欄位管理自訂 Amazon EKS 附加元件設定 - Amazon EKS

協助改善此頁面

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

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

使用欄位管理自訂 Amazon EKS 附加元件設定

使用標準的最佳實務組態將 Amazon EKS 附加元件安裝到您的叢集。如需將 Amazon EKS 附加元件新增至叢集的詳細資訊,請參閱 使用E AWSAPIs KS 附加元件安裝/更新群集元件

您可能想要自訂 Amazon EKS 附加元件的組態,以啟用進階功能。Amazon EKS 使用 Kubernetes 伺服器端套用功能來啟用 Amazon EKS 管理附加元件,而不會覆寫非由 Amazon EKS 管理的設定組態。如需詳細資訊,請參閱 Kubernetes 文件中的 伺服器端套用。為了達到此目的,Amazon EKS 會為其安裝的每個附加元件管理一組數量最少的欄位。您可以修改所有非由 Amazon EKS 管理的欄位,或另一個 Kubernetes 控制平面程序 (例如 kube-controller-manager),沒有任何問題。

重要

修改 Amazon EKS 管理的欄位會阻止 Amazon EKS 管理附加元件,並且可能會導致在更新附加元件時覆寫您的變更。

檢視欄位管理狀態

您可以使用 kubectl,查看哪些欄位由 Amazon EKS 管理,適用於任何 Amazon EKS 附加元件。

查看欄位的管理狀態
  1. 判定要檢查的附加元件。若要查看部署到叢集的所有 deploymentsDaemonSets,請參閱 檢視 Kubernetes 資源

  2. 執行下列命令以檢視附加元件的受管欄位:

    kubectl get type/add-on-name -n add-on-namespace -o yaml

    例如,您可以使用下列命令查看 CoreDNS 附加元件的受管欄位。

    kubectl get deployment/coredns -n kube-system -o yaml

    欄位管理會列在傳回輸出的下一區段中。

    [...]
    managedFields:
      - apiVersion: apps/v1
        fieldsType: FieldsV1
        fieldsV1:                        
    [...]               
    注意

    如果您在輸出中看不到 managedFields,請新增 --show-managed-fields 至該命令並再次執行。您正在使用的 kubectl 版本會決定是否預設傳回受管欄位。

了解 Kubernetes API 中的欄位管理語法

檢視 Kubernetes 物件的詳細資訊時,輸出中會傳回受管和未受管的欄位。受管欄位可以是以下類型之一:

  • 全受管:欄位的所有索引鍵均由 Amazon EKS 管理。修改任何值皆會導致衝突。

  • 部分受管:欄位的某些索引鍵由 Amazon EKS 管理。只有對明確由 Amazon EKS 管理的索引鍵進行修改才會造成衝突。

這兩種類型的欄位均使用 manager: eks 標記。

每個索引鍵可以是 . 表示欄位本身,其一律會映射到一個空集,或映射至表示子欄位或項目的字串。欄位管理的輸出包含下列類型的宣告:

  • f:name,其中 name 是清單中欄位的名稱。

  • k:keys,其中 keys 是清單項目欄位的映射。

  • v:value,其中 value 是清單項目的精準 JSON 格式化值。

  • i:index,其中 index 是清單中項目的位置。

CoreDNS 附加元件的下列輸出部分會說明先前的宣告:

  • 全受管欄位:如果受管欄位具有指定的 f: (欄位),但沒有 k: (索引鍵),則會管理整個欄位。修改此欄位中的任何值皆會導致衝突。

    在下列輸出中,您可以看到名為 coredns 的容器由 eks 管理。argsimageimagePullPolicy 子欄位也由 eks 管理。修改這些欄位中的任何值皆會導致衝突。

    [...]
    f:containers:
      k:{"name":"coredns"}:
      .: {}
      f:args: {}
      f:image: {}
      f:imagePullPolicy: {}
    [...]
    manager: eks
    [...]
  • 部分受管欄位:如果受管索引鍵具有指定的值,則會針對該欄位管理宣告的索引鍵。修改指定的索引鍵會導致衝突。

    在下列輸出中,您可以看到 eks 管理 config-volume 和使用 name 索引鍵設定的 tmp 磁碟區。

    [...]
    f:volumes:
      k:{"name":"config-volume"}:
        .: {}
        f:configMap:
          f:items: {}
          f:name: {}
        f:name: {}
      k:{"name":"tmp"}:
        .: {}
        f:name: {}
    [...]
    manager: eks
    [...]
  • 將索引鍵新增至部分受管欄位:如果只管理特定鍵值,您可以安全地將其他索引鍵 (例如引數) 新增至欄位,而不會造成衝突。如果新增其他索引鍵,請確定未先對欄位進行管理。新增或修改受管的任何值會導致衝突。

    在下列輸出中,您可以看到 name 索引鍵和 name 欄位皆為受管項目。新增或修改任何容器名稱會導致與此受管索引鍵發生衝突。

    [...]
    f:containers:
      k:{"name":"coredns"}:
    [...]
        f:name: {}
    [...]
    manager: eks
    [...]