我们使用类似的模式,我们有 30 多个微服务。
我们有一个用于基本图表的 Github 存储库。
基本微服务图表有各种 kubernetes 模板(如 HPA、ConfigMap、Secrets、Deployment、Service、Ingress 等),每个模板都有启用或禁用的选项。
注意 -基本图表甚至可以包含其他图表
例如。此基本图表具有 nginx-ingress 图表的依赖关系:
apiVersion: v2
name: base-microservice
description: A base helm chart for deploying a microservice in Kubernetes
type: application
version: 0.1.6
appVersion: 1
dependencies:
- name: nginx-ingress
version: "~1.39.1"
repository: "alias:stable"
condition: nginx-ingress.enabled
以下是 secrets.yaml 模板的示例模板:
{{- if .Values.secrets.enabled -}}
apiVersion: v1
kind: Secret
metadata:
name: {{ include "base-microservice.fullname" . }}
type: Opaque
data:
{{- toYaml .Values.secrets.data | nindent 2}}
{{- end}}
现在,当在此基本图表存储库中发生提交时,作为 CI 流程的一部分(以及其他事情),我们会这样做
- 检查图表存储库中是否已存在 Helm 索引
- 如果存在,则下载现有索引并将当前生成的索引与现有索引合并 -> helm repo index --merge oldindex/index.yaml 。
- 如果它不存在,那么我们创建新的 Helm 索引 ->( helm repo index . ) 然后将归档的图表和索引 yaml 上传到我们的图表存储库。
现在在我们的每个微服务中,我们都有一个图表目录,其中我们只有 2 个文件:
- 图表.yaml
- 值.yaml
示例微服务的目录结构:

此微服务 A 的 Chart.yaml 如下所示:
apiVersion: v2
name: my-service-A
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: 1
dependencies:
- name: base-microservice
version: "0.1.6"
repository: "alias:azure"
此微服务 A 的values.yaml具有需要为基本微服务值覆盖的值。
例如。
base-microservice:
nameOverride: my-service-A
image:
repository: myDockerRepo/my-service-A
resources:
limits:
cpu: 1000m
memory: 1024Mi
requests:
cpu: 300m
memory: 500Mi
probe:
initialDelaySeconds: 120
nginx-ingress:
enabled: true
ingress:
enabled: true
现在,在进行此微服务的持续部署时,我们有以下步骤(以及其他步骤):
- 获取 helm 依赖项(helm 依赖项更新 ./charts/my-service-A)
- 将我的版本部署到 kubernetes ( helm upgrade --install my-service-a ./charts/my-service-A )