Deprecated
强烈建议不要使用
联邦 v1 版本
,联邦 v1 版本
从未达到 GA 状态,且不再处于积极开发阶段。文档仅作为历史参考。有关更多信息,请参阅预期的替代品 Kubernetes 联邦 v2 版本。
本指南介绍了如何在联邦控制平面中使用集群 API 资源。
与其他 Kubernetes 资源(例如 Deployment,Service 和 ConfigMap)不同, 集群资源仅存在于联邦上下文中,即这些请求必须提交给联邦 api-server。
本指南假设您已安装有一个正在运行的 Kubernetes 集群联邦。如果没有,那么请转到 联邦管理指南,了解如何启动联邦集群(或者让集群管理员为您执行此操作)。 其他教程,例如 Kelsey Hightower 的联邦 Kubernetes 教程, 也可能帮助您创建联邦 Kubernetes 集群。
要列出联邦中可用的集群,可以使用 kubectl 运行:
kubectl --context=federation get clusters
--context=federation
参数告诉 kubectl 将请求提交到联邦 apiserver 而不是发送给 Kubernetes 集群。如果您将其提交给 k8s 集群,您将会收到如下的错误信息:
如果您传递了正确的联邦上下文,但却收到错误消息:
No resources found.```
这表示您尚未将任何集群添加到联邦。
在联邦中创建 cluster
资源意味着将其加入联邦。您也可以使用 kubefed join
命令实现该操作。大体上,您需要给新的集群一个名字,并指出联邦主集群对应的上下文名称。以下示例命令将集群 gondor
加入运行于主集群 rivendell
上的联邦中:
kubefed join gondor --host-cluster-context=rivendell
您可以在 kubefed 指南的相应部分找到更多关于如何做到这一点的详细介绍。
与创建集群相反,删除集群表示将集群从联邦中退出。这可以通过 kubefed unjoin
完成。要删除 gondor
集群,只需要执行:
kubefed unjoin gondor --host-cluster-context=rivendell
您可以在 kubefed 指南中找到更多关于 unjoin 的详细介绍。
您可以使用与其它 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 用于匹配联邦集群上的标签值。
可能的 operator 有:In
、NotIn
、Exists
、DoesNotExist
、Gt
、Lt
。
当指定 Exists
或 DoesNotExist
时,values 字段应为空。使用 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.