ЁЯПв рдзрдбрд╛ 13 тАФ рдкрдбрджреНрдпрд╛рдорд╛рдЧреЗ: рд╢рд╛рд│реЗрдЪреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 13 рдкреИрдХреА рдзрдбрд╛ 13 ┬╖ рдорд╛рдЧрдЪрд╛: lesson-12-storage ┬╖ рдмреЛрдирд╕ рдкреБрдврдЪрд╛: lesson-14-deploy-gitops
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рд╕рд░реНрд╡ 13 рдзрдбреЗ тАФ рд╣реА branch рдореНрд╣рдгрдЬреЗ рдкреВрд░реНрдг course. рд╢реЗрд╡рдЯрдЪрд╛ рднрд╛рдЧ: control plane тАФ рдЖрдзреАрдЪрд╛ рдкреНрд░рддреНрдпреЗрдХ рдзрдбрд╛ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдШрдбрд╡реВрди рдЖрдгрдгрд╛рд░реА рдпрдВрддреНрд░рдгрд╛. 4K рдЖрдХреГрддреНрдпрд╛рдВрд╕рд╣ рдмреЛрдирд╕ рд╕рдЦреЛрд▓ рдЕрднреНрдпрд╛рд╕: docs/under-the-hood.md.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдЗрддрдХрд╛ рд╡реЗрд│ рддреБрдореНрд╣реА "рд╢рд╛рд│реЗрд╢реА" рдмреЛрд▓рдд рд╣реЛрддрд╛ тАФ рдкрдг рддреА рдЦрд░реЛрдЦрд░ рдЪрд╛рд▓рд╡рддреЗ рдХреЛрдг? рд╢рд╛рд│реЗрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдд ЁЯПв рдЬрд╛ рдЖрдгрд┐ рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рдВрдирд╛ рднреЗрдЯрд╛:
- рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХрд╛ ЁЯзСтАНЁЯТ╝ (API server) тАФ рдХреЛрдгреАрд╣реА рдлрдХреНрдд рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╢реАрдЪ рдмреЛрд▓реВ рд╢рдХрддреЗ.
рдкрд╛рд▓рдХ (
kubectl), рд╢рд┐рдХреНрд╖рд┐рдХрд╛, рдЗрддрд░ рдХрд░реНрдордЪрд╛рд░реАрд╕реБрджреНрдзрд╛ тАФ рд╕рдЧрд│реЗ рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХрд╛рдВрдЪреНрдпрд╛ рдЯреЗрдмрд▓рд╛рд╡рд░реВрдирдЪ рдЬрд╛рддреЗ. "рдорд▓рд╛ 2 pods рд╣рд╡реЗ" рд╣реЗ рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХрд╛рдВрдирд╛ рджрд┐рд▓реЗрд▓реЗ рдкрддреНрд░ рдЖрд╣реЗ. - рдореЛрдареА рдиреЛрдВрджрд╡рд╣реА ЁЯУЦ (etcd) тАФ рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХрд╛ рд╕рдЧрд│реЗ рдХрд╛рд╣реА рдПрдХрд╛рдЪ рдкрд╡рд┐рддреНрд░ рд╡рд╣реАрдд рд▓рд┐рд╣рд┐рддрд╛рдд: рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ, рдореВрд▓, рдирд┐рдпрдо, рдЗрдЪреНрдЫрд╛. рдиреЛрдВрджрд╡рд╣реА рд╣рд░рд╡рд▓реА = рд╢рд╛рд│реЗрдЪреА рд╕реНрдореГрддреА рд╣рд░рд╡рд▓реА. рдЦрд░реЗ рддрд░ рдиреЛрдВрджрд╡рд╣реА рдореНрд╣рдгрдЬреЗрдЪ рд╢рд╛рд│рд╛.
- рд╡реЗрд│рд╛рдкрддреНрд░рдХ рдмрдирд╡рдгрд╛рд░реА ЁЯЧУя╕П (scheduler) тАФ рдиреЛрдВрджрд╡рд╣реАрдд "рдирд╡реЗ рдореВрд▓, рдмрд╛рдХ рджрд┐рд▓реЗрд▓рд╛ рдирд╛рд╣реА" рдкрд╛рд╣рддреЗ рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдпреЛрдЧреНрдп рд╡рд░реНрдЧрдЦреЛрд▓реА рдирд┐рд╡рдбрддреЗ (рдзрдбрд╛ 08 рдордзрд▓реА рддрд╛рдЯрд╛рдВрдЪреА рдореЛрдЬрдгреА!). рдард░рд▓реЗрд▓реА рдЬрд╛рдЧрд╛ рдкреБрдиреНрд╣рд╛ рдиреЛрдВрджрд╡рд╣реАрдд рд▓рд┐рд╣рд┐рддреЗ. рд╕реНрд╡рддрдГ рдмрд╛рдХ рдареЗрд╡рдд рдирд╛рд╣реА!
- рддрдкрд╛рд╕рдиреАрд╕ ЁЯФН (controller manager) тАФ рдиреЛрдВрджрд╡рд╣реАрддрд▓реНрдпрд╛ рдЗрдЪреНрдЫрд╛рдВрдЪреА рд╡рд╛рд╕реНрддрд╡рд╛рд╢реА рдХрд╛рдпрдо рддреБрд▓рдирд╛ рдХрд░рдгрд╛рд░реЗ рдХрд╛рд░рдХреВрди: "рдиреЛрдВрджрд╡рд╣реАрдд 2 рдкрд╛рдгреА рдШрд╛рд▓рдгрд╛рд░реЗ рд▓рд┐рд╣рд┐рд▓реЗ рдЖрд╣реЗрдд, рдореА 1 рдореЛрдЬрддреЛ тЖТ рдЖрдгрдЦреА рдПрдХрд╛рд╕рд╛рдареА рдЖрджреЗрд╢ рд▓рд┐рд╣рд╛." рдзрдбрд╛ 03 рдордзрд▓рд╛ рд╡рд░реНрдЧ-рдкреНрд░рдореБрдЦ рдЗрдереЗрдЪ рд░рд╛рд╣рддреЛ!
- рд╡рд░реНрдЧрд╢рд┐рдХреНрд╖рд┐рдХрд╛ ЁЯзСтАНЁЯПл (kubelet, рдкреНрд░рддреНрдпреЗрдХ machine рд╡рд░ рдПрдХ) тАФ рд╡рд░реНрдЧрдЦреЛрд▓реНрдпрд╛рдВрдордзреНрдпреЗ. рдкреНрд░рддреНрдпреЗрдХ рдЬрдг рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХрд╛рдВрдирд╛ рд╕рддрдд рд╡рд┐рдЪрд╛рд░рдд рдЕрд╕рддреЗ "рдорд╛рдЭреНрдпрд╛ рдЦреЛрд▓реАрд╕рд╛рдареА рдХрд╛рд╣реА рдЖрд╣реЗ рдХрд╛?" рдЖрдгрд┐ рдордЧ рдкреНрд░рддреНрдпрдХреНрд╖ containers рд╕реБрд░реВ рдХрд░рддреЗ, рдзрдбрд╛ 07 рдЪреЗ probes рдЪрд╛рд▓рд╡рддреЗ, рдкрд░рдд рдЕрд╣рд╡рд╛рд▓ рджреЗрддреЗ.
рд╕рдВрдкреВрд░реНрдг course рдордзреНрдпреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЬрд╛рдгрд╡рд▓реЗрд▓реА рдЬрд╛рджреВ тАФ self-healing, autoscaling, rollouts тАФ рдореНрд╣рдгрдЬреЗ рдлрдХреНрдд рд╣реЗ рдкрд╛рдЪ рдЬрдг, рдПрдХрдЪ рдиреЛрдВрджрд╡рд╣реА рд╕рддрдд рд╡рд╛рдЪрдд рдЖрдгрд┐ рд▓рд┐рд╣рд┐рдд. рдХреЛрдгрддреАрд╣реА рдЬрд╛рджреВ рдирд╛рд╣реА. ЁЯкДтЭМ
ЁЯЧ║я╕П рдЖрдХреГрддреА тАФ kubectl apply рдЦрд░реЛрдЦрд░ рдХрд╛рдп рдХрд░рддреЗ
sequenceDiagram
participant You as ЁЯзС kubectl apply
participant API as ЁЯзСтАНЁЯТ╝ API server
participant E as ЁЯУЦ etcd
participant CM as ЁЯФН controllers
participant S as ЁЯЧУя╕П scheduler
participant KL as ЁЯзСтАНЁЯПл kubelet on node
You->>API: "I wish: Deployment, 2 replicas"
API->>E: write the wish
CM->>API: sees Deployment тЖТ creates ReplicaSet тЖТ creates 2 Pods, unassigned
S->>API: sees unassigned pods тЖТ picks best node for each
KL->>API: "anything for my node?" тЖТ yes!
KL->>KL: pull image ЁЯН▒, start container, run probes ЁЯЩЛ
KL->>API: "running & ready" тЖТ written to etcd
Note over You,KL: kubectl get pods now shows 2/2 Running ЁЯОЙ
тЭУ рдХрд╛рдп
- Control plane (рдХрд╛рд░реНрдпрд╛рд▓рдп): API server, etcd, scheduler, controller manager. EKS рд╡рд░ рд╣реЗ рд╕рдЧрд│реЗ AWS рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдЪрд╛рд▓рд╡рддреЗ тАФ ~$73/month рддреНрдпрд╛рдЪрд╕рд╛рдареА рдореЛрдЬрд▓реЗ рдЬрд╛рддрд╛рдд (terraform/eks.tf рдкрд╛рд╣рд╛).
- Worker nodes (рд╡рд░реНрдЧрдЦреЛрд▓реНрдпрд╛): kubelet + container runtime + kube-proxy (рдзрдбрд╛ 04 рдордзрд▓реЗ Service IPs рдкреНрд░рддреНрдпрдХреНрд╖ route рдХрд░рдгрд╛рд▒реНрдпрд╛ рд╡реНрд╣рд░рд╛рдВрдбреНрдпрд╛рддрд▓реНрдпрд╛ рдкрд╛рдЯреНрдпрд╛).
- рд╕рд░реНрд╡рддреНрд░ рд▓рд╛рдЧреВ рд╣реЛрдгрд╛рд░реА рдкрджреНрдзрдд: рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯ etcd рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реА рдПрдХ рдЗрдЪреНрдЫрд╛ рдЖрд╣реЗ, рдЖрдгрд┐ controllers рд╡рд╛рд╕реНрддрд╡рд╛рд▓рд╛ рддрд┐рдЪреНрдпрд╛рдХрдбреЗ рдХрд╛рдпрдо рдЬреБрд│рд╡рдд рдиреЗрддрд╛рдд. Deployment, HPA, Ingress, PVC тАФ рдкреНрд░рддреНрдпреЗрдХ рдзрдбрд╛ рдореНрд╣рдгрдЬреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдкреЛрд╢рд╛рдЦ рдШрд╛рддрд▓реЗрд▓реА рд╣реАрдЪ рдПрдХ рдкрджреНрдзрдд рд╣реЛрддреА.
ЁЯдФ рдХрд╛
рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рддрд▓реНрдпрд╛ рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рдВрдЪреА рдХрд╛рд│рдЬреА рддреБрдореНрд╣реА рдХрд╛ рдХрд░рд╛рд╡реА? рдХрд╛рд░рдг рдЖрддрд╛ рддреБрдореНрд╣реА рдкрд╛рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрддрдирд╛рдЪреЗ рдпрд╛рдВрддреНрд░рд┐рдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЖрд╣реЗ тАФ рдЖрдгрд┐ debugging рдЕрдВрджрд╛рдЬ рди рд░рд╛рд╣рддрд╛ рддрд░реНрдХ рдмрдирддреЗ:
- Pod
PendingрдордзреНрдпреЗ рдЕрдбрдХрд▓рд╛? тЖТ рд╡реЗрд│рд╛рдкрддреНрд░рдХ рдмрдирд╡рдгрд╛рд░реАрд▓рд╛ рдЦреЛрд▓реА рд╕рд╛рдкрдбрдд рдирд╛рд╣реА (рд╕рд╣рд╕рд╛ рдзрдбрд╛ 08 рдЪреЗ requests рдХреЛрдгрддреНрдпрд╛рдЪ node рд╡рд░ рдмрд╕рдд рдирд╛рд╣реАрдд). - Pod
CrashLoopBackOff? тЖТ рд╡рд░реНрдЧрд╢рд┐рдХреНрд╖рд┐рдХрд╛ рддреЛ рд╕реБрд░реВ рдХрд░рддреЗ, рддреЛ рдорд░рддреЛ, рдкреБрдиреНрд╣рд╛ рддреЗрдЪ (kubectl logsрдкрд╛рд╣рд╛; рдЕрдиреЗрдХрджрд╛ рдзрдбрд╛ 06 рдордзрд▓рд╛ config рдЪреБрдХреАрдЪрд╛ рдЕрд╕рддреЛ). kubectlрдЕрдбрдХрддреЗ? тЖТ рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХрд╛рдВрдЪреЗ рдЯреЗрдмрд▓ рдкреЛрд╣реЛрдЪрдгреНрдпрд╛рдЪреНрдпрд╛ рдкрд▓реАрдХрдбреЗ рдЖрд╣реЗ (kubeconfig, VPN, cluster рдмрдВрдж).- рдмрджрд▓ рджреБрд░реНрд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛рдд? тЖТ рдХреЛрдгреАрддрд░реА рддрдкрд╛рд╕рдиреАрд╕ рддреБрдордЪреНрдпрд╛ рд╡рд┐рд░реЛрдзрд╛рдд рдЬреБрд│рд╡рдгреА рдХрд░рдд рдЖрд╣реЗ тАФ рдзрдбрд╛ 09 рдордзреНрдпреЗ HPA рддреБрдордЪреА replica рд╕рдВрдЦреНрдпрд╛ edit рдХрд░рдд рд╣реЛрддрд╛, рдЖрдард╡рддреЗ?
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
- terraform/eks.tf тАФ рдПрдХрдЪ Terraform resource AWS рдХрдбреЗ рдкреВрд░реНрдг managed рдХрд╛рд░реНрдпрд╛рд▓рдп + рд╡рд░реНрдЧрдЦреЛрд▓реАрдЪреНрдпрд╛ machines рдЪрд╛ рдПрдХ node group рдорд╛рдЧрддреЛ.
- .circleci/config.yml тАФ CI рдореНрд╣рдгрдЬреЗ "рдЖрдгрдЦреА рдПрдХ рдкрд╛рд▓рдХ":
aws eks update-kubeconfigрдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХрд╛рдВрд╢реА рдмреЛрд▓рдгреНрдпрд╛рд╕рд╛рдареА credentials рдорд┐рд│рд╡рддреЗ, рдордЧkubectl applyрддреБрдореНрд╣реА 12 рдзрдбреНрдпрд╛рдВрдордзреНрдпреЗ рдЕрднреНрдпрд╛рд╕рд▓реЗрд▓реА рдкрддреНрд░реЗ (manifests) рд╕реБрдкреВрд░реНрдж рдХрд░рддреЗ. - docs/under-the-hood.md тАФ рддреАрдЪ рдЧреЛрд╖реНрдЯ рддреАрди 4K рдЖрдХреГрддреНрдпрд╛рдВрдордзреНрдпреЗ:
docker run,kubectl apply, рдЖрдгрд┐ ALB тЖТ Service тЖТ pod рдЕрд╕рд╛ рдПрдХрд╛ HTTP request рдЪрд╛ рдкреНрд░рд╡рд╛рд╕.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
kubectl get nodes -o wide # the classroom machines
kubectl -n kube-system get pods # office staff & helpers you can see
kubectl get --raw /healthz && echo # ask the principal directly: "ok"
# Watch the office gossip live while you break something (lesson 03 chaos):
kubectl -n school get events -w
# in another terminal: kubectl -n school delete pod -l app=school-api --wait=false
# тЖТ watch: killing тЖТ SuccessfulCreate тЖТ Scheduled тЖТ Pulled тЖТ Started. The whole office, on record.
ЁЯФз рдпрд╛ рдзрдбреНрдпрд╛рд╕рд╛рдареА kubectl
kubectl get events ┬╖ kubectl get componentstatuses ┬╖ kubectl api-resources
ЁЯФЧ рдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд: ЁЯкк AWS L13 (рдЬреНрдпрд╛ рдкрд░рд┐рд╕рд░рд╛рдд рд╣реА рдХрд╛рд░реНрдпрд╛рд▓рдпреЗ рдЙрднреА рдЖрд╣реЗрдд)
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
kubectl get events --sort-by=.lastTimestamp -n school рдирд╡реНрдпрд╛ pod рд╕рд╛рдареА Scheduled тЖТ Pulled тЖТ Created тЖТ Started рдпрд╛рдЪ рдХреНрд░рдорд╛рдиреЗ рджрд╛рдЦрд╡рддреЗ.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ
рдХрд╛рд╣реАрдЪ рдирд╛рд╣реА тАФ рддреБрдореНрд╣реА рдлрдХреНрдд рд╡рд╛рдЪрд▓реЗ
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- kubectl nodes рд╢реА рдмреЛрд▓рддреЗ рдЕрд╕реЗ рд╕рдордЬрдгреЗ тАФ рддреЗ рдлрдХреНрдд API server рд╢реАрдЪ рдмреЛрд▓рддреЗ
- etcd рдореНрд╣рдгрдЬреЗрдЪ cluster рд╣реЗ рд╡рд┐рд╕рд░рдгреЗ тАФ рддреНрдпрд╛рдЪрд╛ backup рдШреНрдпрд╛ (L18)
ЁЯОУ рддреБрдореНрд╣реА рдХрд░реВрди рджрд╛рдЦрд╡рд▓реЗ!
рдЖрддрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ: containers тЖТ pods тЖТ deployments тЖТ services тЖТ namespaces тЖТ config рдЖрдгрд┐ secrets тЖТ probes тЖТ resources тЖТ autoscaling тЖТ ingress тЖТ rollouts тЖТ storage тЖТ control plane. рд╣реЗ "рдирд╡рд╢рд┐рдХреНрдпрд╛рдВрдЪреЗ Kubernetes" рдирд╛рд╣реА тАФ рд╣реА platform engineer рдЪреА рдХрд╛рдорд╛рдЪреА рд╢рдмреНрджрд╕рдВрдкрджрд╛ рдЖрд╣реЗ.
рдкреБрдвреЗ рдХреБрдареЗ рдЬрд╛рдпрдЪреЗ, рдпрд╛рдЪ repo рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди:
- рд╕рдЧрд│реЗ local рд▓рд╛ рдЪрд╛рд▓рд╡рд╛:
docker compose up, рдордЧ minikube + manifests. - рдЦрд▒реНрдпрд╛ cloud рд╡рд░ рдЬрд╛: terraform/ тЖТ
terraform applyтЖТ .circleci/config.yml рджреНрд╡рд╛рд░реЗ deploy рдХрд░рд╛ (тЪая╕П рдЦрд░реЗ рдкреИрд╕реЗ рд▓рд╛рдЧрддрд╛рдд тАФ рддреНрдпрд╛рдЪ рджрд┐рд╡рд╢реАterraform destroyрдХрд░рд╛!). - Production design doc рд╡рд╛рдЪрд╛: docs/architecture.html тАФ 100 рд╢рд╛рд│рд╛рдВрд╕рд╛рдареА multi-tenancy, рддреБрдореНрд╣реА рдЖрддреНрддрд╛ рд╢рд┐рдХрд▓реЗрд▓реНрдпрд╛ рд╕рдЧрд│реНрдпрд╛рд╡рд░ рдЙрднреА.
- рдмреЛрдирд╕ рдзрдбрд╛ тАФ рд╣рд╛рддрд╛рдиреЗ deploy рдХрд░рдгреЗ рдерд╛рдВрдмрд╡рд╛; рдкреНрд░рддреНрдпреЗрдХ git push robots рдирд╛ рдкрд╛рдард╡реВ рджреНрдпрд╛:
git checkout lesson-14-deploy-gitops # CI/CD pipelines + GitOps with ArgoCD ЁЯдЦ