K8s YAML 模板

背景

K8s YAML 模板 - 图1 K8s YAML 模板适用于使用 K8s YAML 部署的项目。支持用户在通用的模板上新建服务,提供更大的可扩展性。

新建模板

可将 K8s 资源的 YAML 配置文件抽象,在项目中新建服务时基于 K8s YAML 模板对服务进行定义。

  • 依次访问资产管理-模板库-K8s YAML 进入到 K8s YAML 模板库的管理页面。点击+按钮 -> 输入模板名字 -> 填写模板内容 -> 保存模板。

创建 K8s YAML 模板

如果模板中有使用自定义变量,可在右侧自定义变量区域配置变量的默认值,详细信息请阅读 变量列表

创建 K8s YAML 模板

变量列表

包括系统内置变量和自定义变量,点击自定义变量下方的键值对、YAML 文件图标可切换变量视图,可修改服务变量的类型及默认值并校验正确性,支持字符串、枚举、布尔、YAML 四种类型。

  • 系统内置变量:包括 $T-Project$$T-Service$,可直接在 K8s YAML 模板中使用。在项目中基于模板新建服务后,二者会自动被替换为对应的项目名称和服务名称。
  • 自定义变量:以 YAML 代码段的形式来声明,通过形如 {{.key}} 或者 Go template 的方式在模板中使用。

提示

  1. 在项目中基于模板新建服务时可修改自定义变量的默认值。
  2. 自定义变量的 key 中不支持中划线。
  3. Go template 的使用请参考 官方文档K8s YAML 模板 - 图4 (opens new window)

除了支持使用常量值,还支持使用 服务配置 中的内置变量来为模板中的自定义变量赋值,比如下图示例中,使用 $Service$cmd 赋值。

K8s YAML 模板变量的高阶用法

使用模板

K8s YAML 项目中新建服务时可选择从模板导入服务,参考使用模板新建服务

查看引用列表

点击 K8s YAML 模板右侧的引用列表,即可查看引用该模板的项目和服务列表。

查看 K8s YAML 模板引用列表

应用到服务

点击应用到服务,即可使用最新的模板内容以及自定义变量更新所有开启了自动同步的服务配置。

提示

  1. 对服务开启自动同步操作参考 使用模板新建服务
  2. 当自定义变量有改动时,对服务配置的更新逻辑参考 更新服务配置

应用到服务

示例

K8s YAML 模板

  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"