状态回写

    本文档将为你讲解,如何通过 CUE 模版在定义对象时实现状态回写。

    不管是组件定义中,还是运维特征定义中,健康检查对应的配置项都是 。如果没有定义,它的值默认是 true

    在 CUE 里的关键词是 isHealth,CUE 表达式结果必须是 bool 类型。 KubeVela 运行时会一直检查 CUE 表达式,直至其状态显示为健康。每次控制器都会获取所有的 Kubernetes 资源,并将他们填充到 context 字段中。

    Trait 对象,没有 context.output 这个字段,其它字段相同。

    我们看看健康检查的例子:

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: ComponentDefinition
    3. spec:
    4. status:
    5. healthPolicy: |
    6. isHealth: (context.output.status.readyReplicas > 0) && (context.output.status.readyReplicas == context.output.status.replicas)
    7. ...

    健康检查的结果将会记录到 Application 对象中。

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. spec:
    4. components:
    5. - name: myweb
    6. type: worker
    7. cmd:
    8. - sleep
    9. - "1000"
    10. enemies: alien
    11. image: busybox
    12. lives: "3"
    13. traits:
    14. - type: ingress
    15. properties:
    16. domain: www.example.com
    17. http:
    18. /: 80
    19. status:
    20. ...
    21. message: "type: busybox,\t enemies:alien"
    22. name: myweb
    23. traits:
    24. - healthy: true
    25. message: 'Visiting URL: www.example.com, IP: 47.111.233.220'
    26. type: ingress
    27. status: running

    自定义状态

    在 CUE 中的关键词是 message。同时,CUE 表达式的结果必须是 string 类型。

    自定义状态和健康检查的原理一致。Application 对象的 CRD 控制器都会检查 CUE 表达式,直至显示健康通过。

    context 字段包含如下信息:

    查看示例:

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: ComponentDefinition
    3. spec:
    4. status:
    5. customStatus: |-
    6. message: "type: " + context.output.spec.template.spec.containers[0].image + ",\t enemies:" + context.outputs.gameconfig.data.enemies