相关文章推荐
不拘小节的山寨机  ·  Declarative ...·  22 小时前    · 
大方的西装  ·  Error from server ...·  16 小时前    · 
傲视众生的葡萄  ·  k8s coredns显示0/1 ...·  15 小时前    · 
坚强的鸵鸟  ·  C# ...·  1 年前    · 

您可以在ACK One多集群管理的主控实例上进行多集群应用分发差异化配置,实现同一个应用在不同目标关联集群上的配置不同,例如副本数量、镜像、环境变量不同。本文通过示例应用的部署介绍如何实现应用分发的差异化配置。

开发者用户从 ACK One控制台 获取主控实例的KubeConfig,通过Kubectl连接至主控实例。

主控实例管理员(实例创建者)已配置命名空间和配额。具体操作,请参见 管理命名空间与配额

  • 主控实例已添加多个关联集群。具体操作,请参见 添加关联集群
  • 安装AMC命令行工具。具体操作,请参见 AMC命令行帮助
  • 使用以下内容,创建 app-meta.yaml 文件,包含应用相关的Kubernetes原生资源。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: demo
      name: demo
      namespace: demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: demo
      template:
        metadata:
          labels:
            app: demo
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:red
            name: demo
  • 执行以下命令,在主控实例上部署应用 demo
    kubectl apply -f app-meta.yaml
  • 使用以下内容,创建 policy-topology.yaml ,定义分发的目标集群是 cluster-beijing cluster-hangzhou
    1. 执行以下命令,查看主控实例管理的关联集群,确定应用分发的目标集群。
      kubectl get managedclusters

      预期输出:

      NAME                     HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
      managedcluster-c5***z9   true                                  True     True        12d
      managedcluster-c1***e5   true                                  True     True        12d
    2. 选择对应目标集群,替换如下示例中的 <clusterid1> <clusterid2> 为待发布的目标集群ID。
      apiVersion: core.oam.dev/v1alpha1
      kind: Policy
      metadata:
        name: cluster-beijing
        namespace: demo
      type: topology
      properties:
        clusters: ["<clusterid1>"]
      apiVersion: core.oam.dev/v1alpha1
      kind: Policy
      metadata:
        name: cluster-hangzhou
        namespace: demo
      type: topology
      properties:
        clusters: ["<clusterid2>"]
    3. 执行以下命令,在主控实例上部署多集群应用的分发策略。
      kubectl apply -f policy-topology.yaml
    4. 使用以下内容,创建 policy-override.yaml ,定义差异化配置,修改Deployment的副本数。
      apiVersion: core.oam.dev/v1alpha1
      kind: Policy
      metadata:
        name: override-replic-beijing
        namespace: demo
      type: override
      properties:
        components:
        - name: "demo"
          traits:
          - type: scaler
            properties:
              replicas: 3
      apiVersion: core.oam.dev/v1alpha1
      kind: Policy
      metadata:
        name: override-replic-hangzhou
        namespace: demo
      type: override
      properties:
        components:
        - name: "demo"
          traits:
          - type: scaler
            properties:
              replicas: 5
    5. 执行以下命令,在主控实例上部署多集群应用的差异化配置策略。
      kubectl apply -f policy-override.yaml
    6. 使用以下内容,创建 workflow.yaml ,定义工作流。
      apiVersion: core.oam.dev/v1alpha1
      kind: Workflow
      metadata:
        name: deploy-demo
        namespace: demo
      steps:
        - type: deploy
          name: deploy-bejing
          properties:
            policies: ["override-replic-beijing", "cluster-beijing"]
        - type: deploy
          name: deploy-hangzhou
          properties:
            policies: ["override-replic-hangzhou", "cluster-hangzhou"]
    7. 执行以下命令,在主控实例上部署多集群应用分发工作流。
      kubectl apply -f workflow.yaml
    8. 使用以下内容,创建 app.yaml ,定义应用。
      apiVersion: core.oam.dev/v1beta1
      kind: Application
      metadata:
        name: demo
        namespace: demo
        annotations:
          app.oam.dev/publishVersion: version1
      spec:
        components:
          - name: demo
            type: ref-objects
            properties:
              objects:
                - apiVersion: apps/v1
                  kind: Deployment
                  name: demo
        workflow:
          ref: deploy-demo
    9. annotations: app.oam.dev/publishVersion 应用的版本控制,当应用或应用引用的Kubernetes资源发生变化时,必须更新此字段,才能触发向目标集群的分发。 components. type: ref-objects 通过 apiVersion kind name 引用同命名空间下的Kubernetes资源,应用将下发这些资源到目标关联集群中。
    10. 目前ACK One支持的应用Kubernetes资源包括 Deployment/apps/v1 Secret/v1 ConfigMap/v1 Ingress/networking.k8s.io/v1
    11. 如需分发其他资源的需求,请 提交工单 联系ACK One团队。
    12. 查看应用的状态。
      • 执行以下命令,查看应用部署的状态。
        kubectl get app demo -n demo

        预期输出:

        NAME   COMPONENT   TYPE          PHASE     HEALTHY   STATUS   AGE
        demo   demo        ref-objects   running   true               24m
      • 执行以下命令,查看Deployment资源在各关联集群上的副本数。

        替换其中 <clusterid1> 为待查看的目标集群ID,可以看到实际副本数与差异化配置一致。

        kubectl amc get deployment demo -n demo -m <clusterid1>

        预期输出:

        Run on ManagedCluster <clusterid1>
        NAME   READY   UP-TO-DATE   AVAILABLE   AGE
        demo   3/3     3            3           28m
        kubectl amc get deployment demo -n demo -m <clusterid2>

        预期输出:

        Run on ManagedCluster <clusterid2>
        NAME   READY   UP-TO-DATE   AVAILABLE   AGE
        demo   5/5     5            5           28m
  •