您可以在ACK One Fleet实例上进行多集群应用分发差异化配置,实现同一个应用在不同目标集群上的配置不同。本文通过差异化配置示例介绍应用分发支持的更多差异化规则。
规则一:Deployment副本数的差异化
您可以通过以下YAML配置示例文件完成Deployment副本数的差异化配置,实现在目标集群managedcluster-cd****
中部署副本数为5的Deployment。
配置示例
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: cluster-beijing
namespace: demo
type: topology
properties:
#定义分发的目标集群。
clusters: ["managedcluster-cd****"]
---
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: override-replic-beijing
namespace: demo
#定义分发的差异化配置。
type: override
properties:
components:
#通过名称引用Application中定义的Components,作为待差异化的Kubernetes资源。
- name: "demo"
#定义差异化配置类型,type scaler支持修改Deployment的副本数,本示例修改副本数为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:
#在工作流中应用差异化配置和分发目标。
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
差异化配置说明
Deployment副本数差异化配置分为以下三部分:
模块
components
:在Application中定义Component,将待差异化的Kubernetes资源作为Component的引用资源。说明差异化配置只会修改Component中引用的第一个资源。
差异化配置
traits
:ACK One预先定义的差异化配置,简化差异化规则的编写。本示例中scaler
支持修改Deployment的副本数。参数
说明
traits. type: scaler
定义
traits
的type
类型。traits. properties. replicas
差异化的Deployment副本数。
差异化的目标集群:在
Workflow
的steps
中,同时引用差异化配置Policy和分发目标Policy,实现分发前对Kubernetes资源的差异化配置,将差异化的结果部署在目标集群中。
规则二:Deployment container image的差异化
您可以通过以下YAML配置示例文件完成Deployment container image的差异化配置,实现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
差异化配置说明
参数 | 说明 |
| 定义 |
| 使用 |
| 差异化 |
| 差异化 |
规则三:Deployment container command的差异化
您可以通过以下YAML配置示例文件完成Deployment container command的差异化配置,实现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参数。
command: ["demo-command", "demo-parameter1", "demo-parameter2"]
#覆盖container的args参数。
args: ["demo-parameter1", "demo-parameter2"]
#在原有args中增加参数。
addArgs: ["new-parameter1"]
#从原有args中删除参数。
delArgs: ["parameter1-to-delete"]
差异化配置说明
参数 | 说明 |
| 定义 |
| 使用 |
| 差异化 |
| 差异化 |
| 在原有 |
| 从原有 |
规则四:Deployment container env的差异化
您可以通过以下YAML配置示例文件完成Deployment container env的差异化配置,实现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"]
差异化配置说明
参数 | 说明 |
| 定义 |
| 使用 |
| 增加新的env配置,如果原有Container的同名env,则覆盖原来env的值。 |
| 删除原有Container的env配置。 |
规则五:基于JSON Patch的差异化
您可以通过以下YAML配置示例文件完成基于JSON Patch的差异化配置,实现资源参数的修改。
配置示例
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: override-json-path
namespace: demo
type: override
properties:
components:
- name: "demo"
#定义差异化配置类型,type json-patch支持通过JSON Patch选择要修改的资源的参数,并定义修改方式。
traits:
- type: json-patch
properties:
operations:
#op: add增加资源的参数,示例中,增加一个Label。
- op: add
path: "/metadata/labels/label-to-add-key"
value: label-to-add-key-value
#op: replace修改资源的参数的值,示例中,修改一个已有Label的值。
- op: replace
path: "/metadata/labels/label-to-replace-key"
value: label-modified-value
#op: remove删除资源的参数,示例中,删除一个已有Label。
- op: remove
path: "/metadata/labels/label-to-remove-key"
差异化配置说明
参数 | 说明 |
| 定义 |
| 增加资源的参数。 |
| 修改资源参数的值。 |
| 删除资源的参数。 |
规则六:JSON Merge差异化
基于JSON Patch的差异化配置,需要为每个待定的参数定义差异化配置,当资源需要修改参数较多时比较繁琐,此时可以选用JSON Merge差异化来简化配置,实现大量资源参数的修改。
您可以通过以下YAML配置示例文件完成JSON Merge差异化配置,实现不同集群中ConfigMap的配置修改。
配置示例
#Fleet实例中创建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"
---
#创建差异化规则。
apiVersion: core.oam.dev/v1alpha1
kind: Policy
metadata:
name: override-configmap
namespace: demo
type: override
properties:
components:
- name: "demo"
#定义差异化配置类型,type json-merge-patch支持通过在properties中定义结构体与原资源合并的方式修改资源。
traits:
- type: json-merge-patch
properties:
#待修改资源的第一级。
data:
#修改confg-to-override的值。
confg-to-override: "value-override"
#增加config-to-add。
config-to-add: "to-add"
#修改config-file-to-override的内容。
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没有差异化保持不变。
confg-not-override: "not-override"
confg-to-override: "value-override"
config-file-to-override: |
{
"feature-parameters": {
"key1": "value1-override",
"key2": "value2-override",
}
}
差异化配置说明
参数 | 说明 |
| 定义资源结构体,与原资源合并,实现差异化。 |