Kubernetes フィールド管理 - Amazon EKS

Kubernetes フィールド管理

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

Amazon EKS アドオンの設定をカスタマイズすると、高度な機能を有効にすることが可能です。Amazon EKS は Kubernetes サーバー側の適用機能を使用して、Amazon EKS で管理されていない設定の内容を上書きすることなく、Amazon EKS によるアドオンの管理を可能にします。詳細については、「Kubernetes ドキュメント」の「Server-side Apply」(サーバー側の適用) を参照してください。これを実現するために、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 によって管理されていることがわかります。argsimage、および 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
    [...]