Π ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠ°ΠΌΡΠΌΠΈ ΡΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΠ°ΠΌΡΠ΅ ΠΏΡΠΎΡΡΡΠ΅ ΡΠΎΠ²Π΅ΡΡ. ΠΠΎΠΌΠ°Π½Π΄Π°
Π‘Π°ΠΌΠ°Ρ ΠΏΡΠΎΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ Kubernetes
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π°, ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ Kubernetes. Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ kubectl
Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ bash:
echo "source <(kubectl completion bash)" >> ~/.bashrc
ΠΠ²ΡΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ kubectl
ΠΏΡΠΎΠΏΠΈΡΠ΅ΡΡΡ Π² ΡΠ°ΠΉΠ» .bashrc ΠΈ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ. ΠΡΠΎ ΡΡΠΊΠΎΡΡΠ΅Ρ Π½Π°Π±ΠΎΡ Π΄Π»ΠΈΠ½Π½ΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ all-namespaces
. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ Π²
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π° ΠΏΠ°ΠΌΡΡΡ ΠΈ CPU Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½
ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π΅Π²Π΅ΡΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ, ΡΠΎ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠ΅ΡΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ. Π Π΅ΡΠ»ΠΈ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π΄Π΅ΠΏΠ»ΠΎΠ΅ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΡΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠ±ΠΎΡ ΡΠ·Π»Π°.
Π§ΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΡΠ°ΠΊΠΎΠ΅, Kubernetes ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½. ΠΠ½ΠΈ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ yaml Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°:
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΊΠΎΠΉ yaml ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊ Π»ΡΠ±ΠΎΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΈΠΌΠ΅Π½. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΈΠΌΠ΅Π½ limit-example
. Π’Π΅ΠΏΠ΅ΡΡ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠΎΠ³ΠΎ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, Π±ΡΠ΄Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π»ΠΈΠΌΠΈΡ 512Mi, Π΅ΡΠ»ΠΈ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π΄ΡΡΠ³ΠΎΠΉ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠΉ Π»ΠΈΠΌΠΈΡ.
Π£Π±ΠΎΡΠΊΠ° ΠΌΡΡΠΎΡΠ° Π² ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΡΡ Kubernetes
Kubelet ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ±ΠΎΡΠΊΡ ΠΌΡΡΠΎΡΠ°, ΠΊΠΎΠ³Π΄Π° var/lib/docker Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 90 % Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°. ΠΡΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ Kubernetes 1.7 Π½Π΅ Π±ΡΠ»ΠΎ Π»ΠΈΠΌΠΈΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² inode (ΠΈΠ½ΠΎΠ΄ΠΎΠ²), ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅.
ΠΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ var/lib/docker ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ 50 % Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΠ½ΠΎΠ΄Ρ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΡΠ°Π±ΠΎΡΠ΅ Π²ΠΎΡΠΊΠ΅ΡΠΎΠ².
Π ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΡΡ kubelet ΠΎΡ 1.4 Π΄ΠΎ 1.6 ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠ»Π°Π³:
--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%
Π 1.7 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π΅ΠΆΠΈΡ Π²Π΅ΡΡΠΈΡΡ ΡΡΠΎΡ ΡΠ»Π°Π³ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ»Π΅Π΄ΡΡ Π·Π° Π»ΠΈΠΌΠΈΡΠΎΠΌ ΠΈΠ½ΠΎΠ΄ΠΎΠ².
Minikubeβ¦ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ, Π½ΠΎ ΠΌΠΎΡΠ½ΡΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Kubernetes
Minikube β ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΏΡΡΡΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Kubernetes. ΠΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
minikube start
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Ρ Π²Π°Ρ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Kubernetes.
Π₯ΠΈΡΡΠΎΡΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ±ΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π² ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅. ΠΡΠ»ΠΈ Π½Π΅ Π΄Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΠΉ, Docker-ΠΎΠ±ΡΠ°Π· Π±ΡΠ΄Π΅Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ Π½Π° Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, Π° Π½Π΅ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅.
Π§ΡΠΎΠ±Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Docker ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΠ±ΡΠ°Π· Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Kubernetes, Π΄ΠΎΠΊΠ΅Ρ-ΠΌΠ°ΡΠΈΠ½Π΅ Π΄Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°:
eval $(minikube docker-env)
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Kubernetes.
ΠΠ΅ ΡΠ°Π·Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΡΡΡΠΏ kubectl Π²ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΡΠ΄
ΠΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡΠ΅Ρ (Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΈ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ Kubernetes), Π½Π΅ ΡΡΠΎΠΈΡ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ΄Π°Π²Π°ΡΡ Π²ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΡΠ΄ kubectl
. ΠΡΡΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π²ΡΠ΄Π΅Π»ΠΈΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ
ΡΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΈ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠΈΠ² Π΄ΠΎΡΡΡΠΏ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ RBAC.
ΠΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠΎΡΠΎΡΠΈΡΡΡΡ, ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π° ΠΏΡΠ°Π²Π° Π½Π° Π΄ΠΎΡΡΡΠΏ, ΡΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ β ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΠΊΡΠ΅ΡΠ°ΠΌ, ΡΠ°Π·ΡΠ΅ΡΠΈΠ² Π΅Π³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°ΠΌ. Π’Π°ΠΊ ΠΌΡ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠΈΠΌ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ, ΠΈ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°ΡΡΡΡ Π² Π½Π΅ΠΌ.
Π£ΠΏΡΠ°Π²Π»ΡΠΉΡΠ΅ Π±ΡΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ²
ΠΠ°ΠΊ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅Π² Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Kubernetes? PodDisruptionBudget ΠΈ Π΅ΡΡ ΡΠ°Π· PodDisruptionBudget.
ΠΠ»Π°ΡΡΠ΅ΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ, Π° ΡΠ·Π»Ρ ΠΎΠΏΡΡΡΠΎΡΠ°ΡΡΡΡ. ΠΠΈΡΡΠΎ Π½Π΅ ΡΡΠΎΠΈΡ Π½Π° ΠΌΠ΅ΡΡΠ΅, ΡΠ°ΠΊΠΎΠ²Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΡ. Π ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ PDB (PodDisruptionBudget). ΠΠ½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ yaml, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ΅ΡΡ. ΠΠ±Π»Π°ΡΡΡ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ PDB ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΌΠ΅ΡΠΎΠΊ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΡΠ΄ΠΆΠ΅Ρ PDB ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠΈΠΌΠΎΠΌ Π½Π°ΡΡΡΠ΅Π½ΠΈΠΈ Π±ΡΠ΄ΠΆΠ΅ΡΠ° (
ΠΡΠΈΠΌΠ΅Ρ PDB:
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: app-a-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: app-a
ΠΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° β ΡΡΠΎ matchLabels
ΠΈ minAvailable
. Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, Π΄Π»Ρ ΠΊΠ°ΠΊΠΈΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π±ΡΠ΄ΠΆΠ΅Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π΄Π΅ΠΏΠ»ΠΎΠΈ Ρ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ app: app-a
ΠΈ app: app-b
, ΡΠΎ Π΄Π°Π½Π½ΡΠΉ PDB Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ minAvailable
ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΎΠΏΡΡΡΠΎΡΠ΅Π½ΠΈΠΈ (ΠΎΡΠΈΡΡΠΊΠ΅) ΡΠ·Π»Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΏΡΡΡΠΎΡΠ΅Π½ΠΈΡ Π²ΡΡΠ΅ΡΠ½ΡΡΡΡΡ Π²ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΡ app: app-a
, ΠΊΡΠΎΠΌΠ΅ Π΄Π²ΡΡ
.
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈΡΠΏΡΠ°Π²Π½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π’Π°ΠΊΠΎΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ± Readiness ΠΈΠ»ΠΈ Liveness.
ΠΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ±Π° (readiness) ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΊ ΠΏΡΠΈΠ΅ΠΌΡ ΡΡΠ°ΡΠΈΠΊΠ°.
ΠΡΠΎΡΠ°Ρ (liveness) ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΈΡΠΏΡΠ°Π²Π΅Π½ Π»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ.
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² yaml Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ. Π’Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ°ΠΉΠΌΠ°ΡΡΡ, Π²ΡΠ΅ΠΌΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ
ΠΏΡΠΎΠ±. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎ Π½ΠΈΡ
ΡΠΌΠΎΡΡΠΈΡΠ΅
ΠΠ΅ΡΠΊΠΈ Π²Π΅Π·Π΄Π΅
ΠΠ΅ΡΠΊΠΈ β ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ½ΡΡΠΈΠΉ Π² Kubernetes. ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠΊ. Π Kubernetes ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΊΠ°ΠΌ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅, Π½ΠΎ Ρ ΠΎΡΠΎΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅.
ΠΠΎΠΏΡΡΡΠΈΠΌ, Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ΅Ρ Π΄Π»Ρ dev
ΠΈ qa
. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ app-a
, ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π΅ Π² ΠΎΠ±Π΅ΠΈΡ
ΡΡΠ΅Π΄Π°Ρ
qa
ΠΈ dev
. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΊ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅, ΡΠΊΠ°Π·Π°Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ environment
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, app: app-a
ΠΈ environment: dev
Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, Π° app: app-a
ΠΈ environment: qa
Π΄Π»Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ.
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΠ±ΠΎΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠ°Π²Π΅Π΄ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ
Kubernetes β ΠΎΡΠ΅Π½Ρ ΠΌΠΎΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, Π½ΠΎ Π»ΡΠ±Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π² ΠΈΡΠΎΠ³Π΅ ΡΠΏΠΎΡΠΎΠ±Π½Π° ΡΠ²ΡΠ·Π½ΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². Kubelet Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π²ΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π²Π°ΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΎΠ΄Π½Π° Π±Π΅ΡΡ ΠΎΠ·Π½Π°Ρ ΡΠ»ΡΠΆΠ±Π° Π½Π΅ Π·Π°ΡΠΎΡΠΌΠΎΠ·ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π° Kubernetes ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°ΡΡΡΠΈΡΠ°Π½ Π½Π° ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎ Π΅ΡΠ»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½, kubelet Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π·Π°Ρ Π»Π΅Π±ΡΠ²Π°ΡΡΡΡ.
ΠΡΠ»ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Π²Ρ ΡΠ΄Π°Π»ΡΠ΅ΡΠ΅ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ (ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΎΠ±ΡΠ°Π·, ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ), ΠΏΡΠΎΡΡΠΎ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΎΡΠΈΡΡΠΊΠ΅.
ΠΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ Go
ΠΠ»Π°Π²Π½ΡΠΉ ΡΠΎΠ²Π΅Ρ ΠΌΡ ΠΏΡΠΈΠ±Π΅ΡΠ΅Π³Π»ΠΈ Π½Π°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ. ΠΠ·ΡΡΠΈΡΠ΅ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Go.
Kubernetes ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π½Π° Go, Π²ΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π½Π° Go, Π° Π΅ΡΠ΅ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° client-go.
ΠΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ Π²Π΅ΡΠ΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ Kubernetes Π½Π° ΡΠ²ΠΎΠΉ Π²ΠΊΡΡ. Π’Π°ΠΊ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ , ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΡΠΈΡΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ².
ΠΠ·ΡΡΠΈΡΡ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Go ΠΈ ΠΎΡΠ²ΠΎΠΈΡΡ client-go β ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΡΠ°ΠΌΡΠΉ Π²Π°ΠΆΠ½ΡΠΉ ΡΠΎΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Kubernetes.
Π§ΡΠΎ Π΅ΡΠ΅ ΠΏΠΎΡΠΈΡΠ°ΡΡ:
Π’ΡΠΈ ΡΡΠΎΠ²Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Kubernetes ΠΈ ΠΊΠ°ΠΊ ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ .Π Π°Π±ΠΎΡΠΈΠ΅ ΡΠ·Π»Ρ Kubernetes: ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ ΠΈΠ»ΠΈ ΠΌΠ°Π»ΠΎ Π±ΠΎΠ»ΡΡΠΈΡ ?25 ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Kubernetes .
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com