差異化規(guī)則
您可以在ACK One Fleet實(shí)例上進(jìn)行多集群應(yīng)用分發(fā)差異化配置,實(shí)現(xiàn)同一個(gè)應(yīng)用在不同目標(biāo)集群上的配置不同。本文通過(guò)差異化配置示例介紹應(yīng)用分發(fā)支持的更多差異化規(guī)則。
規(guī)則一:Deployment副本數(shù)的差異化
您可以通過(guò)以下YAML配置示例文件完成Deployment副本數(shù)的差異化配置,實(shí)現(xiàn)在目標(biāo)集群managedcluster-cd****
中部署副本數(shù)為5的Deployment。
配置示例
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: cluster-beijing
namespace: demo
type: topology
properties:
#定義分發(fā)的目標(biāo)集群。
clusters: ["managedcluster-cd****"]
---
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: override-replic-beijing
namespace: demo
#定義分發(fā)的差異化配置。
type: override
properties:
components:
#通過(guò)名稱引用Application中定義的Components,作為待差異化的Kubernetes資源。
- name: "demo"
#定義差異化配置類型,type scaler支持修改Deployment的副本數(shù),本示例修改副本數(shù)為5。
traits:
- type: scaler
properties:
replicas: 5
---
apiVersion: core.oam.dev/v1alpha1
kind: Workflow
metadata:
name: deploy-demo
namespace: demo
steps:
- type: deploy
name: deploy-beijing
properties:
#在工作流中應(yīng)用差異化配置和分發(fā)目標(biāo)。
policies: ["override-replic-beijing", "cluster-beijing"]
---
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
annotations:
app.oam.dev/publishVersion: version1
name: demo
namespace: demo
spec:
#定義Component。
components:
- name: demo
type: ref-objects
properties:
objects:
- apiVersion: apps/v1
kind: Deployment
name: demo
#引用工作流。
workflow:
ref: deploy-demo
差異化配置說(shuō)明
Deployment副本數(shù)差異化配置分為以下三部分:
模塊
components
:在Application中定義Component,將待差異化的Kubernetes資源作為Component的引用資源。說(shuō)明差異化配置只會(huì)修改Component中引用的第一個(gè)資源。
差異化配置
traits
:ACK One預(yù)先定義的差異化配置,簡(jiǎn)化差異化規(guī)則的編寫。本示例中scaler
支持修改Deployment的副本數(shù)。參數(shù)
說(shuō)明
traits. type: scaler
定義
traits
的type
類型。traits. properties. replicas
差異化的Deployment副本數(shù)。
差異化的目標(biāo)集群:在
Workflow
的steps
中,同時(shí)引用差異化配置Policy和分發(fā)目標(biāo)Policy,實(shí)現(xiàn)分發(fā)前對(duì)Kubernetes資源的差異化配置,將差異化的結(jié)果部署在目標(biāo)集群中。
規(guī)則二:Deployment container image的差異化
您可以通過(guò)以下YAML配置示例文件完成Deployment container image的差異化配置,實(shí)現(xiàn)Deployment中Container的image配置修改。
配置示例
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: override-image-beijing
namespace: demo
type: override
properties:
components:
- name: "demo"
#定義差異化配置類型,type container-image支持修改Deployment中Container的image配置。
traits:
- type: container-image
properties:
containerName: demo
image: registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:green
imagePullPolicy: Always
差異化配置說(shuō)明
參數(shù) | 說(shuō)明 |
| 定義 |
| 使用 |
| 差異化 |
| 差異化 |
規(guī)則三:Deployment container command的差異化
您可以通過(guò)以下YAML配置示例文件完成Deployment container command的差異化配置,實(shí)現(xiàn)Deployment中Container的Command配置修改。
配置示例
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: override-command
namespace: demo
type: override
properties:
components:
- name: "demo"
#定義差異化配置類型,type command支持修改Deployment中Container的command配置。
traits:
- type: command
properties:
containerName: demo
#覆蓋container的command參數(shù)。
command: ["demo-command", "demo-parameter1", "demo-parameter2"]
#覆蓋container的args參數(shù)。
args: ["demo-parameter1", "demo-parameter2"]
#在原有args中增加參數(shù)。
addArgs: ["new-parameter1"]
#從原有args中刪除參數(shù)。
delArgs: ["parameter1-to-delete"]
差異化配置說(shuō)明
參數(shù) | 說(shuō)明 |
| 定義 |
| 使用 |
| 差異化 |
| 差異化 |
| 在原有 |
| 從原有 |
規(guī)則四:Deployment container env的差異化
您可以通過(guò)以下YAML配置示例文件完成Deployment container env的差異化配置,實(shí)現(xiàn)Deployment中Container的env配置修改。
配置示例
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: override-command
namespace: demo
type: override
properties:
components:
- name: "demo"
#定義差異化配置類型,type env支持修改Deployment中Container的env配置。
traits:
- type: env
properties:
containerName: demo
#增加新的env配置,如果原有Container的同名env,則覆蓋env的值。
env:
key_first: value_first
key_second: value_second
#刪除原有Container的env配置。
unset: ["ENV1"]
差異化配置說(shuō)明
參數(shù) | 說(shuō)明 |
| 定義 |
| 使用 |
| 增加新的env配置,如果原有Container的同名env,則覆蓋原來(lái)env的值。 |
| 刪除原有Container的env配置。 |
規(guī)則五:基于JSON Patch的差異化
您可以通過(guò)以下YAML配置示例文件完成基于JSON Patch的差異化配置,實(shí)現(xiàn)資源參數(shù)的修改。
配置示例
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: override-json-path
namespace: demo
type: override
properties:
components:
- name: "demo"
#定義差異化配置類型,type json-patch支持通過(guò)JSON Patch選擇要修改的資源的參數(shù),并定義修改方式。
traits:
- type: json-patch
properties:
operations:
#op: add增加資源的參數(shù),示例中,增加一個(gè)Label。
- op: add
path: "/metadata/labels/label-to-add-key"
value: label-to-add-key-value
#op: replace修改資源的參數(shù)的值,示例中,修改一個(gè)已有Label的值。
- op: replace
path: "/metadata/labels/label-to-replace-key"
value: label-modified-value
#op: remove刪除資源的參數(shù),示例中,刪除一個(gè)已有Label。
- op: remove
path: "/metadata/labels/label-to-remove-key"
差異化配置說(shuō)明
參數(shù) | 說(shuō)明 |
| 定義 |
| 增加資源的參數(shù)。 |
| 修改資源參數(shù)的值。 |
| 刪除資源的參數(shù)。 |
規(guī)則六:JSON Merge差異化
基于JSON Patch的差異化配置,需要為每個(gè)待定的參數(shù)定義差異化配置,當(dāng)資源需要修改參數(shù)較多時(shí)比較繁瑣,此時(shí)可以選用JSON Merge差異化來(lái)簡(jiǎn)化配置,實(shí)現(xiàn)大量資源參數(shù)的修改。
您可以通過(guò)以下YAML配置示例文件完成JSON Merge差異化配置,實(shí)現(xiàn)不同集群中ConfigMap的配置修改。
配置示例
#Fleet實(shí)例中創(chuàng)建ConfigMap。
apiVersion: v1
kind: ConfigMap
metadata:
name: demo
namespace: demo
data:
confg-not-override: "not-override"
confg-to-override: "value"
config-file-to-override: |
{
"feature-parameters": {
"key1": "value1",
"key2": "value2",
}
}
config-to-delete: "to-delete"
---
#創(chuàng)建差異化規(guī)則。
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: override-configmap
namespace: demo
type: override
properties:
components:
- name: "demo"
#定義差異化配置類型,type json-merge-patch支持通過(guò)在properties中定義結(jié)構(gòu)體與原資源合并的方式修改資源。
traits:
- type: json-merge-patch
properties:
#待修改資源的第一級(jí)。
data:
#修改confg-to-override的值。
confg-to-override: "value-override"
#增加config-to-add。
config-to-add: "to-add"
#修改config-file-to-override的內(nèi)容。
config-file-to-override: |
{
"feature-parameters": {
"key1": "value1-override",
"key2": "value2-override",
}
}
#刪除config-to-delete。
config-to-delete: null
---
#修改后的資源。
apiVersion: v1
kind: ConfigMap
metadata:
name: demo
namespace: demo
data:
#confg-not-override沒(méi)有差異化保持不變。
confg-not-override: "not-override"
confg-to-override: "value-override"
config-file-to-override: |
{
"feature-parameters": {
"key1": "value1-override",
"key2": "value2-override",
}
}
差異化配置說(shuō)明
參數(shù) | 說(shuō)明 |
| 定義資源結(jié)構(gòu)體,與原資源合并,實(shí)現(xiàn)差異化。 |