帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
确定可以为 Amazon EKS 附加组件自定义的字段
Amazon EKS 使用标准的最佳实践配置,为您的集群安装附加组件。有关向集群中添加 Amazon EKS 附加组件的更多信息,请参阅 Amazon EKS 附加组件。
您若想要启用高级功能,则建议自定义 Amazon EKS 附加组件的配置。Amazon EKS 使用 Kubernetes 服务器端应用功能来启用 Amazon EKS 对附加组件的管理,而不会覆盖您对并非由 Amazon EKS 管理的设置的配置。有关更多信息,请参阅 Kubernetes 文档中的服务器端应用kube-controller-manager
)管理的所有字段,这样操作不会导致任何问题。
重要
修改由 Amazon EKS 管理的字段会阻止 Amazon EKS 管理附加组件,并可能导致在更新附加组件时覆盖您所做的更改。
字段管理语法
当您查看某个 Kubernetes 对象的详细信息时,输出中会同时返回托管和非托管字段。托管字段可以是以下任一类型:
-
完全托管:该字段的所有密钥都由 Amazon EKS 管理。修改任何值都会导致冲突。
-
部分托管:该字段的部分密钥将由 Amazon EKS 管理。只有对 Amazon EKS 明确管理的密钥进行修改才会导致冲突。
这两种类型的字段都标有 manager: eks
。
每个键要么是表示字段本身的 .
(始终映射到空集),要么是表示子字段或项目的字符串。字段管理的输出由以下类型的声明组成:
-
f:
,其中name
是列表中字段的名称。name
-
k:
,其中keys
是列表项字段的映射。keys
-
v:
,其中value
是列表项的确切 JSON 格式化值。value
-
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 [...]
-
部分托管字段:如果托管键具有指定的值,则为该字段管理所声明的键。修改指定的键会导致冲突。
在以下输出中,您可以看到
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 [...]
过程
您可以使用 kubectl
查看对于任何 Amazon EKS 附加组件,有哪些字段由 Amazon EKS 管理。
您可以修改并非由 Amazon EKS 或其他 Kubernetes 控制面板进程(例如 kube-controller-manager
)管理的所有字段,这样操作不会导致任何问题。
-
确定要检查的附加组件。要查看部署到集群的所有
deployments
和DaemonSets
,请参阅 在 Amazon Web Services Management Console 中查看 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
版本决定预设情况下是否返回托管字段。
后续步骤
为附加组件自定义非 Amazon 拥有的字段。