Skip to content
Menu
msandor honlapja
  • Bemutatkozás
msandor honlapja

ArgoCD

Posted on 2025.09.07.2025.09.07.

Mi az az ArgoCD?

Az ArgoCD egy deklaratív, GitOps folyamatos kézbesítési eszköz Kuberneteshez.

Főbb jellemzői:

  • Alkalmazások automatizált telepítése megadott célkörnyezetekbe
  • Több konfigurációkezelő/sablonozó eszköz támogatása (Kustomize, Helm, Jsonnet, plain-YAML)
  • Több klaszterre való felügyelet és telepítés lehetősége
  • SSO integráció (OIDC, OAuth2, LDAP, SAML 2.0, GitHub, GitLab, Microsoft, LinkedIn)
  • Több bérlős és RBAC szabályzatok engedélyezéshez
  • Visszagörgetés/bárhová visszagörgetés bármely, a Git repositoryban véglegesített alkalmazáskonfigurációra
  • Az alkalmazás erőforrásainak állapotelemzése
  • Automatizált konfigurációs eltérés észlelése és vizualizáció
  • Az alkalmazások automatikus vagy manuális szinkronizálása a kívánt állapotba
  • Webes felhasználói felület, amely valós idejű áttekintést nyújt az alkalmazás aktivitásáról
  • CLI az automatizáláshoz és a CI integrációhoz
  • Webhook integráció (GitHub, BitBucket, GitLab)
  • Hozzáférési tokenek az automatizáláshoz
  • PreSync, Sync és PostSync hookok az összetett alkalmazásbevezetések támogatásához (pl. blue/green és canary frissítések)
  • Alkalmazásesemények és API-hívások auditnaplói
  • Prométheusz metrikák
  • Paraméter-felülbírálások a Gitben a helm paraméterek felülbírálásához

Kölcsönvettem egy fotót a honlapjukról:

Gitben tárolod a manifesteket, amiket eddig kézzel telepítettél fel a kubectl apply -f deployment.yaml paranccsal. Az ArgoCD-vel kezelt appok ugyanúgy fognak futni a fürtödön, csak a saját, webes felületén át (is) tudod őket kezelni. Aki szédül a parancssortól, azok szeretni fogják 🙂

Hogyan kell telepíteni a Kubernetes fürtbe?

Mondanom se kell, ezt azon a gépen kell kiadni, ahonnan menedzseled a K8s fürtöd:

Copy CodeCopiedUse a different Browser
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Várj kb fél percet, majd csekkold le a podokat:

Copy CodeCopiedUse a different Browser
$ kubectl get po -n argocd
NAME                                               READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                    1/1     Running   0          51s
argocd-applicationset-controller-96bc979c9-8jgvf   1/1     Running   0          52s
argocd-dex-server-6f9968cfbd-nccpb                 1/1     Running   0          52s
argocd-notifications-controller-69bf9cfb4b-ssknx   1/1     Running   0          52s
argocd-redis-f7b98dd44-hnplv                       1/1     Running   0          51s
argocd-repo-server-b44c54b96-ztmpf                 1/1     Running   0          51s
argocd-server-6d99648bc-sfr4h                      1/1     Running   0          51s

Bizonyos funkciók miatt azt javaslom, hogy telepítsd fel az argocd cli-t, ezen a weboldalon többféle lehetőséget is felsorolnak. Én pl ezzel két paranccsal szoktam a gyári jelszót egyedire cserélni:

Copy CodeCopiedUse a different Browser
argocd login --insecure 172.18.0.2:30444 --username admin --password $(argocd admin initial-password -n argocd | head -n 1)
argocd account update-password --current-password $(argocd admin initial-password -n argocd | head -n 1)
  1. bejelentkezik az ArgoCD-be (kiolvassa a gyári jelszót)
  2. majd megkér, hogy adj meg új jelszót (kétszer)

Feltehetően nálad más IP cím és port alatt lesz elérhető az ArgoCD, ezt módosítsd!

Nálam az IP cím adott volt, a portot pedig ezzel a kis yaml fájllal állítottam be, pontosabban elérhetővé tettem:

Copy CodeCopiedUse a different Browser
apiVersion: v1
kind: Service
metadata:
  name: argocd-server-external
  namespace: argocd
  labels:
    k8s-app: argocd-server
spec:
  type: NodePort
  ports:
  - targetPort: 8080
    port: 8080
    nodePort: 30444
    name: https
  selector:
    app.kubernetes.io/name: argocd-server

Így tudod a fenti yaml fájlt betölteni a fürtbe:

Copy CodeCopiedUse a different Browser
kubectl apply -f argocd-service.yml

Amennyiben Te is ezzel a névvel mentetted el 🙂

Fut az ArgoCD, van CLI-m, hogy érem el a webes felületét?

Nálam a fentebb is látott https://172.18.0.2:30444/ címen:

Belépés után mondhatni, kicsit üres:

Mielőtt feltelepítjük az 1. appunkat, meg kell említenem egy apróságot: az ArgoCD-nek hozzá kell férnie a git repódhoz. Ha ez jelszóval védett, akkor szükséged lesz egy argocd-secret.yaml fájlra:

Copy CodeCopiedUse a different Browser
apiVersion: v1
kind: Secret
metadata:
  name: privat-repo-creds
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repo-creds
stringData:
  type: git
  url: http://192.168.5.213:3000/msandor/argocd
  username: msandor
  password: TOKEN-vagy-JELSZO

Az url/username/password értékeit állítsd be a saját környezetednek megfelelően!

Javaslom a token létrehozását, elég csak a repóhoz olvasási jogot adni:

Így kell a fürtbe tölteni:

Copy CodeCopiedUse a different Browser
kubectl apply -f argocd-secret.yaml

Ha sikerült, akkor az ArgoCD webfelületén a Settings -> Repositories menüpont alatt fogod megtalálni:

Telepítsünk fel egy appot!

Az előző cikkben készítettünk egy fapados apache konténert. Vegyük elő a gitea szerverünket, és készítsünk egy új repót argocd névvel. Benne hozzunk létre egy apache-demo nevű mappát. Abban pedig egy deployment.yaml nevű fájlt az alábbi tartalommal:

Copy CodeCopiedUse a different Browser
apiVersion: apps/v1
kind: Deployment
metadata:
  name: apache-demo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apache-demo
  template:
    metadata:
      labels:
        app: apache-demo
    spec:
      containers:
      - name: apache-demo
        image: 192.168.5.213:5005/msandor/apache-demo:latest
        ports:
        - containerPort: 8080
          protocol: TCP
      restartPolicy: Always

---
apiVersion: v1
kind: Service
metadata:
  name: apache-demo
  namespace: default
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30280
      name: http
  selector:
    app: apache-demo

Ezt a kódot egy régebbi cikkemből vettem kölcsön, amit ebben a git repóban tároltam el. Az egyszerűség kedvéért most istio nélkül, egy NodePorton keresztül fogjuk elérni. Minden „felesleget” töröltem belőle. Valamint a giteás cikkekhez létrehozott docker registry-t állítottam be hozzá (192.168.5.213:5005).

Fontos tudnivaló a docker registry-ről! Erősen ajánlom, hogy https mögé tedd, mert a Kubernetes nem fog letölteni IP:PORT/konténer:tag formátumban megadott registryből. Ahogy a dokcer-nél is fel kellett venni a kivétel listára, úgy a K8s-t is hekkelni kell miatta. Épp emiatt tisztább és szárazabb érzés, ha egy már létező domain név mögé teszed a registry-d (erről fogok írni egy külön cikket).

Szóval van egy zárt git repó (argocd néven), amit csak jelszóval vagy tokennel lehet elérni, benne az apache-demo-hoz tartozó manifest fájllal:

Ha kézzel betöltjük a K8s-be a kubectl apply -f deployment.yaml paranccsal, akkor szépen el fogjuk érni a megadott porton:

Sajnos (vagy szerencsére) erről az ArgoCD nem fog tudni, mivel nem Ő telepítette. Állítsuk le: kubectl delete -f deployment.yaml

Az 1. appunk telepítése ArgoCD GUI-n keresztül

Az Applications menüben felül van egy + gomb, vagy alul egy CREATE APPLICATION feliratos gomb:

Mindegy, hogy melyiket választod 😀

Kis magyarázat:

  1. adj nevet a gyereknek
  2. tetszőleges
  3. manuális vagy automata szinkronizálás a git repó és a K8s fürt között
  4. a git repód elérési útja
  5. a kérdéses app mappájának a neve
  6. hová telepítse (ez annak a fürtnek a neve, ahol az ArgoCD is fut)
  7. névtér

Kattints a bal felső CREATE gombra. Ha valamit elrontottál, kapsz egy szép hibaüzenetet. Akik jól dolgoztak, ezt fogják látni:

  1. sárga a doboz, pontosabban nincs szinkronban, nem is fut az app, ez a kézi (manual) módszer lényege
  2. az app futtatásához kattintsunk a SYNC gombra
  1. meg kell erősítenünk, megint kattintsunk a SYNCRONYZE gombra
  2. alul mutatja, milyen erőforrásokat fog betölteni

Hiba próbáltam átverni, hogy egy fájlba tettem 😀

Előbb bekékül a dobozunk (ekkor tölti le a gitből a yaml fájlt), majd normális esetben be fog zöldülni:

Kattintsunk a dobozra, kapunk egy szép ábrát:

Minden kis dobozka kattintható, további infókat mutatnak. Ellenőrizzétek böngészőből az oldalt, a korábbi linken lesz elérhető.

Alkalmazás törlése: a főmenüben állva a dobozka alján kattintsunk az X gombra:

Meg kell erősíteni, ehhez be kell írni az app nevét, majd OK:

Az 1. appunk telepítése ArgoCD CLI-n keresztül

Nekem ez a kedvencem 🙂 Jóval gyorsabb, csak egy parancsot kell kiadni:

Copy CodeCopiedUse a different Browser
argocd app create apache-demo --repo http://192.168.5.213:3000/msandor/argocd --path apache-demo --dest-server https://kubernetes.default.svc --dest-namespace default --upsert --sync-policy automated

Itt most szándékosan az automata módot választottam!

Ha belekattintasz a dobozkába, egy különbség lesz a korábbi állapothoz képest:

Nincs semmi meglepetés, a szinkronizálás módja a megfejtés 😉

Végezzünk el egy tesztet. Módosítsunk bármit a git repóban, egészen pontosan az apache-demo/deployment.yaml fájlban. Szét fogom bontani két részre a fájlt, a service szakaszt külön fájlba fogom tenni.

Nemsokkal a git push után nézzünk rá az appunkra (tudtommal max 3 percenként néz bele a git repóba):

Első számú tapasztalat: szinkronizált a git repóval, lásd komment mezők.

Második számú tapasztalat: nincs új dobozunk, hiszen tartalmilag nem változott a fájl, csak kétfelé bontottam.

Most módosítani fogom a konténer verzióját , tolok egy git push-t, és megvárom, amíg az ArgoCD észreveszi, és frissíti a konfigot a K8s-ben is:

Copy CodeCopiedUse a different Browser
$ git diff
diff --git a/apache-demo/deployment.yaml b/apache-demo/deployment.yaml
index a87ea11..6a12700 100644
--- a/apache-demo/deployment.yaml
+++ b/apache-demo/deployment.yaml
@@ -15,7 +15,7 @@ spec:
     spec:
       containers:
       - name: apache-demo
-        image: 192.168.5.213:5005/msandor/apache-demo:latest
+        image: 192.168.5.213:5005/msandor/apache-demo:2.4.65.27914d0ffd
         ports:
         - containerPort: 8080
           protocol: TCP


$ git commit -a -m "verzió fixálása"
[main d5d7382] verzió fixálása
 1 file changed, 1 insertion(+), 1 deletion(-)


$ git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 430 bytes | 430.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To http://192.168.5.213:3000/msandor/argocd.git
   95508c5..d5d7382  main -> main

Végre van egy kis tűzijáték:

  1. 20 perce jött létre az 1. replicaset, immár nem tartozik hozzá aktív pod
  2. pár másodperce jött létre az 2. replicaset, ez futtatja az aktív podunkat

Alkalmazás törlése:

Copy CodeCopiedUse a different Browser
argocd app delete apache-demo -y

Ez megerősítés nélkül törölni fogja az appot mind a K8s-ből, mind az ArgoCD felületéről!

Aki nem biztos magában, az hagyja el a -y kapcsolót. Ilyenkor megerősítést fog kérni, van lehetőséged átgondolni, hogy a megfelelő appot szeretnéd megsemmisíteni.

Most nézzünk meg egy appot, amit Helm-el fogunk telepíteni az ArgoCD-vel

A kiindulási alap az apache-demo yaml fájljai lesznek. Átkereszteltem apache-demo2-re.

Picit több fájlra lesz szükségünk a helm charthoz, a git repó tartalma:

Copy CodeCopiedUse a different Browser
$ tree
.
├── apache-demo
│   ├── deployment.yaml
│   └── service.yaml
├── apache-demo2
│   ├── Chart.yaml
│   ├── templates
│   │   ├── deployment.yaml
│   │   └── service.yaml
│   └── values.yaml
└── README.md

A Chart.yaml fájl tartalma:

Copy CodeCopiedUse a different Browser
apiVersion: v2
name: apache-demo2
version: 1.0
appVersion: 1.0
description: apache-demo
type: application
keywords:
- apache
- kubernetes
- kind
maintainers:
- email: git@msandor.hu
  name: msandor
sources:
- http://192.168.5.213:3000/msandor/argocd

A values.yaml fájl tartalma:

Copy CodeCopiedUse a different Browser
image:
  repository: 192.168.5.213:5005/msandor/apache-demo
  tag: latest

service:
  nodeport: 30281

A templates/deployment.yaml fájl tartalma:

Copy CodeCopiedUse a different Browser
apiVersion: apps/v1
kind: Deployment
metadata:
  name: apache-demo2
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apache-demo2
  template:
    metadata:
      labels:
        app: apache-demo2
    spec:
      containers:
      - name: apache-demo2
        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
        ports:
        - containerPort: 8080
          protocol: TCP
      restartPolicy: Always

A templates/service.yaml fájl tartalma:

Copy CodeCopiedUse a different Browser
apiVersion: v1
kind: Service
metadata:
  name: apache-demo2
  namespace: default
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: {{ .Values.service.nodeport }}
      name: http
  selector:
    app: apache-demo2

A Helm-ről is szeretnék külön cikket írni, így itt most nem megyek bele a részletekbe, éles szeműek észrevehették, hogy ugyanaz a két manifest fájlunk, csak kiszerveztem változóba a konténert és a portot.

Most ezt is adjuk hozzá az ArgoCD-hez parancssorból:

Copy CodeCopiedUse a different Browser
argocd app create apache-demo2 --repo http://192.168.5.213:3000/msandor/argocd --path apache-demo2 --dest-server https://kubernetes.default.svc --dest-namespace default --upsert --sync-policy automated --values values.yaml

Egyetlen különbség van a korábbi parancshoz képest: –values values.yaml, természetesen az app neve és a mappa neve is változott, mivel az appok neveinek egyedinek kell lennie egy névtéren belül:

Ezt is teszteljük le, itt is módosítani fogom a tag-et:

Copy CodeCopiedUse a different Browser
$ git diff
diff --git a/apache-demo2/values.yaml b/apache-demo2/values.yaml
index a1b3841..e28cbea 100644
--- a/apache-demo2/values.yaml
+++ b/apache-demo2/values.yaml
@@ -1,6 +1,6 @@
 image:
   repository: 192.168.5.213:5005/msandor/apache-demo
-  tag: latest
+  tag: 2.4.65.27914d0ffd
 
 service:
   nodeport: 30281


$ git commit -a -m "latest -> 2.4.65.27914d0ffd"
[main a2dd8f0] latest -> 2.4.65.27914d0ffd
 1 file changed, 1 insertion(+), 1 deletion(-)


$ git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 422 bytes | 422.00 KiB/s, done.
Total 4 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To http://192.168.5.213:3000/msandor/argocd.git
   ebdbd71..a2dd8f0  main -> main

Kis idő múlva frissül az appunk, amit az ArgoCD felületén meg is tekinthetünk:

Ugyanaz a látvány fogad minket, függetlenül attól, hogy mezei yaml fájlokat használunk, vagy helm diagramba csomagolt fájlokat…

Végszó

Elértük azt, hogy gitből telepítjük az appokat, ráadásul, ha frissül a gitben a manifest, autosync mód esetén 3 percen belül kikerül a K8s fürtre is a módosítás. Manuál módban csak rajtunk múlik, hogy mikor élesítjük a változásokat.

Az ArgoCD-ről is órákig lehetne még beszélni, tudom, hogy csak a felszínt kapargatjuk, de ezt is két napig írtam 🙂

Vélemény, hozzászólás? Válasz megszakítása

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Kategóriák

  • ansible
  • ArgoCD
  • docker
  • e-mail
  • git
  • hardware
  • hibakeresés
  • kubernetes
  • ldap
  • Linux
  • MariaDB
  • OpenWrt
  • Proxmox
  • security
  • SNMP
  • Synology
  • Terraform/OpenTofu
  • teszt
  • Unifi
  • UPS
  • vagrant
  • Virtualbox
  • zabbix
©2025 msandor honlapja | WordPress Theme by Superb WordPress Themes

Adatkezelési tájékoztató || Hibát talált az oldalon? Írja meg nekem. || Impresszum || Powered by WordPress

Oldalunk cookie-kat ("sütiket") használ. Ezen fájlok információkat szolgáltatnak számunkra a felhasználó oldallátogatási szokásairól a legjobb felhasználói élmény nyújtása érdekében, de nem tárolnak személyes információkat, adatokat. Szolgáltatásaink igénybe vételével Ön beleegyezik a cookie-k használatába. Kérjük, hogy kattintson az Elfogadom gombra, amennyiben böngészni szeretné weboldalunkat.ElfogadomAdatvédelmi irányelvek