Kubernetes 保留 kubernetes.io 命名空间中的所有标签和注解。
本文档既可以作为值的参考,也可以作为分配值的协调点。
例子:beta.kubernetes.io/arch=amd64
用于:节点
Kubelet 用 Go 定义的 runtime.GOARCH
填充它。例如,如果您混合使用 arm 和 x86 节点,这可能会很方便。
例如:beta.kubernetes.io/os=linux
用于:节点
Kubelet 用 Go 定义的 runtime.GOOS
填充它。如果您在您的集群中(尽管目前 Linux 是 Kubernetes 支持的唯一操作系统)混合使用操作系统,这可能会很方便。
例如:kubernetes.io/hostname=ip-172-20-114-199.ec2.internal
用于:节点
Kubelet 使用主机名填充它。请注意,可以通过将 --hostname-override
参数传递给 kubelet,以便使其根据“实际”主机名对主机名进行变更。
例子:beta.kubernetes.io/instance-type=m3.medium
用于:节点
Kubelet 使用 cloudprovider
定义的实例类型填充它。如果不使用 cloudprovider,则不会对它进行设置。
如果您想将某些工作负载定位到某个实例类型,这可能很方便。
但通常您希望依靠 Kubernetes 调度程序来执行基于资源的调度,您应该根据属性而不是实例类型来安排计划(例如,需要一个 GPU,而不是 g2.2xlarge
)
见 [failure-domain.beta.kubernetes.io/zone](#failure-domainbetakubernetesiozone)。
例如:
failure-domain.beta.kubernetes.io/region=us-east-1
failure-domain.beta.kubernetes.io/zone=us-east-1c
用于:节点,持久卷
在节点上:Kubelet 使用 cloudprovider
定义的区域信息填充它。如果不使用 cloudprovider
,则不会设置它。
但如果在拓扑中有意义,则应考虑在节点上设置它。
在持久卷上:基于 GCE 和 AWS 环境,PersistentVolumeLabel
准入控制器会自动将区域标签添加到持久卷。
Kubernetes 将自动把 pod 分布在跨越单个区域中的集群节点的副本控制器或服务中(以减少故障的影响)。 对于多区域集群,可以跨区域实现这种扩展行为(以减少区域故障的影响)。 这是通过 SelectorSpreadPriority 实现的。
这是一个最佳的布局。但是,如果集群中的区域是异构的(例如,不同数量的节点、不同类型的节点或不同的 pod 资源需求),这些都可能会阻止您的 pod 在不同的区域中做到均匀分布。
如果需要,可以使用同质区域(相同数量和类型的节点)来减少不均匀分布的概率。
调度器(通过 VolumeZonePredicate)还将确保声明给定卷的 pod 只放置在与该卷相同的区域中,因为卷不能跨区域挂载。
区域和区域的实际值无关紧要,层次结构的含义也没有严格定义。期望不同区域节点的故障应该是不相关的,除非整个区域都发生故障。 例如, 区域通常应该避免共享一个网络交换机。确切的映射取决于特定的基础设施,三机架安装将选择与多数据中心配置非常不同的设置。
如果 PersistentVolumeLabel
不支持自动标记您的持久卷,您又希望调度程序能防止 pod 在不同的区域挂载卷,则您应该考虑手动添加标签(或添加对 PersistentVolumeLabel
的支持)。
如果您的基础设施没有此约束,则根本不需要将区域标签添加到卷中。
此页是否对您有帮助?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.