В этом гайде мы настроили репозитории для управления приложениями по GitOps подходу.
Сейчас самое время продемонстрировать как разворачивать все наши приложения.
В данном примере я возьму стек Prometheus + Grafana, про который также есть гайд ЗДЕСЬ
Собираю единомышленников в телеграм канале. Там же отвечаю на вопросы.
Присоединяйся

Наши репозитории настроены, теперь мы хотим чтобы наши приложения автоматически раскатывались в кубернетес. В этом нам поможет ArgoCD.
ArgoCD нужно описать что это за приложение и откуда его брать, затем он заберет его под свой контроль и будет отслеживать любые изменения в гите, например версии чарта и прочее.
Структура моего Gitlab-репозитория:
1
2
3
4
5
| └── gitops
├── cluster_config ── apps ── app-*.yaml
└── clusters ├── dev ── *-values.yaml
├── stage ── *-values.yaml
└── prod ── *-values.yaml
|
Поехали.
Создаём файл root-app.yaml который будет следить за репозиторием приложений и сам их разворачивать:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: root-app
namespace: argocd
spec:
project: default
source:
repoURL: http://gitlab-webservice-default.gitlab.svc.k8s.domain.local:8181/gitops/cluster_config.git
targetRevision: main
path: apps
destination:
server: https://kubernetes.default.svc
namespace: argocd
syncPolicy:
automated:
prune: true
selfHeal: true
|
Применяем:
1
| kubectl apply -f root-app.yaml
|
Создаём/Переносим свой файл с values.yaml от Prometheus/Grafana в gitlab
Gtilab -> gitops -> cluster_config -> clusters -> prod -> prometheus-values.yaml
Содержимое этого файла не изменялось:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
| crds:
enabled: false
global:
imageRegistry: "harbor.domain.local"
imagePullSecrets:
- name: harbor-pull-secret
prometheusOperator:
image:
registry: harbor.domain.local
repository: monitoring/quay.io/prometheus-operator/prometheus-operator
admissionWebhooks:
patch:
enabled: true
image:
registry: harbor.domain.local
repository: monitoring/ghcr.io/jkroepke/kube-webhook-certgen
prometheusConfigReloader:
image:
registry: harbor.domain.local
repository: monitoring/quay.io/prometheus-operator/prometheus-config-reloader
prometheus:
prometheusSpec:
image:
registry: harbor.domain.local
repository: monitoring/quay.io/prometheus/prometheus
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: longhorn
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
ingress:
enabled: true
ingressClassName: nginx
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
hosts:
- prometheus.k8s.domain.local
paths:
- /
pathType: Prefix
alertmanager:
alertmanagerSpec:
image:
registry: harbor.domain.local
repository: monitoring/quay.io/prometheus/alertmanager
kube-state-metrics:
image:
registry: harbor.domain.local
repository: "monitoring/registry.k8s.io/kube-state-metrics/kube-state-metrics"
prometheus-node-exporter:
image:
registry: harbor.domain.local
repository: "monitoring/quay.io/prometheus/node-exporter"
grafana:
image:
repository: monitoring/docker.io/grafana/grafana
# У меня развернут Ingress, если у тебя нет, то удали это до persistence
ingress:
enabled: true
ingressClassName: nginx
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
hosts:
- grafana.k8s.domain.local
path: /
pathType: Prefix
# У меня развернут Longhorn, если у тебя нет, то измени storage под своё, например local
persistence:
enabled: true
storageClassName: longhorn
size: 5Gi
initChownData:
enabled: true
image:
registry: harbor.domain.local
repository: monitoring/docker.io/library/busybox
sidecar:
image:
registry: harbor.domain.local
repository: monitoring/quay.io/kiwigrid/k8s-sidecar
|
Далее нужно создать файл с приложением, по которому ArgoCD будет его отслеживать:
Gitlab -> gitops -> cluster_config -> apps -> kube-prom-graf.yaml
И содержимое:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: prometheus-grafana
namespace: argocd
spec:
project: default
sources:
- repoURL: oci://harbor.domain.local/helm/kube-prometheus-stack
path: .
targetRevision: 82.1.1
helm:
releaseName: kube-prometheus
valueFiles:
- $values/clusters/prod/prometheus-values.yaml
- repoURL: http://gitlab-webservice-default.gitlab.svc.k8s.domain.local:8181/gitops/cluster_config.git
targetRevision: main
ref: values
destination:
server: https://kubernetes.default.svc
namespace: monitoring
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
|
После коммита данного файла ArgoCD сам его подхватит, также он найдет переменные для этого helm чарта и развернет сервисы.
Теперь все наши приложения, которые будут размещены и описаны в git будут управляться и развёртываться ArgoCD автоматически.