您可以在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
。
-
执行以下命令,查看主控实例管理的关联集群,确定应用分发的目标集群。
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>"]
-
执行以下命令,在主控实例上部署多集群应用的分发策略。
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
-
执行以下命令,在主控实例上部署多集群应用的差异化配置策略。
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"]
-
执行以下命令,在主控实例上部署多集群应用分发工作流。
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团队。
-
查看应用的状态。
-
执行以下命令,查看应用部署的状态。
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
|