Version: v1.1

健康状态检查

本章节会介绍如何使用健康策略(health policy)为应用添加定期健康检查策略。

背景

当一个应用部署成功后,用户经常需要观测应用的健康状态,以及每一个组件的健康状态。 对于不健康的组件,及时让用户发现问题,并提供诊断信息供用户排查。 设定部署状态检查策略可以让健康检查的流程与应用执行流程解耦,设定独立的检查周期,如每30秒检查一次。

健康策略

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: app-healthscope-unhealthy
  5. spec:
  6. components:
  7. - name: my-server
  8. type: webservice
  9. properties:
  10. cmd:
  11. - node
  12. - server.js
  13. image: oamdev/testapp:v1
  14. port: 8080
  15. traits:
  16. - type: ingress
  17. properties:
  18. domain: test.my.domain
  19. http:
  20. "/": 8080
  21. - name: my-server-unhealthy
  22. type: webservice
  23. properties:
  24. cmd:
  25. - node
  26. - server.js
  27. image: oamdev/testapp:boom # make it unhealthy
  28. port: 8080
  29. policies:
  30. - name: health-policy-demo
  31. type: health
  32. properties:
  33. probeInterval: 5
  34. probeTimeout: 10

示例中提供了一个包含有两个组件的应用,其中一个组件是健康的,另一个由于镜像版本错误,将会无法启动,从而被认为是不健康的。

示例中的健康策略配置如下,它提供两个选填参数:probeInterval 表示健康检查间隔,默认是30秒;probeTimeout 表示健康检查超时时间,默认是10秒。

  1. ...
  2. policies:
  3. - name: health-policy-demo
  4. type: health
  5. properties:
  6. probeInterval: 5
  7. probeTimeout: 10
  8. ...

关于如何定义组件的健康检查规则,请参考 Status Write Back.

最后我们可以从应用状态中观测应用的健康状态。

  1. ...
  2. services:
  3. - healthy: true
  4. message: 'Ready:1/1 '
  5. name: my-server
  6. scopes:
  7. - apiVersion: core.oam.dev/v1alpha2
  8. kind: HealthScope
  9. name: health-policy-demo
  10. namespace: default
  11. uid: 1d54b5a0-d951-4f20-9541-c2d76c412a94
  12. traits:
  13. - healthy: true
  14. message: |
  15. No loadBalancer found, visiting by using 'vela port-forward app-healthscope-unhealthy'
  16. type: ingress
  17. workloadDefinition:
  18. apiVersion: apps/v1
  19. kind: Deployment
  20. - healthy: false
  21. message: 'Ready:0/1 '
  22. name: my-server-unhealthy
  23. scopes:
  24. - apiVersion: core.oam.dev/v1alpha2
  25. kind: HealthScope
  26. name: health-policy-demo
  27. namespace: default
  28. uid: 1d54b5a0-d951-4f20-9541-c2d76c412a94
  29. workloadDefinition:
  30. apiVersion: apps/v1
  31. kind: Deployment
  32. status: running
  33. ...

参数说明

名称描述类型是否必须默认值
probeInterval健康检查间隔时间(单位/秒)int30
probeTimeout健康检查超时时间 (单位/秒)int10