状态回写

    本文档将说明如何通过在定义对象中使用 CUE 模板来实现状态回写。

    在 Workload 和 Trait 中健康检查字段都是 。

    如果没有定义该字段,健康检查结果默认为 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. ...

    Component 健康检查示例请参考 这篇文章

    该健康检查结果将被记录在组件对应的 Application 资源中。

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. spec:
    4. components:
    5. - name: myweb
    6. properties:
    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. services:
    21. - healthy: true
    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 字段将包含以下信息:

    Trait 并不包含 context.output 字段,其他字段都是相同。

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: ComponentDefinition
    3. spec:
    4. status:
    5. customStatus: |-
    6. ...