Version: v1.2

多环境部署

本章节会介绍,如何使用环境差异化配置(env-binding)为应用提供差异化配置和环境调度策略。

背景

在日常开发中会经常将应用部署计划(Application)部署到不同的环境。例如,在开发环境中对应用部署计划进行调试,在生产环境中部署应用部署计划对外提供服务。针对不同的环境,应用部署计划需要有差异化的配置。

如何使用

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: example-app
  5. namespace: demo
  6. spec:
  7. components:
  8. - name: hello-world-server
  9. type: webservice
  10. properties:
  11. image: crccheck/hello-world
  12. port: 8000
  13. traits:
  14. - type: scaler
  15. properties:
  16. replicas: 1
  17. - name: data-worker
  18. type: worker
  19. properties:
  20. image: busybox
  21. cmd:
  22. - sleep
  23. - '1000000'
  24. policies:
  25. - name: example-multi-env-policy
  26. type: env-binding
  27. properties:
  28. envs:
  29. - name: test
  30. placement: # 选择要部署的目标命名空间
  31. namespaceSelector:
  32. name: test
  33. selector: # 选择要使用的组件
  34. components:
  35. - data-worker
  36. - name: staging
  37. placement: # 选择要部署的目标集群
  38. clusterSelector:
  39. name: cluster-staging
  40. - name: prod
  41. placement: # 选择要部署的目标集群及命名空间
  42. clusterSelector:
  43. name: cluster-prod
  44. namespaceSelector:
  45. name: prod
  46. patch: # 差异化配置该环境中的组件
  47. components:
  48. - name: hello-world-server
  49. type: webservice
  50. traits:
  51. - type: scaler
  52. properties:
  53. replicas: 3
  54. workflow:
  55. steps:
  56. # 部署 测试 环境
  57. - name: deploy-test
  58. type: deploy2env
  59. properties:
  60. policy: example-multi-env-policy
  61. env: test
  62. # 部署 预发 环境
  63. - name: deploy-staging
  64. type: deploy2env
  65. properties:
  66. policy: example-multi-env-policy
  67. env: staging
  68. # 人工确认
  69. - name: manual-approval
  70. type: suspend
  71. # 部署 生产 环境
  72. - name: deploy-prod
  73. type: deploy2env
  74. properties:
  75. policy: example-multi-env-policy
  76. env: prod

创建上述应用部署计划之前需要当前集群、预发集群 (cluster-staging) 中均有名为 demo 的命名空间,同时需要在当前集群中创建 test 命名空间、在生产 (cluster-prod) 集群中创建 prod 命名空间。你可以通过执行 kubectl create ns <namespace> 来创建它们。

  1. kubectl apply -f app.yaml

应用部署计划创建之后,在 demo 命名空间下会创建一个配置化的应用部署计划。

  1. $ kubectl get app -n demo
  2. NAME COMPONENT TYPE PHASE HEALTHY STATUS AGE
  3. example-app hello-world-server webservice running 25s

如果你想使用 env-binding 在多集群环境下创建应用部署计划,请参考 应用多集群部署

参数说明

环境差异化配置应用策略的所有配置项

名称描述类型是否必须默认值
envs环境配置env 数组

env 的属性

名称描述类型是否必须默认值
name环境名称string
patch对应用部署计划中的组件差异化配置patch 结构体
placement资源调度策略,选择将配置化的资源部署到指定的集群或命名空间上placement 结构体
selector为应用部署计划选择需要使用的组件,默认为空代表使用所有组件selector 结构体

patch 的属性

名称描述类型是否必须默认值
components需要差异化配置的组件component 数组

placement 的属性

名称描述类型是否必须默认值
clusterSelector集群选择器,通过名称筛选集群clusterSelector 结构体
namespaceSelector命名空间选择器,通过名称筛选集群namespaceSelector 结构体

selector 的属性

名称描述类型是否必须默认值
components需要使用的组件名称列表string 数组

clusterSelector 的属性

名称描述类型是否必须默认值
name集群名称string

namespaceSelector 的属性

NameDescTypeRequiredDefault Value
name命名空间名称string

你需要升级至 KubeVela v1.1.5+ 来启用 namespaceSelector.