您可以在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