ЁЯдЦ рдзрдбрд╛ 06 тАФ ArgoCD install рдХрд░рд╛: robot рд╢рд╛рд│реЗрдд рд░рд╛рд╣рд╛рдпрд▓рд╛ рдпреЗрддреЛ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 06 ┬╖ рдорд╛рдЧреЗ: lesson-05-gitops-idea ┬╖ рдкреБрдвреЗ: lesson-07-first-application
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ05, рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд: рддреБрдордЪреНрдпрд╛ local cluster рдордзреНрдпреЗ ArgoCD install рдХрд░рдгреЗ рдЖрдгрд┐ рдлреЗрд░рдлрдЯрдХрд╛ рдорд╛рд░рдгреЗ тАФ UI, CLI, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╣рд▓рдгрд╛рд░рд╛ рднрд╛рдЧ рдХрд╛рдп рдХрд░рддреЛ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдиреЗрдордгреБрдХреАрдЪрд╛ рджрд┐рд╡рд╕! ЁЯОЙ рдХреЗрдЕрд░рдЯреЗрдХрд░ robot ЁЯдЦ рдПрдХрд╛ рдореЛрдареНрдпрд╛ рдЦреЛрдХреНрдпрд╛рдд рдпреЗрддреЛ (рдПрдХрдЪ install manifest). рддреБрдореНрд╣реА рддреЗ рдЦреЛрдХреЗ рд╢рд╛рд│реЗрдЪреНрдпрд╛ рдЖрдд рдЙрдШрдбрддрд╛, рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рднрд╛рдЧ рдмрд╛рд╣реЗрд░ рдпреЗрддрд╛рдд:
- рддреНрдпрд╛рдЪреЗ рдбреЛрд│реЗ рдЖрдгрд┐ рдЪреЗрд╣рд░рд╛ ЁЯЦея╕П (
argocd-server+ web UI) тАФ рддреА рдЦрд┐рдбрдХреА рдЬрд┐рдереВрди рддреБрдореНрд╣рд╛рд▓рд╛ robot рд▓рд╛ рдЬреЗ рджрд┐рд╕рддреЗ рддреЗ рджрд┐рд╕рддреЗ: рд╣рд┐рд░рд╡реНрдпрд╛ рдЦреЛрд▓реНрдпрд╛, рдкрд┐рд╡рд│реНрдпрд╛ рдЦреЛрд▓реНрдпрд╛, diffs. - рддреНрдпрд╛рдЪреЗ рдЧреНрд░рдВрдерд╛рд▓рдп рдХрд╛рд░реНрдб ЁЯУЦ (
repo-server) тАФ рд╣рд╛ рднрд╛рдЧ рдЪрд╛рд▓рдд рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рдд рдЬрд╛рддреЛ рдЖрдгрд┐ рдкреНрд▓реЕрди-рд╡рд╣реА рдШреЗрдКрди рдпреЗрддреЛ (git repos clone рдХрд░рддреЛ). - рддреНрдпрд╛рдЪреЗ рдкрд╛рдп рдЖрдгрд┐ рд╣рд╛рдд ЁЯФД (
application-controller) тАФ рд╣рд╛ рднрд╛рдЧ рд╡реНрд╣рд░рд╛рдВрдбреНрдпрд╛рдВрддреВрди рдлрд┐рд░рдд рдЦреЛрд▓реНрдпрд╛рдВрдЪреА рд╡рд╣реАрд╢реА рддреБрд▓рдирд╛ рдХрд░рддреЛ рдЖрдгрд┐ рдлрд░рдХ рджреБрд░реБрд╕реНрдд рдХрд░рддреЛ. рд╣рд╛рдЪ рддреЛ reconcile loop.
рдиреЗрдордгреБрдХреАрдЪреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рддрдкрд╢реАрд▓: robot рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдЦреЛрд▓реАрдд рд░рд╛рд╣рддреЛ
(namespace argocd), рдЖрдгрд┐ рддреЛ рд╢реВрдиреНрдп рдорддрд╛рдВрдиреА рд╕реБрд░реБрд╡рд╛рдд рдХрд░рддреЛ тАФ рддреБрдореНрд╣реА рддреНрдпрд╛рд▓рд╛ рдкреНрд▓реЕрдирдЪреЗ
рдкрд╣рд┐рд▓реЗ рдкрд╛рди рджреЗрдИрдкрд░реНрдпрдВрдд (рдзрдбрд╛ 07) рддреЛ рдХрд╛рд╣реАрдЪ рдХрд░рдд рдирд╛рд╣реА.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
you["ЁЯзСтАНЁЯТ╗ you<br/>one kubectl apply"]
subgraph cluster["ЁЯПл your cluster"]
subgraph ns["ЁЯЪк namespace: argocd"]
ui["ЁЯЦея╕П argocd-server<br/>API + web UI"]
repo["ЁЯУЦ repo-server<br/>clones git repos"]
ctrl["ЁЯФД application-controller<br/>the reconcile loop"]
end
end
you -->|"1 install manifest"| ns
you -->|"2 port-forward :8080<br/>login admin"| ui
ctrl -.->|"3 waits patiently<br/>for its first plan page"| ctrl
тЭУ рдХрд╛рдп
- ArgoCD рд╣рд╛ Kubernetes рд╕рд╛рдареАрдЪрд╛ CNCF-graduated GitOps controller рдЖрд╣реЗ тАФ рд╕рдЧрд│реНрдпрд╛рдд рд▓реЛрдХрдкреНрд░рд┐рдп (Flux рд╣реЗ рджреБрд╕рд░реЗ рдореЛрдареЗ рдирд╛рд╡; рдХрд▓реНрдкрдирд╛ рддреАрдЪ, рдкрдг built-in UI рдирд╛рд╣реА).
- рддреЛ Kubernetes рдордзреНрдпреЗ рдирд╡реЗ resource types рдЬреЛрдбрддреЛ тАФ рддреНрдпрд╛рддрд▓рд╛ рд╕рдЧрд│реНрдпрд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ Application (рдзрдбрд╛ 07) тАФ рдЖрдгрд┐ Kubernetes рдЬрд╕реЗ Deployments reconcile рдХрд░рддреЗ рддрд╕реЗ рддреЛ рддреНрдпрд╛рдВрдирд╛ reconcile рдХрд░рддреЛ.
- UI рдЦрд░реЛрдЦрд░рдЪ рдЙрддреНрдХреГрд╖реНрдЯ рдЖрд╣реЗ рдЖрдгрд┐ ArgoCD рдЬрд┐рдВрдХрдгреНрдпрд╛рдЪреЗ рдЕрд░реНрдзреЗ рдХрд╛рд░рдг рддреЗрдЪ рдЖрд╣реЗ: рддреБрдореНрд╣рд╛рд▓рд╛ app tree (Application тЖТ Deployment тЖТ ReplicaSet тЖТ Pods), sync status, live diffs, рдЖрдгрд┐ history рджрд┐рд╕рддреЗ.
ЁЯдФ рдкреНрд░рддреНрдпреЗрдХ cluster рдордзреНрдпреЗ рдХрд╛ install рдХрд░рд╛рдпрдЪрд╛?
рдХрд╛рд░рдг pull-based рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХ cluster рд╕реНрд╡рддрдГрд╡рд░ рдкрд╣рд╛рд░рд╛ рджреЗрддреЛ: рддреНрдпрд╛рдЪрд╛ agent, рддреНрдпрд╛рдЪреНрдпрд╛ keys рдЖрддрдЪ рд░рд╛рд╣рддрд╛рдд, рд╡рд╣реАрдХрдбреЗ рдкрд╛рд╣рдгреНрдпрд╛рдЪреА рддреНрдпрд╛рдЪреА рд╕реНрд╡рддрдГрдЪреА рдирдЬрд░. (рдПрдХрдЪ ArgoCD рдЕрдиреЗрдХ clusters рдордзреНрдпрд╡рд░реНрддреАрдкрдгреЗ рд╕рд╛рдВрднрд╛рд│реВ рд╢рдХрддреЛ тАФ рд╣рд╛ рджреЗрдЦреАрд▓ рдпреЛрдЧреНрдп setup рдЖрд╣реЗ, рддреНрдпрд╛рдЪреЗ рдлрд╛рдпрджреЗ-рддреЛрдЯреЗ рдЖрд╣реЗрдд; рдЖрдзреА рд╕рд╛рдзрд╛ рдЖрдХрд╛рд░ рд╢рд┐рдХрд╛.)
ЁЯФз рдХрд╕реЗ + ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
# 1) hire the robot (any local cluster):
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# 2) wait for its parts to assemble:
kubectl -n argocd get pods -w # ~1тАУ2 min until all Running; Ctrl+C
# 3) open its face:
kubectl -n argocd port-forward svc/argocd-server 8080:443 &
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath='{.data.password}' | base64 -d; echo
# browse https://localhost:8080 тЖТ login: admin + that password
# (self-signed cert warning is expected locally тАФ proceed)
# 4) optional but nice тАФ the CLI:
brew install argocd
argocd login localhost:8080 --username admin --insecure
# 5) look around the UI: zero Applications. The robot is hired,
# bored, and waiting for lesson 07. ЁЯдЦЁЯТд
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
kubectl -n argocd get pods тЖТ рд╕рдЧрд│реЗ Running: argocd-server, argocd-repo-server, argocd-application-controller-0, рдЖрдгрд┐ redis, dex рдЖрдгрд┐ notifications. https://localhost:8080 рд╡рд░рдЪрд╛ UI admin + initial password рд╕реНрд╡реАрдХрд╛рд░рддреЛ рдЖрдгрд┐ рд╢реВрдиреНрдп Applications рджрд╛рдЦрд╡рддреЛ.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ
рдзрдбреЗ 07тАУ12 рд╕рд╛рдареА ArgoCD install рдХреЗрд▓реЗрд▓рд╛ рд░рд╛рд╣реВ рджреНрдпрд╛. рдирдВрддрд░ рддреЛ рдкреВрд░реНрдгрдкрдгреЗ рдХрд╛рдврд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓ рддрд░: рдЖрдзреА рддреБрдордЪреЗ Applications delete рдХрд░рд╛ (рдзрдбрд╛ 07 рдЪреА рд╕рд╛рдлрд╕рдлрд╛рдИ), рдордЧ kubectl delete -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml && kubectl delete namespace argocd. Cloud cluster рд╡рд░ рдпрд╛рдореБрд│реЗ рдкреИрд╕реЗ рд▓рд╛рдЧрдгрд╛рд░реЗ рдХрд╛рд╣реАрдЪ рдерд╛рдВрдмрдд рдирд╛рд╣реА тАФ cluster рд╕реНрд╡рддрдГ рдирд╖реНрдЯ рд╣реЛрдИрдкрд░реНрдпрдВрдд nodes рдЖрдгрд┐ load balancers рдЪреЗ bill рдпреЗрдд рд░рд╛рд╣рддреЗ.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- port-forward background рдордзреНрдпреЗ рдЪрд╛рд▓реВ рдареЗрд╡рдгреЗ (
jobs,kill %1) рдЖрдгрд┐ рдкреБрдврдЪреНрдпрд╛ рд╡реЗрд│реА :8080 рд╡реНрдпрд╕реНрдд рдХрд╛ рдЖрд╣реЗ рдпрд╛рдЪреЗ рдЖрд╢реНрдЪрд░реНрдп рд╡рд╛рдЯрдгреЗ - admin password рдмрджрд▓рдгреЗ рдЖрдгрд┐ рддреЛ рд╣рд░рд╡рдгреЗ тАФ
argocd-initial-admin-secretрдкрд╣рд┐рд▓реНрдпрд╛ login рдирдВрддрд░ delete рдХрд░рдгреНрдпрд╛рд╕рд╛рдареАрдЪ рдЕрд╕рддреЛ - рдЪреБрдХреВрди рдЦрд▒реНрдпрд╛ cluster рдордзреНрдпреЗ install рдХрд░рдгреЗ тАФ рдЖрдзреА
kubectl config current-contextрдкрд╛рд╣рд╛
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: рдЦрд▒реНрдпрд╛ installs рдордзреНрдпреЗ Helm chart рдХрд┐рдВрд╡рд╛ operator рд╡рд╛рдкрд░рддрд╛рдд, admin user рдРрд╡рдЬреА SSO, HA mode (sharded controllers, redis HA), рдЖрдгрд┐ ArgoCD рд╕реНрд╡рддрдГрд▓рд╛рд╣реА ArgoCD рдХрдбреВрдирдЪ рд╕рд╛рдВрднрд╛рд│рд▓реЗ рдЬрд╛рддреЗ (app-of-apps, рдзрдбрд╛ 11). рдПрдХрд╛ file рдЪреЗ install рдлрдХреНрдд рд╢рд┐рдХрдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ.
тПня╕П рдкреБрдвреЗ
Robot рд▓рд╛ рдкреНрд▓реЕрдирдЪреЗ рдкрд╣рд┐рд▓реЗ рдкрд╛рди рджреНрдпрд╛: рд╣рд╛рдЪ repo deploy рдХрд░рдгрд╛рд░реЗ Application.
git checkout lesson-07-first-application