任务

Kubernetes v1.12 版本的文档已不再维护。您现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。

Edit This Page

联邦 Cluster

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 a Federation 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。

准备开始

本指南假设您已安装有一个正在运行的 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

ClusterSelector 注解

从 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 与联邦集群上的标签值匹配。

可能的*操作符*有:InNotInExistsDoesNotExistGtLt

values 字段在指定 ExistsDoesNotExist 时为空,在使用 InNotIn 时可能包含多个字符串。

目前,GtLt 操作符只支持整数。

集群 API 参考

完整的集群 API 参考目前在 federation/v1beta1 中,更多细节可以在联邦 API 参考页面中找到。

反馈