Мы используем аналогичный шаблон, где у нас более 30 микросервисов.
У нас есть репозиторий Github для базовых диаграмм.
Базовый -microservice chart содержит всевозможные шаблоны кубернетов (например, HPA, ConfigMap, Secrets, Deployment, Service, Ingress и т. д. c), каждый из которых может быть включен или отключен.
Примечание- Базовая диаграмма может даже содержать другие диаграммы
например. Эта базовая диаграмма зависит от 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 в репозитории диаграмм
- Если существует, загрузите существующий index и объединить текущий сгенерированный индекс с существующим -> helm repo index --merge oldindex / index.yaml.
- Если он не существует, мы создаем новый индекс Helm -> ( helm repo index. ) Затем загрузите заархивированные диаграммы и индексируйте yaml в наш репозиторий диаграмм.
Теперь в каждом из наших микросервисов у нас есть каталог диаграмм , внутри которого у нас всего 2 файла:
- Chart.yaml
- values.yaml
Структура каталогов примерного микросервиса:
структура каталога
Chart.yaml для этого микросервиса A выглядит так:
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"
И values.yaml для этого микросервиса A имеет те значения, которые необходимо переопределить для значения base-microservice .
, например,
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
Теперь при непрерывном развертывании этого микросервиса у нас есть следующие шаги (среди прочего):
- Получить зависимости от руля ( обновление зависимости от руля ./charts/my-service-A)
- Развернуть мой выпуск в kubernetes ( обновление руля --install my-service- a ./charts/my-service-A)