服务变量

本文主要介绍 K8s YAML 项目中的服务变量功能。

变量配置

选中服务,点击右侧的变量进入到服务变量配置页面。包括系统内置变量、自定义变量和全局变量。

  • 系统内置变量和自定义变量可在服务 YAML 配置中进行引用
  • 服务的 YAML 配置中,容器名称和镜像信息不可使用内置变量 $Namespace$$EnvName$
  • 支持配置全局变量,新建环境时可按需对默认值做覆盖,实现不同环境的差异化配置

变量

系统内置变量

包括 $Namespace$$Product$$Service$$EnvName$,可直接在 YAML 中进行引用,具体说明如下:

  • $Namespace$:项目创建的环境所在的 K8s 空间名称
  • $Product$:项目名称
  • $Service$:服务名称
  • $EnvName$:创建的环境名称

自定义变量

  • 服务的 YAML 配置文件中形如 {{.Key}} 的内容可以自动解析为自定义变量。
  • 点击自定义变量下方的键值对YAML 文件图标可切换变量视图。
  • 可修改服务变量的类型及默认值并校验正确性,支持字符串、枚举、布尔、YAML 四种类型。

变量

全局变量

点击自定义变量右侧的配置全局变量进行配置。

变量

添加全局变量,默认可选的键来自于所有服务的自定义变量(键名相同的变量视为同一个),也可以输入自定义键名来添加。

变量

变量的使用

新建环境

在新建环境时,可配置服务变量和环境全局变量,对服务配置中的变量默认值做覆盖,实现不同环境的差异化配置。

  1. 需要事先在服务中配置全局变量,新建环境时才可配置环境级别的全局变量
  2. 支持使用系统内置变量来为全局变量和服务变量赋值
  3. 只有和待新建环境服务列表中服务有关联的全局变量才可以在新建环境时指定
  4. 为服务配置变量值,可以自定义,或者一键勾选使用环境的全局变量

新建环境变量渲染

更新环境全局变量

在环境中,点击更新全局变量,可更新对应环境中的全局变量。

  1. 环境的全局变量在当前环境下生效
  2. 修改全局变量的值后,和全局变量有关联的服务将会自动更新,应用最新的变量值。
  3. 支持删除和服务无关联的全局变量
  4. 支持添加新的全局变量,待添加的变量需要先在服务的全局变量中定义

服务变量 - 图6 服务变量 - 图7

更新服务变量

在环境中添加服务或更新服务时,可对服务变量进行修改,支持手动修改或使用环境全局变量。更新服务时,同时可以通过勾选 更新服务配置,选择是否更新当前服务的 YAML 版本。

服务变量 - 图8 服务变量 - 图9

变量示例

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: $T-Service$
  5. labels:
  6. app.kubernetes.io/name: $T-Project$
  7. app.kubernetes.io/instance: $T-Service$
  8. annotations:
  9. {{.annotations}}
  10. spec:
  11. selector:
  12. matchLabels:
  13. app.kubernetes.io/name: $T-Project$
  14. app.kubernetes.io/instance: $T-Service$
  15. replicas: {{.replicas_num}}
  16. template:
  17. metadata:
  18. labels:
  19. app.kubernetes.io/name: $T-Project$
  20. app.kubernetes.io/instance: $T-Service$
  21. spec:
  22. containers:
  23. - name: $T-Service$
  24. image: ccr.ccs.tencentyun.com/koderover-public/$T-Service$:latest
  25. imagePullPolicy: Always
  26. env:
  27. - name: DOWNSTREAM_ADDR
  28. value: "b"
  29. - name: HEADERS
  30. value: "x-request-id"
  31. {{- if .skywalking}}
  32. - name: ENHANCE
  33. value: "true"
  34. {{- end}}
  35. command:
  36. - /workspace/{{.cmd}}
  37. ports:
  38. {{- range .ports_config}}
  39. - protocol: {{ .protocol }}
  40. containerPort: {{.container_port}}
  41. {{- end}}
  42. resources:
  43. limits:
  44. memory: {{.memory_limit}}
  45. cpu: {{.cpu_limit}}

自定义变量

  1. cmd: $Service$
  2. cpu_limit: 50m
  3. memory_limit: 50Mi
  4. replicas_num: 1
  5. skywalking: true
  6. value: value
  7. ports_config:
  8. - protocol: TCP
  9. container_port: 20221
  10. - protocol: UDP
  11. container_port: 21221
  12. annotations: |1-
  13. owner: "John Doe"
  14. team: "DevOps"

最佳实践参考

利用服务的变量能力实现不同环境的差异化配置,最佳实践参考如下: