更新时间:2024-11-12 GMT+08:00

创建MCS

约束限制

  • 当前MCS仅支持v1.21及更高版本的集群创建。
  • 当为同一Service同时配置MCS与MCI时,该Service将会下发至MCS中配置的下发集群、访问集群以及对应工作负载的部署集群。

准备工作

  • 部署工作负载与服务

    MCS提供跨集群服务发现与访问能力,因此需要在集群联邦中提前部署可用的工作负载(Deployment)和服务(Service)。若您无可用工作负载和服务,请参考无状态负载集群内访问(ClusterIP)创建。

  • 设置集群网络

    请参照设置集群网络对集群间网络互通进行检查与设置。

通过Kubectl命令创建MCS对象

  1. 使用kubectl连接集群联邦,详细操作请参见使用kubectl连接集群联邦
  2. 创建并编辑 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。

  3. 执行如下命令创建MCS对象。

    kubectl apply -f mcs.yaml

  4. 执行如下命令查看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对象创建成功后,您可以在consumerClusters.name中配置的访问集群中,访问到部署在下发集群中的Service。

创建一个Pod并进入到容器内,使用curl http://服务名称:端口号命令访问Service,如下所示。

回显出现如下信息表明访问成功。

/ # curl http://服务名称:端口号
... 
<h1>Welcome to foo!</h1> 
...