Note:Federation V1
, 是当前的 Kubernetes 联邦 API, 它’原样’重用 Kubernetes API 资源, 其许多特性目前被认为是 alpha。 没有明确的途径将 API 发展成 GA; 然而, 除了 Kubernetes API 之外, 还有一个Federation V2
正在努力实现专用的联邦 API。详细信息可在 sig-multicluster 社区页面 获得。
本指南介绍了如何在联邦控制平面中使用集群 API 资源。
与 Deployment、Service 和 ConfigMap 等 Kubernetes 资源不同,cluster 只存在于联邦上下文中,即这些请求必须提交给联邦 api-server。
本指南假设您已安装有一个正在运行的 Kubernetes 集群联邦。如果没有,那么请转到 联邦管理指南,了解如何启动联邦集群(或者让集群管理员为您执行此操作)。 其他教程,例如 Kelsey Hightower 的联邦 Kubernetes 教程, 也可能帮助您创建联邦 Kubernetes 集群。
要列出联邦中可用的 cluster,可以使用 kubectl 运行:
kubectl --context=federation get clusters
--context=federation
参数告诉 kubectl 将请求提交给联邦 apiserver,
而不是将其发送给 Kubernetes 集群。如果您将其提交给 k8s 集群,则会收到错误消息
the server doesn't have a resource type "clusters"
如果您传递了正确的联邦上下文,但是收到了一条消息错误
No resources found.
这表示着没有向联邦添加任何集群。
在联邦中创建集群
资源意味着将其加入到联邦中。因此,您可以使用 kubefed join
。基本上,您需要为新群集指定一个名称,
并说明与承载联邦的集群相对应的上下文的名称。下面的示例命令将集群 gondor
添加到运行在主机集群 rivendell
上的联邦:
kubefed join gondor --host-cluster-context=rivendell
您可以在 kubefed 指南的相关章节中找到更多关于如何实现这一点的详细信息。
与创建集群相反,删除集群意味着从联邦中取消加入这个集群。这可以通过 kubefed unjoin
命令完成。要删除 gondor
群集,需要执行以下操作:
kubefed unjoin gondor --host-cluster-context=rivendell
你可以在 kubefed 指南中找到更多关于取消加入的详细信息。
您可以使用与其他任何 Kubernetes 对象相同的方法标记集群,这有助于对集群进行分组,也可以配合使用 ClusterSelector。
kubectl --context=rivendell label cluster gondor key1=value1 key2=value2
从 Kubernetes 1.7 开始,alpha 支持通过注解 federation.alpha.kubernetes.io/cluster-selector
在联邦集群中引导对象。。
ClusterSelector 在概念上类似于 nodeSelector
,但是它不是针对节点上的标签进行选择,而是针对联邦集群上的标签进行选择。
注解值必须是 JSON 格式并且必须可解析为 ClusterSelector API 类型。
例如:[{"key": "load", "operator": "Lt", "values": ["10"]}]
,不能正确解析的内容将抛出一个错误,并阻止将对象分发到任何联邦集群。alpha 实现包含 ConfigMap、Secret、Daemonset、Service 和 Ingress 类型的对象。
下面是一个 ClusterSelector 注释示例,它只会选择带有标签 pci=true
不选择标签为 environment=test
的集群:
metadata:
annotations:
federation.alpha.kubernetes.io/cluster-selector: '[{"key": "pci", "operator":
"In", "values": ["true"]}, {"key": "environment", "operator": "NotIn", "values":
["test"]}]'
key 与联邦集群上的标签名称匹配。
values 与联邦集群上的标签值匹配。
可能的*操作符*有:In
、NotIn
、Exists
、DoesNotExist
、Gt
、Lt
。
values 字段在指定 Exists
或 DoesNotExist
时为空,在使用 In
或 NotIn
时可能包含多个字符串。
目前,Gt
和 Lt
操作符只支持整数。
完整的集群 API 参考目前在 federation/v1beta1
中,更多细节可以在联邦 API 参考页面中找到。
此页是否对您有帮助?
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.