Kubernetes フィールド管理
Amazon EKS アドオンは、標準的なベストプラクティスによる設定を使用して、クラスターにインストールされます。Amazon EKS アドオンをクラスターに追加する方法については、「Amazon EKS アドオン」を参照してください。
Amazon EKS アドオンの設定をカスタマイズすると、高度な機能を有効にすることが可能です。Amazon EKS は Kubernetes サーバー側の適用機能を使用して、Amazon EKS で管理されていない設定の内容を上書きすることなく、Amazon EKS によるアドオンの管理を可能にします。詳細については、「Kubernetes ドキュメント」の「Server-side Applykube-controller-manager
など) によって管理されていないすべてのフィールドは、ユーザーが問題なく管理できます。
Amazon EKS で管理しているフィールドを変更すると、Amazon EKS がアドオンを管理できなくなるため、アドオンの更新時にユーザーによる変更が上書きされる可能性があります。
フィールド管理ステータスを表示する
kubectl
を使用すると、任意の Amazon EKS アドオンについて、どのフィールドが Amazon EKS によって管理されているかを知ることができます。
フィールドの管理ステータスを表示する
-
確認するアドオンを決定します。クラスターにデプロイされた、すべての
deployments
とDaemonSets
を表示するには、「Kubernetes リソースを表示する」を参照してください。 -
アドオンのマネージド型フィールドを表示するには、次のコマンドを実行します。
kubectl get
type
/add-on-name
-nadd-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
は、リスト項目を正確な JSON 形式で記述した値)。value
-
i:
(index
は、リスト内の項目の位置)。index
詳細については、「Kubernetes ドキュメント」の「FieldsV1 v1 meta
出力内で、以下の 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 ...