Π›ΡƒΡ‡ΡˆΠΈΠ΅ 10 хитростСй ΠΈ совСтов ΠΏΠΎ Kubernetes

Π›ΡƒΡ‡ΡˆΠΈΠ΅ 10 хитростСй ΠΈ совСтов ΠΏΠΎ Kubernetes

Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ справочной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° самыми Ρ†Π΅Π½Π½Ρ‹ΠΌΠΈ становятся самыС простыС совСты. Команда Kubernetes aaS ΠΎΡ‚ Mail.ru ΠΏΠ΅Ρ€Π΅Π²Π΅Π»Π° ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΡƒ ΠΈΠ· дСсяти хитростСй ΠΈ совСтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π²Ρ‚ΠΎΡ€ ΡΡ‚Π°Ρ‚ΡŒΠΈ собрала послС Π³ΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Kubernetes. Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ Π½Π΅ отсортированы ΠΏΠΎ ваТности, Π½ΠΎ Π΄ΡƒΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½Π°ΠΉΠ΄Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ для сСбя.

Бамая простая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с Kubernetes

Для Π½Π°Ρ‡Π°Π»Π°, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, самоС простоС ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ дСйствиС Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с Kubernetes. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ kubectl Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ bash:

echo "source <(kubectl completion bash)" >> ~/.bashrc

АвтозаполнСниС kubectl ΠΏΡ€ΠΎΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Ρ„Π°ΠΉΠ» .bashrc ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ запускС ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Π­Ρ‚ΠΎ ускоряСт Π½Π°Π±ΠΎΡ€ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ all-namespaces. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π² справкС Kubernetes ΠΏΠΎ bash.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ 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.

Π›ΡƒΡ‡ΡˆΠΈΠ΅ 10 хитростСй ΠΈ совСтов ΠΏΠΎ Kubernetes
Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ

Π₯ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ локально Π² этом кластСрС. Если Π½Π΅ Π΄Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ, Docker-ΠΎΠ±Ρ€Π°Π· Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π° Π½Π΅ Π² кластСрС.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Docker ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кластСр Kubernetes, Π΄ΠΎΠΊΠ΅Ρ€-машинС даСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°:

eval $(minikube docker-env)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ прилоТСния Π½Π° локальном кластСрС Kubernetes.

НС Ρ€Π°Π·Π΄Π°Π²Π°ΠΉΡ‚Π΅ доступ kubectl всСм подряд

Π­Ρ‚ΠΎ каТСтся ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ, Π½ΠΎ Ссли нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ΄ΠΈΠ½ кластСр (для Ρ‡Π΅Π³ΠΎ ΠΈ Π±Ρ‹Π» создан Kubernetes), Π½Π΅ стоит просто Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ всСм подряд kubectl. Π›ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Ρ‹Π΄Π΅Π»ΠΈΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… своС пространство ΠΈΠΌΠ΅Π½ ΠΈ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ² доступ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌΠΈ RBAC.

МоТно Π·Π°ΠΌΠΎΡ€ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ, прописывая для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π° ΠΏΡ€Π°Π²Π° Π½Π° доступ, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, созданиС, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Но Π³Π»Π°Π²Π½ΠΎΠ΅ β€” ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ сСкрСтам, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ² Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ администраторам. Π’Π°ΠΊ ΠΌΡ‹ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ кластСр, ΠΈ Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ просто Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π½Π΅ΠΌ.

УправляйтС Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ²

Как Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ отсутствиС простоСв для прилоТСния Π² кластСрС Kubernetes? PodDisruptionBudget ΠΈ Π΅Ρ‰Ρ‘ Ρ€Π°Π· PodDisruptionBudget.

ΠšΠ»Π°ΡΡ‚Π΅Ρ€Ρ‹ пСриодичСски ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ, Π° ΡƒΠ·Π»Ρ‹ ΠΎΠΏΡƒΡΡ‚ΠΎΡˆΠ°ΡŽΡ‚ΡΡ. Ничто Π½Π΅ стоит Π½Π° мСстС, Ρ‚Π°ΠΊΠΎΠ²Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ инстансом слСдуСт ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ PDB (PodDisruptionBudget). Он создаСтся Π² простом Ρ„Π°ΠΉΠ»Π΅ yaml, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСтся ΠΊ кластСру. ΠžΠ±Π»Π°ΡΡ‚ΡŒ покрытия ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ PDB опрСдСляСтся сСлСкторами ΠΌΠ΅Ρ‚ΠΎΠΊ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π‘ΡŽΠ΄ΠΆΠ΅Ρ‚ PDB учитываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎΠΌ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΈ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° (voluntary disruption). Π’ ситуациях Π²Ρ€ΠΎΠ΄Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… сбоСв 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. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ свободно ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ запросы Π½Π° основС ΠΌΠ΅Ρ‚ΠΎΠΊ. Π’ 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.

ΠŸΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ Mail.ru Cloud Solutions

Π§Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ:

  1. Π’Ρ€ΠΈ уровня Π°Π²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π² Kubernetes ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
  2. Π Π°Π±ΠΎΡ‡ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ Kubernetes: ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΈΠ»ΠΈ ΠΌΠ°Π»ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΡ…?
  3. 25 ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… инструмСнтов для развСртывания ΠΈ управлСния Kubernetes.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com