Version: v1.0

trait

KubeVela 中的 Trait 特性可以从基于Helm的组件无缝添加.

在以下应用实例中,我们将基于 Helm 组件添加两个 Trait 特性 scalervirtualgroup.

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: myapp
  5. namespace: default
  6. spec:
  7. components:
  8. - name: demo-podinfo
  9. type: webapp-chart
  10. properties:
  11. image:
  12. tag: "5.1.2"
  13. traits:
  14. - type: scaler
  15. properties:
  16. replicas: 4
  17. - type: virtualgroup
  18. properties:
  19. group: "my-group1"
  20. type: "cluster"

注意: 当我们使用基于 Helm 的 Trait 特性时, 请确认在你 Helm 图标中的目标负载严格按照 qualified-full-name convention in Helm 的命名方式. 以此表为例, 负载名为版本名和图表名.

这是因为 KubeVela 依赖命名去发现负载,否则将不能把 Trait 特性赋予负载. KubeVela 将会基于你的应用和组件自动生成版本名, 所以你需要保证不能超出你的 Helm 图表中命名模版格式.

验证特性工作正确

因为应用内部的调整生效需要几秒钟时间.

检查缩放组 scaler 特性生效.

  1. $ kubectl get manualscalertrait
  2. NAME AGE
  3. demo-podinfo-scaler-d8f78c6fc 13m
  1. $ kubectl get deployment myapp-demo-podinfo -o json | jq .spec.replicas
  2. 4

检查虚拟组 virtualgroup 特性.

  1. $ kubectl get deployment myapp-demo-podinfo -o json | jq .spec.template.metadata.labels
  2. {
  3. "app.cluster.virtual.group": "my-group1",
  4. "app.kubernetes.io/name": "myapp-demo-podinfo"
  5. }

更新应用

当应用已被部署且 workload 负载/ Trait 特性都被顺利建立时, 你可以更新应用, 变化会被负载实例所响应.

让我们对实例应用的配置做几个改动.

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: myapp
  5. namespace: default
  6. spec:
  7. components:
  8. - name: demo-podinfo
  9. type: webapp-chart
  10. properties:
  11. image:
  12. tag: "5.1.3" # 5.1.2 => 5.1.3
  13. traits:
  14. - type: scaler
  15. properties:
  16. replicas: 2 # 4 => 2
  17. - type: virtualgroup
  18. properties:
  19. group: "my-group2" # my-group1 => my-group2
  20. type: "cluster"

在几分钟后应用新配置并检查效果.

检查从应用属性 properties 的新值 (image.tag = 5.1.3) 已被赋予图表.

  1. $ kubectl get deployment myapp-demo-podinfo -o json | jq '.spec.template.spec.containers[0].image'
  2. "ghcr.io/stefanprodan/podinfo:5.1.3"

实际上, Helm 更新了版本号 (revision 1 => 2).

  1. $ helm ls -A
  2. NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
  3. myapp-demo-podinfo default 2 2021-03-15 08:52:00.037690148 +0000 UTC deployed podinfo-5.1.4 5.1.4

检查 scaler 的特性.

  1. $ kubectl get deployment myapp-demo-podinfo -o json | jq .spec.replicas
  2. 2

检查 virtualgroup 的特性.

  1. $ kubectl get deployment myapp-demo-podinfo -o json | jq .spec.template.metadata.labels
  2. {
  3. "app.cluster.virtual.group": "my-group2",
  4. "app.kubernetes.io/name": "myapp-demo-podinfo"
  5. }

去除 Trait 特性

让我们试试从应用中去除特性.

  1. apiVersion: core.oam.dev/v1alpha2
  2. kind: Application
  3. metadata:
  4. name: myapp
  5. namespace: default
  6. spec:
  7. components:
  8. - name: demo-podinfo
  9. type: webapp-chart
  10. settings:
  11. image:
  12. tag: "5.1.3"
  13. traits:
  14. # - name: scaler
  15. # properties:
  16. # replicas: 2
  17. - name: virtualgroup
  18. properties:
  19. group: "my-group2"
  20. type: "cluster"

更新应用实例并检查 manualscalertrait 已被删除.

  1. $ kubectl get manualscalertrait
  2. No resources found