Note:
Federation V1
, the current Kubernetes federation API which reuses the Kubernetes API resources ‘as is’, is currently considered alpha for many of its features. There is no clear path to evolve the API to GA; however, there is aFederation V2
effort in progress to implement a dedicated federation API apart from the Kubernetes API. The details are available at sig-multicluster community page. –>
Federation V1
, 是当前的 Kubernetes 联邦 API, 它“原样”重用 Kubernetes API 资源, 其许多特性目前被认为是 alpha。 没有明确的途径将 API 发展成 GA; 然而, 除了 Kubernetes API 之外, 还有一个Federation V2
正在努力实现专用的联邦 API。详细信息可在 sig-multicluster 社区页面 获得。
本指南介绍了如何在联邦控制平面中使用集群 API 资源。
与 Deployment、Service 和 ConfigMap 等 Kubernetes 资源不同,cluster 只存在于联邦上下文中,即这些请求必须提交给联邦 api-server。
This guide assumes that you have a running Kubernetes Cluster Federation installation. If not, then head over to the federation admin guide to learn how to bring up a cluster federation (or have your cluster administrator do this for you). Other tutorials, such as Kelsey Hightower’s Federated Kubernetes Tutorial, might also help you create a Federated Kubernetes cluster. –>
本指南假设您已安装有一个正在运行的 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.