

 **協助改進此頁面** 

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

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

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

# 確定您可為 Amazon EKS 附加元件自訂的欄位
<a name="kubernetes-field-management"></a>

使用標準的最佳實務組態將 Amazon EKS 附加元件安裝到您的叢集。如需將 Amazon EKS 附加元件新增至叢集的詳細資訊，請參閱 [Amazon EKS 附加元件](eks-add-ons.md)。

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

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

## 欄位管理語法
<a name="add-on-config-management-understanding-field-management"></a>

檢視 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` 管理。`args`、`image` 及 `imagePullPolicy` 子欄位也由 `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
  [...]
  ```

## 程序
<a name="view-field-management"></a>

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

您可以修改所有非由 Amazon EKS 管理的欄位，或另一個 Kubernetes 控制平面程序 (例如 `kube-controller-manager`)，沒有任何問題。

1. 判定要檢查的附加元件。若要查看部署到叢集的所有 `deployments` 和 DaemonSets，請參閱 [在 中檢視 Kubernetes 資源 AWS 管理主控台](view-kubernetes-resources.md)。

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

   ```
   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` 版本會決定是否預設傳回受管欄位。

## 後續步驟
<a name="view-field-management-next-steps"></a>

 AWS 為您的附加元件自訂 未擁有的欄位。