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 gettype/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-fieldskubectl版本决定预设情况下是否返回托管字段。
了解 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 ...