联邦 Deployment
已过时
强烈建议不要使用
联邦 v1 版本
,联邦 v1 版本
从未达到 GA 状态,且不再处于积极开发阶段。文档仅作为历史参考。有关更多信息,请参阅预期的替代品 Kubernetes 联邦 v2 版本。
本指南说明了如何在联邦控制平面中使用 Deployment。
联邦控制平面中的 Deployment(在本指南中称为 “联邦 Deployment”)与传统的 Kubernetes Deployment 非常类似,并提供相同的功能。在联邦控制平面中创建联邦 Deployment 确保所需的副本数存在于注册的群集中。
FEATURE STATE: Kubernetes 1.5
alpha
该功能目前处于 alpha 状态,意味着:
- 版本名称包含 alpha(例如 v1alpha1)。
- 可能存在问题,启用该功能可能会暴露 bug。默认情况下被禁用。
- 对该功能的支持可能在任何时候被取消,而不另行通知。
- API 可能会在以后的软件版本中以不兼容的方式被更改,而不另行通知。
- 建议仅在短期测试集群中使用该功能,这是因为使用该功能会增加出现 bug 的风险,而且缺乏长期支持。
一些特性(例如完整的 rollout 兼容性)仍在开发中。
准备开始
- 本指南假设您已安装有一个正在运行的 Kubernetes 集群联邦。如果没有,那么请转到 联邦管理指南,了解如何启动联邦集群(或者让集群管理员为您执行此操作)。 其他教程,例如 Kelsey Hightower 的联邦 Kubernetes 教程, 也可能帮助您创建联邦 Kubernetes 集群。
- 您还应当拥有基本的 Kubernetes 应用知识,特别是在 Deployments 方面。
创建联邦 Deployment
联邦 Deployment 的 API 和传统的 Kubernetes Deployment API 是兼容的。 您可以通过向联邦 apiserver 发送请求来创建一个 Deployment。
您可以通过使用 kubectl 运行下面的指令:
kubectl --context=federation-cluster create -f mydeployment.yaml
--context=federation-cluster
参数告诉 kubectl 发送请求到联邦 apiserver 而不是某个 Kubernetes 集群。
一旦联邦 Deployment 被创建,联邦控制平面会在所有底层 Kubernetes 集群中创建一个 Deployment。 您可以通过检查底层每个集群来对其进行验证,例如:
kubectl --context=gce-asia-east1a get deployment mydep
上面的命令假定您在客户端中配置了一个叫做 ‘gce-asia-east1a’ 的上下文,
底层集群中的这些 Deployment 会匹配联邦 Deployment 中副本数和修订版本相关注解_之外_的信息。 联邦控制平面确保所有集群中的副本总数与联邦 Deployment 中请求的副本数量匹配。
在底层集群中分布副本
默认情况下,副本会被平均分布到所有的底层集群中。例如:如果您有 3 个注册的集群并且创建了一个副本数为 9(spec.replicas = 9
) 的联邦 Deployment,那么这 3 个集群中的每个 Deployment 都将有 3 个副本 (spec.replicas=3
)。 为修改每个集群中的副本数,您可以在联邦 Deployment 中以注解的形式指定 FederatedReplicaSetPreference,其中注解的键为 federation.kubernetes.io/deployment-preferences
。
更新联邦 Deployment
您可以像更新 Kubernetes Deployment 一样更新联邦 Deployment。但是,对于联邦 Deployment,您必须发送请求到联邦 apiserver 而不是某个特定的 Kubernetes 集群。联邦控制平面会确保每当联邦 Deployment 更新时,它会更新所有底层集群中相应的 Deployment 来和更新后的内容保持一致。 所以如果(在联邦 Deployment 中)选择了滚动更新,那么底层集群会独立地进行滚动更新,并且联邦 Deployment 中的 maxSurge
和 maxUnavailable
只会应用于独立的集群中。将来这种行为可能会改变。
如果您的更新包括副本数量的变化,联邦控制平面会改变底层集群中的副本数量,以确保它们的总数等于联邦 Deployment 中请求的数量。
删除联邦 Deployment
您可以像删除 Kubernetes Deployment 一样删除联邦 Deployment。但是,对于联邦 Deployment,您必须发送请求到联邦 apiserver 而不是某个特定的 Kubernetes 集群。
例如,您可以使用 kubectl 运行下面的命令来删除联邦 Deployment:
kubectl --context=federation-cluster delete deployment mydep