

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# Amazon EKS アドオンのためにカスタマイズできるフィールドを決定する
<a name="kubernetes-field-management"></a>

アマゾン EKS アドオンは標準的なベストプラクティスによる設定を使用して、クラスターにインストールされます。Amazon EKS アドオンをクラスターに追加する方法については「[Amazon EKS アドオン](eks-add-ons.md)」を参照してください。

Amazon EKS アドオンの設定をカスタマイズすると、高度な機能を有効にすることが可能です。Amazon EKS は、Kubernetes サーバー側の適用機能を使用して、Amazon EKS で管理されていない (ユーザーによる) 設定の内容を上書きすることなく、Amazon EKS によるアドオンの管理を可能にします。詳細については、Kubernetes ドキュメントの「[Server Side Apply](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 オブジェクトの詳細を表示すると、マネージド型フィールドとアンマネージド型フィールドの両方が出力に返されます。管理対象フィールドは、次のいずれかになります。
+  **完全マネージド型** - フィールドのすべてのキーは アマゾン EKS によって管理されます。このフィールドの値を変更すると、競合の原因となります。
+  **部分的マネージド型** - フィールドの一部のキーは アマゾン EKS によって管理されます。アマゾン 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
  [...]
  ```
+  **部分的マネージド型キー** - マネージド型キーに値が指定されている場合、宣言されたキーはそのフィールドで管理されます。指定されたキーを変更すると、競合の原因となります。

  次の出力では`name` キーを使用する `eks` が、`config-volume` および `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` と DaemonSet をすべて表示するには、「[AWS マネジメントコンソール に Kubernetes リソースを表示する](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 が所有していないフィールドをカスタマイズします。