创建MCS
约束限制
- 当前MCS仅支持v1.21及更高版本的集群创建。
- 当为同一Service同时配置MCS与MCI时,该Service将会下发至MCS中配置的下发集群、访问集群以及对应工作负载的部署集群。
准备工作
- 部署工作负载与服务
MCS提供跨集群服务发现与访问能力,因此需要在集群联邦中提前部署可用的工作负载(Deployment)和服务(Service)。若您无可用工作负载和服务,请参考无状态负载和集群内访问(ClusterIP)创建。
- 设置集群网络
请参照设置集群网络对集群间网络互通进行检查与设置。
通过Kubectl命令创建MCS对象
- 使用kubectl连接集群联邦,详细操作请参见使用kubectl连接集群联邦。
- 创建并编辑 mcs.yaml 文件,文件内容定义如下所示,参数定义请参见表1。
vi mcs.yaml
示例YAML定义的MCS对象关联了名为foo的Service,支持在cluster A中访问到部署在cluster B中的该Service。
apiVersion: networking.karmada.io/v1alpha1 kind: MultiClusterService metadata: name: foo # MCS对象名称 namespace: default # MCS对象所在命名空间名称 spec: types: - CrossCluster # 类型为集群间服务发现 providerClusters: # Service的下发集群 - name: clusterB consumerClusters: # Service的访问集群 - name: clusterA
表1 关键参数说明 参数
是否必填
参数类型
描述
metadata.name
是
String
MCS对象的名称,应与关联Service保持一致。
metadata.namespace
否
String
MCS对象所在命名空间名称,应与关联Service所在命名空间名称保持一致。不填则默认为default。
spec.types
是
String
流量方向,实现集群间服务发现能力应配置为CrossCluster。
spec.providerClusters.name
否
String
Service的下发集群名称,应配置为Service的部署集群。不填则默认将Service下发至集群联邦内所有集群。
注意:若Service部署在cluster B,但在下发集群中配置了cluster A与cluster B,则该Service会同时下发至cluster A与cluster B,覆盖A中的原同名Service。
spec.consumerClusters.name
否
String
Service的访问集群名称,应配置为期望通过MCS实现跨集群访问Service的集群名称。不填则默认设置为所有集群联邦内集群可访问该Service。
- 执行如下命令创建MCS对象。
kubectl apply -f mcs.yaml
- 执行如下命令查看MCS对象的状态。其中foo为MCS对象的名称。
kubectl describe mcs foo
YAML文件中的status字段记录了MCS的状态,当status字段中出现如下内容时,表明Endpoint Slices下发并同步成功,集群间服务发现能力可用。
status: conditions: - lastTransitionTime: "2023-11-20T02:30:49Z" message: EndpointSlices are propagated to target clusters. reason: EndpointSliceAppliedSuccess status: "True" type: EndpointSliceApplied
创建完成后,可以执行如下命令操作MCS对象。其中foo为MCS对象的名称。- 获取MCS对象:kubectl get mcs foo
- 更新MCS对象:kubectl edit mcs foo
- 删除MCS对象:kubectl delete mcs foo
若MCS实例删除状态异常,一直显示“删除中”,则异常实例需要强制删除并清理资源。具体操作请参见MCS/MCI实例删除异常如何排查?