前置条件

此篇文档是以已经掌握如何编写Kubernetes 部署文件为前提。

如需进行学习Kubernetes 部署文件如何编写请参考官方文档

本篇示例代码皆引用自如下项目:

参考示例

代码参考示例请移步 此篇

配置解析

deployment.yaml

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: {{ .Release.Name }}
  5. # 实例名称
  6. labels:
  7. {{ include "service.labels.standard" . | indent 4 }}
  8. # 平台管理所需标签
  9. {{ include "service.logging.deployment.label" . | indent 4 }}
  10. # 日志管理所需标签
  11. name: {{ .Release.Name }}
  12. spec:
  13. replicas: {{ .Values.replicaCount }}
  14. # 副本数
  15. template:
  16. metadata:
  17. annotations:
  18. {{ include "service.monitoring.pod.annotations" . | indent 8 }}
  19. # 监控管理所需标签
  20. labels:
  21. {{ include "service.labels.standard" . | indent 8 }}
  22. spec:
  23. containers:
  24. - name: {{ .Release.Name }}
  25. image: "{{ .Values.image.repository }}:{{ .Values.image.version }}"
  26. # 镜像
  27. env:
  28. - name: FOOBAR
  29. value: {{ .Chart.Version | quote }}
  30. # 设置一个会随更新改变的变量,若pod无更改,更新的时候就不会进行替换。
  31. ports:
  32. - containerPort: 80
  33. name: http

部署文件的渲染模板,我们下文将定义一些变量,helm执行时会将变量渲染进模板文件中。

_helpers.tpl

这个文件我们用来进行标签模板的定义,以便在上文提到的位置进行标签渲染。

标签总共分为三个部分: 平台、微服务、监控。

平台标签

deployment 级:
  1. {{- define "service.labels.standard" -}}
  2. choerodon.io/release: {{ .Release.Name | quote }}
  3. {{- end -}}

平台管理实例需要的实例ID。

微服务标签

pod 级:
  1. {{- define "service.microservice.labels" -}}
  2. choerodon.io/version: {{ .Chart.Version | quote }}
  3. choerodon.io/service: {{ .Chart.Name | quote }}
  4. choerodon.io/metrics-port: {{ .Values.deployment.managementPort | quote }}
  5. {{- end -}}

微服务注册中心进行识别时所需要的版本号、项目名称、管理端口。

监控和日志标签

deployment 级:
  1. {{- define "service.logging.deployment.label" -}}
  2. choerodon.io/logs-parser: {{ .Values.logs.parser | quote }}
  3. {{- end -}}

日志管理所需要的应用标签。该标签指定应用程序的日志格式,内置格式有nginxspring-bootdocker如果没有合适您的应用的格式请使用docker,如果不需要收集日志请移除此段代码,并模板文件关于service.logging.deployment.label的引用。

pod 级:
  1. {{- define "service.monitoring.pod.annotations" -}}
  2. choerodon.io/metrics-group: {{ .Values.metrics.group | quote }}
  3. choerodon.io/metrics-path: {{ .Values.metrics.path | quote }}
  4. {{- end -}}

性能指标管理所需要的应用类别以及监控指标路径。其中metrics-group将应用按照某个关键字分组,并在grafana配置实现分组展示。metrics-path指定收集应用的指标数据路径。如果不需要监控请移除此段代码

values.yaml

这个文件中的键值对,即为我们上文中所引用的变量。

将所以有变量集中在一个文件中,方便部署的时候进行归档以及灵活替换。

同时,helm命令支持使用 —set FOO_BAR=FOOBAR 参数对values 文件中的变量进行赋值,可以进一步简化部署流程。

  1. replicaCount: 1
  2. image:
  3. repository: registry.cn-hangzhou.aliyuncs.com/choerodon-tools/nginx
  4. version: 1.13.5-alpine
  5. metrics:
  6. path: /prometheus
  7. group: nginx
  8. logs:
  9. parser: nginx