您可以在ACK One Fleet实例上进行多集群应用分发差异化配置,实现同一个应用在不同目标关联集群上的配置不同,例如副本数量、镜像、环境变量不同。本文通过示例应用的部署介绍如何实现应用分发的差异化配置。
前提条件
- 已开启舰队管理功能。 
- 舰队的Fleet实例已添加两个关联集群(服务提供者集群、服务消费者集群)。 
- 已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。 
- 已安装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
- 执行以下命令,在Fleet实例上部署应用 - demo。- kubectl apply -f app-meta.yaml
- 使用以下内容,创建policy-topology.yaml,定义分发的目标集群是 - cluster-beijing和- cluster-hangzhou。- 执行以下命令,查看Fleet实例管理的关联集群,确定应用分发的目标集群。 - 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
- 选择对应目标集群,替换如下示例中的 - <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>"]- 参数 - 说明 - type: topology- Topology类型的Policy定义了应用资源的下发目标。 - properties. clusters- 目前支持通过关联集群ID定义下发目标,一个下发目标可以包含一个或多个集群。 
 
- 执行以下命令,在Fleet实例上部署多集群应用的分发策略。 - kubectl apply -f policy-topology.yaml
- 使用以下内容,创建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- 参数 - 说明 - type: override- Override类型的Policy定义差异化配置。 - properties. components. name- 引用Application中Components,差异化的目标对象。 - properties. components.traits- 差异化配置,通过 - scaler修改Deployment副本数。
- 执行以下命令,在Fleet实例上部署多集群应用的差异化配置策略。 - kubectl apply -f policy-override.yaml
- 使用以下内容,创建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"]- 参数 - 说明 - type: deploy- 定义workflow部署步骤。 - steps. properties. policies- 部署步骤用使用的Policy,包括差异化配置和部署目标集群。 
- 执行以下命令,在Fleet实例上部署多集群应用分发工作流。 - kubectl apply -f workflow.yaml
- 使用以下内容,创建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- 参数 - 说明 - annotations: app.oam.dev/publishVersion- 应用的版本控制,当应用或应用引用的Kubernetes资源发生变化时,必须更新此字段,才能触发向目标集群的分发。 - components. type: ref-objects- 通过 - apiVersion、- kind和- name引用同命名空间下的Kubernetes资源,应用将下发这些资源到目标关联集群中。- 目前ACK One支持的应用Kubernetes资源包括 - Deployment/apps/v1、- Secret/v1、- ConfigMap/v1、- Ingress/networking.k8s.io/v1。
- 如需分发其他资源的需求,请提交工单联系ACK One团队。 
 - workflow. ref- 定义Application部署使用的工作流。 
- 执行以下命令,在Fleet实例上部署应用 - demo。- kubectl apply -f app.yaml
- 查看应用的状态。 - 执行以下命令,查看应用部署的状态。 - 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