您可以在ACK One Fleet实例上进行多集群应用分发差异化配置,实现同一个应用在不同目标关联集群上的配置不同,例如副本数量、镜像、环境变量不同。本文通过示例应用的部署介绍如何实现应用分发的差异化配置。
前提条件
已开启舰队管理功能。具体操作,请参见开启舰队管理功能。
舰队的Fleet实例已添加多个关联集群。具体操作,请参见添加关联集群。
已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。
已安装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
执行以下命令,在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