ЁЯкС рдзрдбрд╛ 02 тАФ Drift: рдЬреЗрд╡реНрд╣рд╛ рд╡рд╛рд╕реНрддрд╡ files рд╢реА рдЬреБрд│рдгреЗ рдерд╛рдВрдмрд╡рддреЗ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 02 ┬╖ рдорд╛рдЧреЗ: lesson-01-deploy-by-hand ┬╖ рдкреБрдвреЗ: lesson-03-cicd-push
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбрд╛ 01, рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд рдпрд╛ рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕рдЪрд╛ рдЦрд▓рдирд╛рдпрдХ: configuration drift тАФ рддреБрдордЪреЗ YAML рдЬреЗ рд╕рд╛рдВрдЧрддреЗ рдЖрдгрд┐ cluster рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЬреЗ рдЪрд╛рд▓рд╡рддреЛ рддреНрдпрд╛рддрд▓реА рд╡рд╛рдврдд рдЬрд╛рдгрд╛рд░реА рджрд░реА. рднрд╛рдЧ 2 рдордзрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрд╛рдп рдпрд╛ рдзрдбреНрдпрд╛рдореБрд│реЗрдЪ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рд╡рд░реНрдЧрд╛рдд рд╢рд┐рдХреНрд╖рд┐рдХреЗрдЪреНрдпрд╛ рдбреНрд░реЙрд╡рд░рдордзреНрдпреЗ рдПрдХ рдмрд╕рдгреНрдпрд╛рдЪрд╛ рддрдХреНрддрд╛ рдЪрд┐рдХрдЯрд╡рд▓реЗрд▓рд╛ рдЖрд╣реЗ ЁЯЧВя╕П тАФ рдХреЛрдг рдХреБрдареЗ рдмрд╕рддреЗ, рдЭрд╛рдбрд╛рдВрдирд╛ рдкрд╛рдгреА рдШрд╛рд▓рдгрд╛рд░реЗ 2 рдЬрдг, projector рдбрд╛рд╡реАрдХрдбреЗ.
рдкрдг рджрд┐рд╡рд╕реЗрдВрджрд┐рд╡рд╕ рдЫреЛрдЯреНрдпрд╛ рдЧреЛрд╖реНрдЯреА рдШрдбрдд рд░рд╛рд╣рддрд╛рдд, рддрдХреНрддрд╛ рди рдмрджрд▓рддрд╛:
- рд╢реБрдХреНрд░рд╡рд╛рд░рдЪреА рдШрд╛рдИ: "рдЖрдЬ рдкрд░реАрдХреНрд╖реЗрдЪреНрдпрд╛ рдирд┐рдХрд╛рд▓рд╛рдЪреА рд░рд╛рддреНрд░, рдЖрдгрдЦреА 3 рдорджрддрдиреАрд╕ рдШреНрдпрд╛!" тАФ рдУрд░рдбреВрди рдХреЗрд▓реЗ, рддрдХреНрддрд╛ рдмрджрд▓реВрди рдирд╛рд╣реА. ЁЯЧгя╕П
- рдПрдХ projector рдмрд┐рдШрдбрддреЛ; рдХреЛрдгреАрддрд░реА рдЦреЛрд▓реА 3B рдордзрд▓рд╛ projector рдУрдвреВрди рдЖрдгрддреЛ. рдХреЛрдгреАрдЪ рддреЗ рд▓рд┐рд╣реВрди рдареЗрд╡рдд рдирд╛рд╣реА.
- рдмрджрд▓реА рд╢рд┐рдХреНрд╖рд┐рдХрд╛ рдкреБрдврдЪреА рд░рд╛рдВрдЧ "рдлрдХреНрдд рдЖрдЬрд╕рд╛рдареА" рдмрджрд▓рддреЗ. рддреА рддрд╢реАрдЪ рд░рд╛рд╣рддреЗ.
рддреАрди рдорд╣рд┐рдиреНрдпрд╛рдВрдиреА рддрдХреНрддрд╛ рдПрдХ рд╕рд╛рдВрдЧрддреЛ, рдЦреЛрд▓реА рдкреВрд░реНрдгрдкрдгреЗ рд╡реЗрдЧрд│реА рдЕрд╕рддреЗ, рдЖрдгрд┐ рднреАрддреАрджрд╛рдпрдХ рднрд╛рдЧ рд╣рд╛ рдЖрд╣реЗ: ЁЯШ▒
рдкреБрдврдЪреНрдпрд╛ рд╡реЗрд│реА рдХреЛрдгреА рдирд┐рд░рд╛рдЧрд╕рдкрдгреЗ "рдЦреЛрд▓реА рддрдХреНрддреНрдпрд╛рдиреБрд╕рд╛рд░ рдкрд░рдд рд▓рд╛рд╡рддреЗ", рддреЗрд╡реНрд╣рд╛ рддреА рди рдиреЛрдВрджрд╡рд▓реЗрд▓реЗ рд╕рдЧрд│реЗ рдмрджрд▓ рдПрдХрд╛ рдлрдЯрдХреНрдпрд╛рдд рдирд╖реНрдЯ рдХрд░рддреЗ тАФ рдЖрдгрд┐ рдЬрд╛рд╕реНрддреАрдЪрд╛ projector рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рд╣реЛрддрд╛ рддреЗ рдХреЛрдгрд╛рд▓рд╛рдЪ рдЖрдард╡рдд рдирд╛рд╣реА.
рддрдХреНрддрд╛ рдЖрдгрд┐ рдЦреЛрд▓реА рдпрд╛рдВрддрд▓реА рд╣реА рджрд░реА рдореНрд╣рдгрдЬреЗ drift. рд╣реА рдПрдХ рдореЛрдареА рдЪреВрдХ рдирд╛рд╣реА тАФ рд╣реА рд╢рдВрднрд░ рдЫреЛрдЯреЗ "рдлрдХреНрдд рдпрд╛ рд╡реЗрд│реА" рдХреЗрд▓реЗрд▓реЗ рдмрджрд▓ рдЖрд╣реЗрдд, рдЬреЗ рдХрдзреАрдЪ рд▓рд┐рд╣реВрди рдареЗрд╡рд▓реЗ рдЧреЗрд▓реЗ рдирд╛рд╣реАрдд.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
git["ЁЯУД YAML in git says<br/>replicas: 2<br/>image: v1<br/>limit: 64Mi"]
cluster["ЁЯПл cluster actually runs<br/>replicas: 5 - Friday panic<br/>image: v2-hotfix-REAL<br/>limit: 512Mi - kubectl edit"]
boom["ЁЯТе next 'clean' apply from git<br/>silently UNDOES every hotfix"]
git <-. "1 hand-edits, 'just this once'<br/>2 never written back to git" .-> cluster
cluster --> boom
тЭУ рдХрд╛рдп
- Drift = cluster рдЪреА рдкреНрд░рддреНрдпрдХреНрд╖ рд╕реНрдерд┐рддреА тЙа рддреБрдордЪреНрдпрд╛ files рдордзреНрдпреЗ рдЬрд╛рд╣реАрд░ рдХреЗрд▓реЗрд▓реА рд╕реНрдерд┐рддреА, рдЬреА
kubectl edit,kubectl scale,kubectl patch, dashboard рд╡рд░рдЪреЗ clicks, hotfixes рдпрд╛рдВрдореБрд│реЗ рд╣реЛрддреЗ. - Drift default рдиреЗ рдЕрджреГрд╢реНрдп рдЕрд╕рддреЛ: live Deployment рдЖрддрд╛ repo рд╢реА рдЬреБрд│рдд рдирд╛рд╣реА рд╣реЗ рд╕рд╛рдзрд╛ cluster
рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реАрдЪ рд╕рд╛рдВрдЧрдд рдирд╛рд╣реА.
kubectl diffрдЖрд╣реЗ, рдкрдг рддреЗ рдлрдХреНрдд рддреЗ рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгрд╛рд▒реНрдпрд╛ рд╡реНрдпрдХреНрддреАрд▓рд╛рдЪ рдорджрдд рдХрд░рддреЗ. - рд╕рдЧрд│реНрдпрд╛рдд рд╡рд╛рдИрдЯ рдЕрдкрдпрд╢ рдореНрд╣рдгрдЬреЗ drift рд╕реНрд╡рддрдГ рдирд╛рд╣реА тАФ рддрд░ рди рдиреЛрдВрджрд╡рд▓реЗрд▓реЗ fixes рдкреБрд╕реВрди рдЯрд╛рдХрдгрд╛рд░реЗ рдирд┐рд░рд╛рдЧрд╕ re-apply, рдмрд╣реБрдзрд╛ рдПрдЦрд╛рджреНрдпрд╛ incident рджрд░рдореНрдпрд╛рди, рд░рд╛рддреНрд░реА. ЁЯМЩ
ЁЯдФ рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ
Drift рдореБрд│реЗрдЪ "staging рдордзреНрдпреЗ рдЪрд╛рд▓рд▓реЗ рд╣реЛрддреЗ" рд╣реЗ рдЦреЛрдЯреЗ рдард░рддреЗ, disaster recovery рдЕрдкрдпрд╢реА рд╣реЛрддреЗ ("рдлрдХреНрдд repo рдкреБрдиреНрд╣рд╛ apply рдХрд░рд╛!" тАФ рдкрдг repo 3 рдорд╣рд┐рдиреЗ рдЬреБрдирд╛ рд╣реЛрддрд╛), рдЖрдгрд┐ рдирд╡реНрдпрд╛ рд╕рд╣рдХрд╛рд▒реНрдпрд╛рдВрдирд╛ рд▓рд┐рд╣реВрди рдареЗрд╡рд▓реЗрд▓реНрдпрд╛ рдХрд╢рд╛рд╡рд░рдЪ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рддрд╛ рдпреЗрдд рдирд╛рд╣реА. рд╣реА рднрд╛рд╡рдирд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ тАФ рдзрдбрд╛ 09 рдордзреНрдпреЗ, ArgoCD рдиреЗрдордХреА рд╣реАрдЪ рдкрд░рд┐рд╕реНрдерд┐рддреА рдХрд╛рд╣реА рд╕реЗрдХрдВрджрд╛рдВрдд рдУрд│рдЦреЗрд▓ рдЖрдгрд┐ рдЙрд▓рдЯрд╡реЗрд▓.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ рдкрд╛рд╣рд╛)
Demo Deployment k8s/deployment.yaml рдордзреНрдпреЗ replicas: 2
рдЬрд╛рд╣реАрд░ рдХрд░рддреЗ. рдЖрддрд╛ рддреБрдореНрд╣реА live cluster рд▓рд╛ рддреНрдпрд╛ file рд╢реА рдЕрд╕рд╣рдордд рдХрд░рдгрд╛рд░ рдЖрд╣рд╛рдд тАФ
рдЕрднрд┐рдирдВрджрди, рддреБрдореНрд╣реА 10 рд╕реЗрдХрдВрджрд╛рдВрдд рдЦрд░рд╛ drift рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рдЕрд╕реЗрд▓.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
# the file says replicas: 2 тАФ now vandalize reality:
kubectl -n gitops-school scale deployment hello-school --replicas=5
kubectl -n gitops-school edit deployment hello-school # change something small, e.g. add a label
# your repo and your cluster now disagree. Would you have noticed?
kubectl diff -f k8s/ | head -30 # тЖР the honest mirror (run it BEFORE any apply!)
# the horror-movie moment тАФ an innocent teammate "deploys the repo":
kubectl apply -f k8s/
kubectl -n gitops-school get deploy # replicas back to 2 тАФ your hotfix is GONE, silently
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
Scale + edit рдирдВрддрд░, kubectl diff -f k8s/ рд░рд┐рдХрд╛рдорд╛ рдирд╕рд▓реЗрд▓рд╛ diff рдЫрд╛рдкрддреЗ (replicas 5 рд╡рд┐рд░реБрджреНрдз 2, рдЖрдгрд┐ рддреБрдордЪреЗ label). рдирд┐рд░рд╛рдЧрд╕ re-apply рдирдВрддрд░, kubectl -n gitops-school get deploy hello-school рдкреБрдиреНрд╣рд╛ 2/2 рд╡рд░ рдпреЗрддреЗ рдЖрдгрд┐ label рдЧрд╛рдпрдм рд╣реЛрддреЗ тАФ рдЖрдгрд┐ kubectl diff рдЖрддрд╛ рд░рд┐рдХрд╛рдорд╛ рдЕрд╕рддреЛ, рдЬрдгреВ hotfix рдХрдзреА рдЕрд╕реНрддрд┐рддреНрд╡рд╛рддрдЪ рдирд╡реНрд╣рддрд╛.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ
kubectl apply -f k8s/ рдЦреЛрд▓реА рдкреБрдиреНрд╣рд╛ file рдиреБрд╕рд╛рд░ рд▓рд╛рд╡рддреЗ. рдмрд╛рдХреА рдХрд╛рд╣реАрдЪ рдХрд╛рдврд╛рдпрдЪреЗ рдирд╛рд╣реА.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
kubectl diffрдлрдХреНрдд apply рдирдВрддрд░ рдЪрд╛рд▓рд╡рдгреЗ рдЖрдгрд┐ drift рдХрдзреА рдирд╡реНрд╣рддрд╛рдЪ рдЕрд╕рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдврдгреЗ- drift рд╕рд╛рдареА рдХреЛрдгреА рдЦрд▓рдирд╛рдпрдХ рд▓рд╛рдЧрддреЛ рдЕрд╕реЗ рд╕рдордЬрдгреЗ тАФ incident рджрд░рдореНрдпрд╛рди dashboard рд╡рд░рдЪрд╛ рдПрдХ click рдкреБрд░реЗрд╕рд╛ рдЖрд╣реЗ
- рд╣рд╛рддрд╛рдиреЗ hotfix рдХрд░рдгреЗ рдЖрдгрд┐ рддреЛ рдирдВрддрд░ git рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреЗ (рддреЗ "рдирдВрддрд░" рдХрдзреАрдЪ рдпреЗрдд рдирд╛рд╣реА тАФ рд╣рд╛рдЪ рддрд░ рдзрдбрд╛ рдЖрд╣реЗ)
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: incident рджрд░рдореНрдпрд╛рди "рдлрдХреНрдд repo рдордзреВрди рдкреБрдиреНрд╣рд╛ deploy рдХрд░рд╛" рдХрд╛рд╣реАрддрд░реА рдореЛрдбрддреЗ, рдпрд╛рдЪреЗ рдкрд╣рд┐рд▓реНрдпрд╛ рдХреНрд░рдорд╛рдВрдХрд╛рдЪреЗ рдХрд╛рд░рдг drift рдЖрд╣реЗ. Reconcile loop рдирд╕рд▓реЗрд▓реНрдпрд╛ teams рдиреА рдирд┐рджрд╛рди CI рдордзреВрди рдард░рд▓реЗрд▓реНрдпрд╛ рд╡реЗрд│реА
kubectl diffрдЪрд╛рд▓рд╡рд╛рд╡реЗ, рдореНрд╣рдгрдЬреЗ drift рджреБрд░реБрд╕реНрдд рдЭрд╛рд▓рд╛ рдирд╛рд╣реА рддрд░реА рджрд┐рд╕рддреЛ рддрд░реА.
тПня╕П рдкреБрдвреЗ
рдкрд╣рд┐рд▓рд╛ рдЙрдкрд╛рдп: рдорд╛рдгрд╕рд╛рдВрдирд╛ deploy рдХрд░реВрдЪ рджреЗрдК рдирдХрд╛. рдЖрддрд╛ рдпреЗрддреЛ courier robot тАФ рдПрдХ CI/CD pipeline.
git checkout lesson-03-cicd-push