ЁЯЪк рдзрдбрд╛ 05 тАФ Namespaces: рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡рд░реНрдЧрдЦреЛрд▓реНрдпрд╛
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 13 рдкреИрдХреА рдзрдбрд╛ 05 ┬╖ рдорд╛рдЧрдЪрд╛: lesson-04-services ┬╖ рдкреБрдврдЪрд╛: lesson-06-configmaps-secrets
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ04, рдЖрдгрд┐: Namespace тАФ рдЕрдиреЗрдХ teams рдЖрдгрд┐ projects рдПрдХрдЪ cluster рд╡рд╛рдЯреВрди рдШреЗрддрд╛рдд рддреЗрд╡реНрд╣рд╛ рддреЛ рдиреАрдЯрдиреЗрдЯрдХрд╛ рдХрд╕рд╛ рд░рд╛рд╣рддреЛ. рдЦрд░реА file:
- k8s/namespace.yaml тАФ 6 рдУрд│реАрдВрдЪреА file, рдЬрд┐рдЪреНрдпрд╛ рдЖрдд рдмрд╛рдХреА рд╕рдЧрд│реЗ рд░рд╛рд╣рддреЗ
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рд╢рд╛рд│реЗрдЪреНрдпрд╛ рдЗрдорд╛рд░рддреАрдд рдЕрдиреЗрдХ рд╡рд░реНрдЧрдЦреЛрд▓реНрдпрд╛ ЁЯЪк рдЕрд╕рддрд╛рдд. 3A рдЖрдгрд┐ 3B рджреЛрдиреНрд╣реА рд╡рд░реНрдЧрд╛рдВрдд "рдРрд╢реНрд╡рд░реНрдпрд╛" рдирд╛рд╡рд╛рдЪреА рдореБрд▓рдЧреА рдЕрд╕реВ рд╢рдХрддреЗ тАФ рдХрд╛рд╣реА рд╣рд░рдХрдд рдирд╛рд╣реА! 3A рдЪреНрдпрд╛ рдЖрдд рддреБрдореНрд╣реА рдлрдХреНрдд "рдРрд╢реНрд╡рд░реНрдпрд╛" рдореНрд╣рдгрддрд╛ рдЖрдгрд┐ рд╕рдЧрд│реНрдпрд╛рдВрдирд╛ рдХрд│рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдг рд╣рд╡реА рдЖрд╣реЗ. рджреБрд╕рд▒реНрдпрд╛ рдЦреЛрд▓реАрддреВрди рддреБрдореНрд╣реА рдореНрд╣рдгрд╛рд▓ "3B рдордзрд▓реА рдРрд╢реНрд╡рд░реНрдпрд╛".
рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрд▓реАрдЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рд╕реВрдЪрдирд╛-рдлрд▓рдХ, рд╕реНрд╡рддрдГрдЪреЗ рд╕рд╛рд╣рд┐рддреНрдпрд╛рдЪреЗ рдХрдкрд╛рдЯ рдЕрд╕рддреЗ, рдЖрдгрд┐ рд╢рд┐рдХреНрд╖рд┐рдХрд╛ рдЦреЛрд▓реАрдЪреЗ рдирд┐рдпрдо рдард░рд╡реВ рд╢рдХрддрд╛рдд ("3A рдордзреНрдпреЗ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд 30 рдореБрд▓реЗ").
Namespace рдореНрд╣рдгрдЬреЗ Kubernetes рдЗрдорд╛рд░рддреАрддрд▓реА рдПрдХ рд╡рд░реНрдЧрдЦреЛрд▓реА:
- рджреЛрди teams рдХрдбреЗ
apiрдирд╛рд╡рд╛рдЪреА service рдЕрд╕реВ рд╢рдХрддреЗ тАФ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЦреЛрд▓реНрдпрд╛рдВрдордзреНрдпреЗ. - рдЦреЛрд▓реА delete рдХреЗрд▓реА рдХреА рддрд┐рдЪреНрдпрд╛рддрд▓реЗ рд╕рдЧрд│реЗ рдлреЗрдХрд▓реЗ рдЬрд╛рддреЗ тАФ рдПрдХрд╛рдЪ рдЭрдЯрдХреНрдпрд╛рдд рд╕реНрд╡рдЪреНрдЫ.
- рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрд▓реАрд╡рд░ рдорд░реНрдпрд╛рджрд╛ рдШрд╛рд▓реВ рд╢рдХрддрд╛рдд: "рдпрд╛ project рд▓рд╛ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд 10 CPUs."
рдЖрдкрд▓реНрдпрд╛ рдЦреЛрд▓реАрдЪреЗ рдирд╛рд╡ school рдЖрд╣реЗ, рдЖрдгрд┐ рдпрд╛ repo рдордзрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ object рддрд┐рдЪреНрдпрд╛рддрдЪ рд░рд╛рд╣рддреЛ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart TB
subgraph cluster["ЁЯПл One Kubernetes cluster - the building"]
subgraph ns1["ЁЯЪк namespace: school - our room"]
d1["Deployment school-api"]
d2["Deployment school-analytics"]
s1["Service school-api"]
cm["ConfigMap + Secret"]
end
subgraph ns2["ЁЯЪк namespace: kube-system - the school office"]
dns["CoreDNS, metrics-server..."]
end
subgraph ns3["ЁЯЪк namespace: default"]
x["experiments end up here<br/>if you forget -n ЁЯШЕ"]
end
end
тЭУ рдХрд╛рдп
- Namespace рдореНрд╣рдгрдЬреЗ рдПрдХрд╛ cluster рдЪрд╛ рдирд╛рд╡ рджрд┐рд▓реЗрд▓рд╛ рднрд╛рдЧ. рдмрд╣реБрддреЗрдХ objects рдЪреА рдирд╛рд╡реЗ namespace рдЪреНрдпрд╛ рдЖрдд рдЕрджреНрд╡рд┐рддреАрдп рдЕрд╕рд╛рд╡реА рд▓рд╛рдЧрддрд╛рдд, рд╕рдВрдкреВрд░реНрдг cluster рдордзреНрдпреЗ рдирд╛рд╣реА.
- рдЖрдзреАрдкрд╛рд╕реВрди рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЦреЛрд▓реНрдпрд╛:
default(рддреБрдореНрд╣реА рдирд┐рд╡рдбрд▓реЗ рдирд╛рд╣реА рддрд░ рдЧреЛрд╖реНрдЯреА рдЗрдереЗ рдпреЗрддрд╛рдд),kube-system(Kubernetes рдЪреА рд╕реНрд╡рддрдГрдЪреА рдпрдВрддреНрд░рдгрд╛ тАФ рд╢рд╛рд│реЗрдЪреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп). - Namespaces рд╡рд░ quotas (рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрд▓реАрд▓рд╛ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд CPU/RAM) рдЖрдгрд┐ рдкреНрд░рд╡реЗрд╢рд╛рдЪреЗ рдирд┐рдпрдо (рдзрдбрд╛ 13 RBAC рд▓рд╛ рд╕реНрдкрд░реНрд╢ рдХрд░рддреЛ: "рдЦреЛрд▓реА A рдордзреНрдпреЗ рдлрдХреНрдд team A рдпреЗрдК рд╢рдХрддреЗ") рд▓рд╛рд╡рддрд╛ рдпреЗрддрд╛рдд.
- DNS рдкрдг рдЬреЛрдбрд▓реЗрд▓реЗ рдЖрд╣реЗ: рдЦреЛрд▓реАрдЪреНрдпрд╛ рдЖрдд
school-apiрдЪрд╛рд▓рддреЗ; рджреБрд╕рд▒реНрдпрд╛ рдЦреЛрд▓реАрддреВрди рддреБрдореНрд╣реА рдкреВрд░реНрдг рдирд╛рд╡ рдореНрд╣рдгрддрд╛ тАФschool-api.school.svc.cluster.local("3B рдордзрд▓реА рдРрд╢реНрд╡рд░реНрдпрд╛").
ЁЯдФ рдХрд╛
рдПрдХ cluster рдорд╣рд╛рдЧ рдЕрд╕рддреЛ (рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛: nodes рдЖрдзреАрдЪ EKS тЙИ $73/month!) тАФ рдореНрд╣рдгреВрди teams clusters
рд╡рд╛рдЯреВрди рдШреЗрддрд╛рдд. рдЦреЛрд▓реНрдпрд╛ рдирд╕рддреАрд▓ рддрд░ рдирд╛рд╡реЗ рдЖрдкрд╕рд╛рдд рднрд┐рдбрддреАрд▓, рджреБрд╕рд▒реНрдпрд╛рдВрдЪреНрдпрд╛ рдЧреЛрд╖реНрдЯреА рдЪреБрдХреВрди delete рд╣реЛрддреАрд▓,
рдЖрдгрд┐ "staging рд╕рдЧрд│рд╛ CPU рдЦрд╛рдК рд╢рдХрдд рдирд╛рд╣реА" рдЕрд╕реЗ рд╕рд╛рдВрдЧрд╛рдпрд▓рд╛ рдорд╛рд░реНрдЧ рдирд╕реЗрд▓. Namespaces рдЬрд╛рд╕реНрдд clusters
рди рдШреЗрддрд╛ рд╡реЗрдЧрд│реЗрдкрдгрд╛ рджреЗрддрд╛рдд. рддреЗ рдиреБрдХрд╕рд╛рдирд╛рдЪреА рд╕реНрд╡рдЪреНрдЫ рд╕реАрдорд╛ (blast radius) рдкрдг рдЖрд╣реЗрдд:
kubectl delete namespace school рдпрд╛ project рдордзрд▓реЗ рд╕рдЧрд│реЗ рдХрд╛рдврддреЗ, рдЖрдгрд┐ рдлрдХреНрдд рдпрд╛рдЪ project рдордзрд▓реЗ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
k8s/namespace.yaml рдЫреЛрдЯреА рдЖрд╣реЗ рдкрдг рддреА рд╕рд░реНрд╡рд╛рдд рдЖрдзреА apply рдХрд░рд╛рд╡реА рд▓рд╛рдЧрддреЗ (рдЦреЛрд▓реАрдд рдмрд╛рдХ рдареЗрд╡рдгреНрдпрд╛рдЖрдзреА рдЦреЛрд▓реА рдЕрд╕рд╛рдпрд▓рд╛ рд╣рд╡реА):
apiVersion: v1
kind: Namespace
metadata:
name: school
рдордЧ рдмрд╛рдХреА рдкреНрд░рддреНрдпреЗрдХ manifest metadata.namespace: school рдиреЗ рд╕реНрд╡рддрдГрд▓рд╛ рдпрд╛ рдЦреЛрд▓реАрд╢реА рдЬреЛрдбрддреЗ, рдЖрдгрд┐
рдкреНрд░рддреНрдпреЗрдХ kubectl command рд▓рд╛ -n school рд▓рд╛рдЧрддреЗ тАФ рдореНрд╣рдгреВрдирдЪ рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рдпрд╛ рдзрдбреНрдпрд╛рдВрдордзреНрдпреЗ рд╕рддрдд рджрд┐рд╕рддреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
kubectl apply -f k8s/namespace.yaml
kubectl get namespaces # school, default, kube-system...
kubectl -n school get all # our room's contents
kubectl -n kube-system get pods # peek into the school office ЁЯСА
# Same name, two rooms тАФ totally legal:
kubectl create namespace room-b
kubectl -n room-b create deployment api --image=nginx
kubectl -n school get deploy; kubectl -n room-b get deploy
# Clean sweep of the experiment room:
kubectl delete namespace room-b
ЁЯФз рдпрд╛ рдзрдбреНрдпрд╛рд╕рд╛рдареА kubectl
kubectl get ns ┬╖ kubectl config set-context --current --namespace=school
ЁЯФЧ рдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд: ЁЯкк AWS L02 (groups: рджреБрд╕рд▒реНрдпрд╛ account рд╢рд┐рд╡рд╛рдп рд╡реЗрдЧрд│реЗрдкрдгрд╛)
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
kubectl get all -n school рдлрдХреНрдд school рдЪреЗ objects рджрд╛рдЦрд╡рддреЗ; kubectl get all (default) рддреНрдпрд╛рддрд▓рд╛ рдПрдХрд╣реА рджрд╛рдЦрд╡рдд рдирд╛рд╣реА.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ
kubectl delete namespace school рд╕рдВрдкреВрд░реНрдг рдЦреЛрд▓реА рдХрд╛рдвреВрди рдЯрд╛рдХрддреЗ тАФ рддрд┐рдЪреНрдпрд╛рддрд▓реНрдпрд╛ рд╕рдЧрд│реНрдпрд╛рд╕рд╣
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
-nрд╡рд┐рд╕рд░рдгреЗ рдЖрдгрд┐ рдЧреЛрд╖реНрдЯреАdefaultрдордзреНрдпреЗ рддрдпрд╛рд░ рдХрд░рдгреЗ- рд╢рддреНрд░реБрддреНрд╡ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ tenants рд╕рд╛рдареА namespaces рд▓рд╛ рдкрдХреНрдХреА security рд╕реАрдорд╛ рд╕рдордЬрдгреЗ (рддреНрдпрд╛ рддрд╢рд╛ рдирд╛рд╣реАрдд)
тПня╕П рдкреБрдвреЗ
рдЖрдкрд▓реНрдпрд╛ pods рдирд╛ settings (port numbers) рдЖрдгрд┐ secrets (database passwords) рд▓рд╛рдЧрддрд╛рдд тАФ рдЖрдгрд┐ рддреЗ image рдордзреНрдпреЗрдЪ рднрд╛рдЬреВрди рдЯрд╛рдХрдгреЗ рдореНрд╣рдгрдЬреЗ рдЬреЗрд╡рдгрд╛рдЪрд╛ рдореЗрдиреВ рдбрдмреНрдпрд╛рддрдЪ laminate рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ. рдЖрддрд╛ рдпреЗрддрд╛рдд ConfigMaps рдЖрдгрд┐ Secrets.
git checkout lesson-06-configmaps-secrets