Version: v1.0
trait
KubeVela 中的 Trait 特性可以从基于Helm的组件无缝添加.
在以下应用实例中,我们将基于 Helm 组件添加两个 Trait 特性 scaler 和 virtualgroup.
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: myapp
namespace: default
spec:
components:
- name: demo-podinfo
type: webapp-chart
properties:
image:
tag: "5.1.2"
traits:
- type: scaler
properties:
replicas: 4
- type: virtualgroup
properties:
group: "my-group1"
type: "cluster"
注意: 当我们使用基于 Helm 的 Trait 特性时, 请确认在你 Helm 图标中的目标负载严格按照 qualified-full-name convention in Helm 的命名方式. 以此表为例, 负载名为版本名和图表名.
这是因为 KubeVela 依赖命名去发现负载,否则将不能把 Trait 特性赋予负载. KubeVela 将会基于你的应用和组件自动生成版本名, 所以你需要保证不能超出你的 Helm 图表中命名模版格式.
验证特性工作正确
因为应用内部的调整生效需要几秒钟时间.
检查缩放组 scaler
特性生效.
$ kubectl get manualscalertrait
NAME AGE
demo-podinfo-scaler-d8f78c6fc 13m
$ kubectl get deployment myapp-demo-podinfo -o json | jq .spec.replicas
4
检查虚拟组 virtualgroup
特性.
$ kubectl get deployment myapp-demo-podinfo -o json | jq .spec.template.metadata.labels
{
"app.cluster.virtual.group": "my-group1",
"app.kubernetes.io/name": "myapp-demo-podinfo"
}
更新应用
当应用已被部署且 workload 负载/ Trait 特性都被顺利建立时, 你可以更新应用, 变化会被负载实例所响应.
让我们对实例应用的配置做几个改动.
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: myapp
namespace: default
spec:
components:
- name: demo-podinfo
type: webapp-chart
properties:
image:
tag: "5.1.3" # 5.1.2 => 5.1.3
traits:
- type: scaler
properties:
replicas: 2 # 4 => 2
- type: virtualgroup
properties:
group: "my-group2" # my-group1 => my-group2
type: "cluster"
在几分钟后应用新配置并检查效果.
检查从应用属性 properties
的新值 (image.tag = 5.1.3
) 已被赋予图表.
$ kubectl get deployment myapp-demo-podinfo -o json | jq '.spec.template.spec.containers[0].image'
"ghcr.io/stefanprodan/podinfo:5.1.3"
实际上, Helm 更新了版本号 (revision 1 => 2).
$ helm ls -A
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
myapp-demo-podinfo default 2 2021-03-15 08:52:00.037690148 +0000 UTC deployed podinfo-5.1.4 5.1.4
检查 scaler
的特性.
$ kubectl get deployment myapp-demo-podinfo -o json | jq .spec.replicas
2
检查 virtualgroup
的特性.
$ kubectl get deployment myapp-demo-podinfo -o json | jq .spec.template.metadata.labels
{
"app.cluster.virtual.group": "my-group2",
"app.kubernetes.io/name": "myapp-demo-podinfo"
}
去除 Trait 特性
让我们试试从应用中去除特性.
apiVersion: core.oam.dev/v1alpha2
kind: Application
metadata:
name: myapp
namespace: default
spec:
components:
- name: demo-podinfo
type: webapp-chart
settings:
image:
tag: "5.1.3"
traits:
# - name: scaler
# properties:
# replicas: 2
- name: virtualgroup
properties:
group: "my-group2"
type: "cluster"
更新应用实例并检查 manualscalertrait
已被删除.
$ kubectl get manualscalertrait
No resources found