ЁЯУД рдзрдбрд╛ 07 тАФ рдкрд╣рд┐рд▓реЗ Application: рдкреНрд▓реЕрди-рд╡рд╣реАрдЪреЗ рдПрдХ рдкрд╛рди
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 07 ┬╖ рдорд╛рдЧреЗ: lesson-06-install-argocd ┬╖ рдкреБрдвреЗ: lesson-08-sync-policies
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ06, рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд рддреЛ рдХреНрд╖рдг рдЬреЗрд╡реНрд╣рд╛ рд╕рдЧрд│реЗ рдЙрдордЧрддреЗ: рдПрдХ Application resource
рдЬреЗ ArgoCD рдХрдбреВрди рдпрд╛ repo рдЪрд╛ k8s/ folder deploy рдХрд░реВрди рдШреЗрддреЗ тАФ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░ рддреБрдореНрд╣реА
рдкреБрдиреНрд╣рд╛ рдХрдзреАрдЪ app kubectl apply рдХрд░рдд рдирд╛рд╣реА. рдЦрд░реА file:
- argocd/application.yaml тАФ рдкреНрд▓реЕрдирдЪреЗ рдкрд╛рди, рдЬрд╕реЗрдЪреНрдпрд╛ рддрд╕реЗ deploy рдХрд░рддрд╛ рдпреЗрдгрд╛рд░реЗ
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
Robot рдХрд╛рдорд╛рд╡рд░ рдареЗрд╡рд▓реЗрд▓рд╛ рдЖрд╣реЗ рдкрдг рд░рд┐рдХрд╛рдорд╛ рдмрд╕рд▓реЗрд▓рд╛ рдЖрд╣реЗ. рддреБрдореНрд╣реА рддреНрдпрд╛рд▓рд╛ рдкреНрд▓реЕрди-рд╡рд╣реАрдЪреЗ рдПрдХ рдкрд╛рди ЁЯУД рджреЗрддрд╛, рдЬреНрдпрд╛рд╡рд░ рдиреЗрдордХреНрдпрд╛ рддреАрди рдЧреЛрд╖реНрдЯреА рдЖрд╣реЗрдд:
- рдХреЛрдгрддреА рд╡рд╣реА ЁЯУЦ тАФ "рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рддрд▓реА learn-argocd-school рдирд╛рд╡рд╛рдЪреА рд╡рд╣реА"
(git
repoURL). - рдХреЛрдгрддрд╛ рдзрдбрд╛ тАФ "k8s/ рд╣рд╛ рдзрдбрд╛ рд╡рд╛рдЪрд╛,
mainрдЖрд╡реГрддреНрддреА" (pathрдЖрдгрд┐targetRevision). - рдХреЛрдгрддреА рдЦреЛрд▓реА ЁЯЪк тАФ "рдпрд╛ рдЗрдорд╛рд░рддреАрддрд▓рд╛ gitops-school рд╡рд░реНрдЧ рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА
рдЬреБрд│рд╡рд╛" (
destination).
Robot рдкрд╛рди рд╡рд╛рдЪрддреЛ, рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рдд рдЬрд╛рддреЛ, рддреЛ рдзрдбрд╛ рдШреЗрдКрди рдпреЗрддреЛ, рдЦреЛрд▓реАрдд рдЬрд╛рддреЛтАж рдЖрдгрд┐ рддреА рдмрд╛рдВрдзрддреЛ: namespace, deployment, service, pods. рддреБрдореНрд╣реА рдХрд╛рд╣реАрдЪ рд╡рд╛рд╣реВрди рдиреЗрд▓реЗ рдирд╛рд╣реА. ЁЯОТтЭМ
рдЖрдгрд┐ рдЦрд░реА рдЬрд╛рджреВ: рд╣реЗ рдкрд╛рди рдХрдзреАрдЪ рдХрд╛рд▓рдмрд╛рд╣реНрдп рд╣реЛрдд рдирд╛рд╣реА. Robot рджрд░ рдХрд╛рд╣реА рдорд┐рдирд┐рдЯрд╛рдВрдиреА, рдХрд╛рдпрдо, рддреЛ рдзрдбрд╛ рдкреБрдиреНрд╣рд╛ рд╡рд╛рдЪрддреЛ. рдзрдбрд╛ рдмрджрд▓рдгреЗ (git commit) рд╣рд╛рдЪ рдЖрддрд╛ рддреА рдЦреЛрд▓реА рдмрджрд▓рдгреНрдпрд╛рдЪрд╛ рдПрдХрдореЗрд╡ рдорд╛рд░реНрдЧ рдЖрд╣реЗ тАФ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдиреЗрдордХреЗ рд╣реЗрдЪ рд╣рд╡реЗ рдЖрд╣реЗ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
app["ЁЯУД Application<br/>repoURL: learn-argocd-school<br/>path: k8s/ ┬╖ rev: main<br/>dest: gitops-school"]
argo["ЁЯдЦ ArgoCD"]
book["ЁЯУЦ git: the k8s/ chapter<br/>deployment + service + ns"]
room["ЁЯЪк gitops-school<br/>ЁЯкСЁЯкС hello-school pods LIVE"]
app -->|"1 kubectl apply -f argocd/"| argo
argo -->|"2 clones and renders"| book
argo -->|"3 creates everything"| room
тЭУ рдХрд╛рдп
- Application = ArgoCD рдЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ resource type: source (repo/path/revision)
- destination (cluster/namespace) + policy (рдзрдбрд╛ 08).
- ArgoCD render рдХреЗрд▓реЗрд▓реЗ manifests live cluster рд╢реА рддреБрд▓рдирд╛ рдХрд░рддреЛ рдЖрдгрд┐ рдирд┐рдХрд╛рд▓ status рдореНрд╣рдгреВрди рджрд╛рдЦрд╡рддреЛ: Synced тЬЕ (рдЬреБрд│рддреЗ) рдХрд┐рдВрд╡рд╛ OutOfSync ЁЯЯб (рд╡реЗрдЧрд│реЗ рдЖрд╣реЗ) тАФ рдЖрдгрд┐ workloads рдХрдбреВрди Healthy/Progressing/Degraded.
- Public repos рдирд╛ credentials рд▓рд╛рдЧрдд рдирд╛рд╣реАрдд тАФ robot рдЪреЗ рдЧреНрд░рдВрдерд╛рд▓рдп рдХрд╛рд░реНрдб рд╕рд░рд│ рдЪрд╛рд▓рддреЗ. (Private repos: рдПрдХ repo secret рдЬреЛрдбрд╛; рдХрд▓реНрдкрдирд╛ рдЕрдЧрджреА рддреАрдЪ.)
ЁЯдФ рдХрд╛
рд╣реА рдПрдХрдЪ file рдпрд╛рдВрдЪреА рдЬрд╛рдЧрд╛ рдШреЗрддреЗ: рддреБрдордЪрд╛ kubectl apply рд╡рд┐рдзреА, pipeline рдЪрд╛
deploy job, "рдХрд╛рдп deploy рдЭрд╛рд▓реЗ рдЖрд╣реЗ?" рдЪреА spreadsheet, рдЖрдгрд┐ рдкрд╣рд╛рдЯреЗ 3 рд╡рд╛рдЬрддрд╛рдЪреА "prod git
рдордзреНрдпреЗ рдЖрд╣реЗ рддрд╕реЗрдЪ рдЖрд╣реЗ рдХрд╛?" рд╣реА рд╢рдВрдХрд╛. рдПрдХ рдкрд╛рди тЖТ рддреА рдЦреЛрд▓реА рдХрд╛рдпрдордЪреА robot рдЪреНрдпрд╛ рддрд╛рдмреНрдпрд╛рдд.
тЬЕ рдЦрдбреНрдбрд╛ 2 рдмреБрдЬрд▓рд╛. Cluster рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдЖрддрд╛ рдХреЛрдгрд╛рдХрдбреЗрд╣реА deployment credentials рдирд╛рд╣реАрдд: robot рдЖрддреВрдирдЪ рд╡рд╣реА pull рдХрд░рддреЛ, рдлрдХреНрдд рддреНрдпрд╛рдЪреЗ рдЧреНрд░рдВрдерд╛рд▓рдп рдХрд╛рд░реНрдб (git рд▓рд╛ read access) рд╡рд╛рдкрд░реВрди. рддреБрдордЪреНрдпрд╛ CI рдордзреВрди kubeconfig рдкреВрд░реНрдгрдкрдгреЗ рдХрд╛рдвреВрди рдЯрд╛рдХрддрд╛ рдпреЗрддреЗ.
ЁЯФз рдХрд╕реЗ (file, рдЯрд┐рдкрд╛рдВрд╕рд╣)
spec:
source:
repoURL: https://github.com/BaluRaut/learn-argocd-school.git
targetRevision: main # which edition to follow (branch/tag)
path: k8s # which chapter (folder of manifests)
destination:
server: https://kubernetes.default.svc # this very cluster
namespace: gitops-school
syncPolicy:
automated: { prune: true, selfHeal: true } # lesson 08 explains these
syncOptions: [CreateNamespace=true]
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
# clean slate makes the magic obvious тАФ delete the hand-deployed app first:
kubectl delete namespace gitops-school --ignore-not-found
# hand the robot the page:
kubectl apply -f argocd/application.yaml
# watch it work (UI: the hello-school app appears and turns green), or:
kubectl -n argocd get application hello-school -w # OutOfSync тЖТ Synced; Ctrl+C
kubectl -n gitops-school get all # the room, built by the robot ЁЯОЙ
# proof you're out of the loop now:
kubectl -n gitops-school delete deployment hello-school
kubectl -n gitops-school get deploy -w # ...it comes BACK. (lesson 08 tells you why)
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
kubectl -n argocd get application hello-school тЖТ рдПрдХ-рджреЛрди рдорд┐рдирд┐рдЯрд╛рдВрдд SYNC STATUS: Synced, HEALTH STATUS: Healthy. рдЖрдзреА рддреЗ OutOfSync / Progressing рдордзреВрди рдЬрд╛рддреЗ тАФ рддреЗ рд╕рдВрдХреНрд░рдордг рд╣рд╛рдЪ рддрд░ рдзрдбрд╛ рдЖрд╣реЗ. kubectl -n gitops-school get all robot рдиреЗ рдмрд╛рдВрдзрд▓реЗрд▓реЗ namespace, Deployment, Service рдЖрдгрд┐ рджреЛрди pods рджрд╛рдЦрд╡рддреЗ; UI рдордзреНрдпреЗ tile рд╣рд┐рд░рд╡реА рдЕрд╕рддреЗ, Application тЖТ Deployment тЖТ ReplicaSet тЖТ Pods рдпрд╛ tree рд╕рд╣.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ
рдзрдбреЗ 08тАУ12 рд╕рд╛рдареА Application рд░рд╛рд╣реВ рджреНрдпрд╛. рдирдВрддрд░ рддреЗ рдХрд╛рдврддрд╛рдирд╛: kubectl -n argocd delete application hello-school deploy рдЭрд╛рд▓реЗрд▓реЗ resources рддрд╕реЗрдЪ рдареЗрд╡рддреЗ, рдЬреЛрдкрд░реНрдпрдВрдд Application рд╡рд░ resources-finalizer.argocd.argoproj.io finalizer рдирд╕рддреЛ (argocd app delete hello-school --cascade рддреЛ рдЬреЛрдбрддреЗ). рдордЧ рдЙрд░рд▓реЗрд▓реНрдпрд╛ рдХрд╢рд╛рд╕рд╛рдареАрд╣реА kubectl delete namespace gitops-school.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
path:рдордзреНрдпреЗ typo рдХрд┐рдВрд╡рд╛ рд╢реЗрд╡рдЯреА slash тЖТComparisonErrorтАФ рдЖрдзреА tile рд╡рд░рдЪрд╛ error text рддрдкрд╛рд╕рд╛CreateNamespace=trueрдирд╕рдгреЗ тЖТ namespace рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ рдкрд╣рд┐рд▓рд╛ sync fail рд╣реЛрддреЛ- push рдирдВрддрд░ рд▓рдЧреЗрдЪ sync рд╣реЛрдИрд▓ рдЕрд╢реА рдЕрдкреЗрдХреНрд╖рд╛ тАФ default poll ~3 рдорд┐рдирд┐рдЯрд╛рдВрдЪрд╛ рдЕрд╕рддреЛ; Refresh click рдХрд░рд╛, рдХрд┐рдВрд╡рд╛ webhook рдЬреЛрдбрд╛
- app рдЪреЗ resources рд╣рд╛рддрд╛рдиреЗ рдмрджрд▓рдгреЗ рдЖрдгрд┐ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрдгреЗ (рдзрдбрд╛ 08 selfHeal рд╕рдордЬрд╛рд╡рддреЛ)
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: Application рдлрдХреНрдд YAML рдЖрд╣реЗ, рдореНрд╣рдгреВрди рддреЗрд╣реА git рдордзреНрдпреЗ рд░рд╛рд╣рддреЗ (app-of-apps, рдзрдбрд╛ 11) тАФ Applications рд╕реБрджреНрдзрд╛ рдХреЛрдгреА рд╣рд╛рддрд╛рдиреЗ
kubectl applyрдХрд░рдд рдирд╛рд╣реА. Private repos рдирд╛ repo credential (deploy key рдХрд┐рдВрд╡рд╛ GitHub App) рд▓рд╛рдЧрддреЗ, рдЬреЗ CI рдордзреНрдпреЗ рдирд╡реНрд╣реЗ рддрд░ cluster рдордзреНрдпреЗ рд╕рд╛рдард╡рд▓реЗ рдЬрд╛рддреЗ.
тПня╕П рдкреБрдвреЗ
automated, prune, selfHeal тАФ robot рдЪреЗ рдШрд░рдЪреЗ рдирд┐рдпрдо, рдЖрдгрд┐ рддреЗ рдХрдзреА
рд╕реИрд▓ рдХрд░рд╛рдпрдЪреЗ.
git checkout lesson-08-sync-policies