--- title: 联邦 Cluster content_template: templates/task --- {{% capture overview %}} {{< note >}} {{< include "federation-current-state.md" >}} {{< /note >}} 本指南介绍了如何在联邦控制平面中使用集群 API 资源。 与 Deployment、Service 和 ConfigMap 等 Kubernetes 资源不同,cluster 只存在于联邦上下文中,即这些请求必须提交给联邦 api-server。 {{% /capture %}} {{% capture prerequisites %}} * {{< include "federated-task-tutorial-prereqs.md" >}} * 你需要具备基本的 [Kubernetes 工作知识](/docs/setup/pick-right-solution/)。 {{% /capture %}} {{% capture steps %}} ## 集群列表 要列出联邦中可用的 cluster,可以使用 [kubectl](/docs/user-guide/kubectl/) 运行: ```shell 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` 上的联邦: ```shell kubefed join gondor --host-cluster-context=rivendell ``` 您可以在 [kubefed 指南](/docs/tutorials/federation/set-up-cluster-federation-kubefed/#adding-a-cluster-to-a-federation)的相关章节中找到更多关于如何实现这一点的详细信息。 ## 删除一个联邦集群 与创建集群相反,删除集群意味着从联邦中取消加入这个集群。这可以通过 `kubefed unjoin` 命令完成。要删除 `gondor` 群集,需要执行以下操作: ```shell kubefed unjoin gondor --host-cluster-context=rivendell ``` 你可以在 [kubefed 指南](/docs/tutorials/federation/set-up-cluster-federation-kubefed/#removing-a-cluster-from-a-federation)中找到更多关于取消加入的详细信息。 ## 标记集群 您可以使用与其他任何 Kubernetes 对象相同的方法标记集群,这有助于对集群进行分组,也可以配合使用 ClusterSelector。 ``` shell 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 类型](/docs/reference/federation/v1beta1/definitions/#_v1beta1_clusterselector)。 例如:`[{"key": "load", "operator": "Lt", "values": ["10"]}]`,不能正确解析的内容将抛出一个错误,并阻止将对象分发到任何联邦集群。alpha 实现包含 ConfigMap、Secret、Daemonset、Service 和 Ingress 类型的对象。 下面是一个 ClusterSelector 注释示例,它只会选择带有标签 `pci=true` 不选择标签为 `environment=test` 的集群: ```yaml 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 参考 完整的集群 API 参考目前在 `federation/v1beta1` 中,更多细节可以在[联邦 API 参考页面](/docs/reference/federation/)中找到。 {{% /capture %}}