Мы используем аналогичный шаблон, где у нас более 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 . ). Затем загружаем архивные диаграммы и индекс yaml в наш репозиторий диаграмм.
Теперь в каждом нашем микросервисе у нас есть каталог диаграмм , внутри которого у нас всего 2 файла:
- Диаграмма.yaml
- значения.yaml
Структура каталогов примера микросервиса:
![структура каталогов](https://i.stack.imgur.com/uqdaX.png)
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 содержит те значения, которые необходимо переопределить для значений базового микросервиса.
eg.
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)
person
Abhinaba Chakraborty
schedule
11.07.2020