暂停和继续

本节将介绍如何在 KubeVela 中暂停和继续工作流。

暂停工作流

在 KubeVela 中,你可以选择使用 vela 命令来手动暂停工作流的执行,也可以使用一个内置的特殊步骤类型 suspend 使工作流自动进入暂停状态。

手动暂停

如果你有一个正在运行的应用,并且你希望暂停它的执行,你可以使用 vela workflow suspend 来暂停该工作流。

  1. $ vela workflow suspend my-app
  2. Successfully suspend workflow: my-app

使用暂停步骤

部署如下例子:

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: suspend
  5. namespace: default
  6. spec:
  7. components:
  8. - name: comp1
  9. type: webservice
  10. properties:
  11. image: crccheck/hello-world
  12. port: 8000
  13. - name: comp2
  14. type: webservice
  15. properties:
  16. image: crccheck/hello-world
  17. port: 8000
  18. workflow:
  19. steps:
  20. - name: apply1
  21. type: apply-component
  22. properties:
  23. component: comp1
  24. - name: suspend
  25. type: suspend
  26. - name: apply2
  27. type: apply-component
  28. properties:
  29. component: comp2

使用 vela status 命令查看应用状态:

  1. $ vela status suspend
  2. About:
  3. Name: suspend
  4. Namespace: default
  5. Created at: 2022-06-27 17:36:58 +0800 CST
  6. Status: workflowSuspending
  7. Workflow:
  8. mode: StepByStep
  9. finished: false
  10. Suspend: true
  11. Terminated: false
  12. Steps
  13. - id:yj9h29uv6v
  14. name:apply1
  15. type:apply-component
  16. phase:succeeded
  17. message:
  18. - id:xvmda4he5e
  19. name:suspend
  20. type:suspend
  21. phase:running
  22. message:
  23. Services:
  24. - Name: comp1
  25. Cluster: local Namespace: default
  26. Type: webservice
  27. Healthy Ready:1/1
  28. No trait applied

可以看到,当第一个步骤执行完成之后,会开始执行 suspend 步骤。而这个步骤会让工作流进入暂停状态。

继续工作流

手动继续工作流

当工作流进入暂停状态后,你可以使用 vela workflow resume 命令来手动继续工作流。workflow resume 命令会把工作流从暂停状态恢复到执行状态。

以上面处于暂停状态的应用为例:

  1. $ vela workflow resume suspend
  2. Successfully resume workflow: suspend

成功继续工作流后,查看应用的状态:

  1. $ vela status suspend
  2. About:
  3. Name: suspend
  4. Namespace: default
  5. Created at: 2022-06-27 17:36:58 +0800 CST
  6. Status: running
  7. Workflow:
  8. mode: StepByStep
  9. finished: true
  10. Suspend: false
  11. Terminated: false
  12. Steps
  13. - id:yj9h29uv6v
  14. name:apply1
  15. type:apply-component
  16. phase:succeeded
  17. message:
  18. - id:xvmda4he5e
  19. name:suspend
  20. type:suspend
  21. phase:succeeded
  22. message:
  23. - id:66jonaxjef
  24. name:apply2
  25. type:apply-component
  26. phase:succeeded
  27. message:
  28. Services:
  29. - Name: comp2
  30. Cluster: local Namespace: default
  31. Type: webservice
  32. Healthy Ready:1/1
  33. No trait applied
  34. - Name: comp1
  35. Cluster: local Namespace: default
  36. Type: webservice
  37. Healthy Ready:1/1
  38. No trait applied

可以看到,工作流已经继续执行完毕。

手动终止工作流

当工作流处于暂停状态时,如果你想终止它,你可以使用 vela workflow terminate 命令来终止工作流。

  1. $ vela workflow terminate my-app
  2. Successfully terminate workflow: my-app

自动继续工作流

如果你希望经过了一段时间后,工作流能够自动被继续。那么,你可以在 suspend 步骤中加上 duration 参数。当 duration 时间超过后,工作流将自动继续执行。

部署如下例子:

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: auto-resume
  5. namespace: default
  6. spec:
  7. components:
  8. - name: comp1
  9. type: webservice
  10. properties:
  11. image: crccheck/hello-world
  12. port: 8000
  13. - name: comp2
  14. type: webservice
  15. properties:
  16. image: crccheck/hello-world
  17. port: 8000
  18. workflow:
  19. steps:
  20. - name: apply1
  21. type: apply-component
  22. properties:
  23. component: comp1
  24. - name: suspend
  25. type: suspend
  26. properties:
  27. duration: 5s
  28. - name: apply2
  29. type: apply-component
  30. properties:
  31. component: comp2

查看应用状态:

  1. $ vela status auto-resume
  2. About:
  3. Name: auto-resume
  4. Namespace: default
  5. Created at: 2022-06-27 17:57:35 +0800 CST
  6. Status: running
  7. Workflow:
  8. mode: StepByStep
  9. finished: true
  10. Suspend: false
  11. Terminated: false
  12. Steps
  13. - id:q5jhm6mgwv
  14. name:apply1
  15. type:apply-component
  16. phase:succeeded
  17. message:
  18. - id:3xgfcp3cuj
  19. name:suspend
  20. type:suspend
  21. phase:succeeded
  22. message:
  23. - id:zjux8ud876
  24. name:apply2
  25. type:apply-component
  26. phase:succeeded
  27. message:
  28. Services:
  29. - Name: comp2
  30. Cluster: local Namespace: default
  31. Type: webservice
  32. Healthy Ready:1/1
  33. No trait applied
  34. - Name: comp1
  35. Cluster: local Namespace: default
  36. Type: webservice
  37. Healthy Ready:1/1
  38. No trait applied

可以看到,suspend 步骤在五秒后自动执行成功,继续了工作流。