Featured image of post Настраиваем GitOps в ArgoCD

Настраиваем GitOps в ArgoCD

Переводим сервисы под управления ArgoCD

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

Собираю единомышленников в телеграм канале. Там же отвечаю на вопросы.
Присоединяйся Telegram

Наши репозитории настроены, теперь мы хотим чтобы наши приложения автоматически раскатывались в кубернетес. В этом нам поможет 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 автоматически.

Информацию можно использовать в свободном доступе, с указанием ссылки на сайт
Telegram GitHub YouTube