Kubernetes 字段管理
Amazon EKS 使用标准的最佳实践配置,为您的集群安装附加组件。有关向集群中添加 Amazon EKS 附加组件的更多信息,请参阅 Amazon EKS 附加组件。
您若想要启用高级功能,则建议自定义 Amazon EKS 附加组件的配置。Amazon EKS 使用 Kubernetes 服务器端应用功能来启用 Amazon EKS 对附加组件的管理,而不会覆盖您对并非由 Amazon EKS 管理的设置的配置。有关更多信息,请参阅 Kubernetes 文档中的服务器端应用kube-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 ...
-
部分托管字段:如果托管键具有指定的值,则为该字段管理所声明的键。修改指定的键会导致冲突。
在以下输出中,您可以看到
eks
管理着包含name
键的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 ...