任务

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

Edit This Page

联邦 Cluster

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。

准备开始

集群列表

要列出联邦中可用的 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 参考页面中找到。

反馈