状态回写
本文档将说明如何通过在定义对象中使用 CUE 模板来实现状态回写。
在 Workload 和 Trait 中健康检查字段都是 。
如果没有定义该字段,健康检查结果默认为 true
。
CUE 中关键字为 isHealth
,CUE 表达式结果必须是 bool
类型。 KubeVela 运行时将定期评估 CUE 表达式直到状态为健康。控制器每次都会获取所有 Kubernetes 资源,同时将结果填充到 context 字段中。
Trait 并不包含 context.output
字段,其他字段都是相同。
以下为健康检查的示例:
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
spec:
status:
healthPolicy: |
isHealth: (context.output.status.readyReplicas > 0) && (context.output.status.readyReplicas == context.output.status.replicas)
...
Component 健康检查示例请参考 这篇文章 。
该健康检查结果将被记录在组件对应的 Application
资源中。
apiVersion: core.oam.dev/v1beta1
kind: Application
spec:
components:
- name: myweb
properties:
cmd:
- sleep
- "1000"
enemies: alien
image: busybox
lives: "3"
traits:
- type: ingress
properties:
domain: www.example.com
http:
/: 80
status:
services:
- healthy: true
name: myweb
traits:
- healthy: true
message: 'Visiting URL: www.example.com, IP: 47.111.233.220'
type: ingress
status: running
自定义状态
自定义状态 CUE 中关键词为 message
,CUE 表达式的结果必须是 string
类型。
自定义状态的内部机制类似上面介绍的健康检查。Application CRD 控制器将评估 CUE 表达式直到检查成功。
context 字段将包含以下信息:
Trait 并不包含 context.output
字段,其他字段都是相同。
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
spec:
status:
customStatus: |-
...