Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

8 апрСля Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Saint HighLoad++ 2019, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… сСкции Β«DevOps ΠΈ эксплуатация», ΠΏΡ€ΠΎΠ·Π²ΡƒΡ‡Π°Π» Π΄ΠΎΠΊΠ»Π°Π΄ Β«Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм KubernetesΒ», Π² создании ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ участвовали Ρ‚Ρ€ΠΈ сотрудника ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«Π€Π»Π°Π½Ρ‚Β». Π’ Π½Ρ‘ΠΌ ΠΌΡ‹ рассказываСм ΠΎ многочислСнных ситуациях, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ возмоТности Kubernetes, Π½ΠΎ для Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ простого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. НСобходимыС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρƒ нас появились Π² Π²ΠΈΠ΄Π΅ Open Source-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΈ ΠΈΠΌ Ρ‚ΠΎΠΆΠ΅ посвящСно это выступлСниС.

По Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ Ρ€Π°Π΄Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ с Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ (50 ΠΌΠΈΠ½ΡƒΡ‚, Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Π΅Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ) ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Ρ‹ΠΆΠΈΠΌΠΊΡƒ Π² тСкстовом Π²ΠΈΠ΄Π΅. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

Π―Π΄Ρ€ΠΎ ΠΈ дополнСния Π² K8s

Kubernetes мСняСт ΠΎΡ‚Ρ€Π°ΡΠ»ΡŒ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π²Π½ΠΎ ΡƒΡΡ‚ΠΎΡΠ»ΠΈΡΡŒ:

  • Благодаря Π΅Π³ΠΎ абстракциям, ΠΌΡ‹ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΡƒΠΆΠ΅ Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌΠΈ понятиями, ΠΊΠ°ΠΊ настройка ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° ΠΈΠ»ΠΈ запуск ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Chef, Ansible…), Π° ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², сСрвисами ΠΈ Ρ‚.ΠΏ.
  • ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ прилоТСния, Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡΡΡŒ ΠΎ Π½ΡŽΠ°Π½ΡΠ°Ρ… Ρ‚ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ: bare metal, ΠΎΠ±Π»Π°ΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΈ Ρ‚.ΠΏ.
  • Π‘ K8s ΠΊΠ°ΠΊ Π½ΠΈΠΊΠΎΠ³Π΄Π° стали доступны Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΏΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ инфраструктуры: Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, самовосстановлСния, отказоустойчивости ΠΈ Ρ‚.ΠΏ.

Однако, разумССтся, всё Π½Π΅ Ρ‚Π°ΠΊ Π³Π»Π°Π΄ΠΊΠΎ: с Kubernetes ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΈ свои β€” Π½ΠΎΠ²Ρ‹Π΅ β€” Π²Ρ‹Π·ΠΎΠ²Ρ‹.

Kubernetes Π½Π΅ являСтся ΠΊΠΎΠΌΠ±Π°ΠΉΠ½ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π―Π΄Ρ€ΠΎ Kubernetes ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° Π½Π°Π±ΠΎΡ€ минимально Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ кластСрС:

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π’ ядрС Kubernetes опрСдСляСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² β€” для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², управлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Π½ΠΈΡ… ΠΌΡ‹ рассказывали Π² Π΄ΠΎΠΊΠ»Π°Π΄Π΅ 2-Π»Π΅Ρ‚Π½Π΅ΠΉ давности.

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, K8s ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΏΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ доступных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” спСцифичныС β€” потрСбности ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π—Π° дополнСния Π² Kubernetes ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ администраторы кластСров, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… кластСр Β«ΠΎΠ±Ρ€Ρ‘Π» Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΒ» [для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΡ… спСцифичных Π·Π°Π΄Π°Ρ‡]. Π§Ρ‚ΠΎ ΠΆΠ΅ это Π·Π° дополнСния Ρ‚Π°ΠΊΠΈΠ΅? Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ

Установив Kubernetes, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΡΠ΅Ρ‚ΡŒ, ΡΡ‚ΠΎΠ»ΡŒ нСобходимая для взаимодСйствия pod’ΠΎΠ² ΠΊΠ°ΠΊ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΡƒΠ·Π»Π°, Ρ‚Π°ΠΊ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ, сама ΠΏΠΎ сСбС Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π―Π΄Ρ€ΠΎ Kubernetes Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ связи β€” вмСсто этого, ΠΎΠ½ΠΎ опрСдСляСт сСтСвой интСрфСйс (CNI) для сторонних Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ сСти.

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π‘Π»ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… (Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ диск, сСтСвоС Π±Π»ΠΎΡ‡Π½ΠΎΠ΅ устройство, Ceph…). Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π² ядрС, Π½ΠΎ с появлСниСм CSI ситуация мСняСтся Π½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ ΡƒΠΆΠ΅ описанной: Π² Kubernetes интСрфСйс, Π° Π΅Π³ΠΎ рСализация β€” Π² сторонних модулях.

Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

  • Ingress-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ (ΠΈΡ… ΠΎΠ±Π·ΠΎΡ€ см. Π² нашСй Π½Π΅Π΄Π°Π²Π½Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅).
  • cert-manager:

    Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

  • ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ β€” это Ρ†Π΅Π»Ρ‹ΠΉ класс Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ (ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ относится ΠΈ упомянутый cert-manager), ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²(Ρ‹) ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€(Ρ‹). Π›ΠΎΠ³ΠΈΠΊΠ° ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нашСй Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠ΅ΠΉ ΠΈ позволяСт ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ инфраструктуры (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘Π£Π‘Π”) Π² ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ (Ρ‡Π΅ΠΌ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ ΠΈΡ… настроСк). ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² написано ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ мноТСство β€” ΠΏΡƒΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… Π΅Ρ‰Ρ‘ ΠΈ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ production, это лишь вопрос Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ:

    Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

  • ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ β€” очСрСдная ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ, ΠΊΠ°ΠΊ Π² Kubernetes ΠΎΡ‚Π΄Π΅Π»ΠΈΠ»ΠΈ интСрфСйс (Metrics API) ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (сторонниС дополнСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Prometheus adapter, Datadog cluster agent…).
  • Для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ статистики, Π³Π΄Π΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π½ΡƒΠΆΠ½Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Prometheus ΠΈ Grafana, Π½ΠΎ ΠΈ kube-state-metrics, node-exporter ΠΈ Ρ‚.ΠΏ.

И это Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список дополнСний… НапримСр, ΠΌΡ‹ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«Π€Π»Π°Π½Ρ‚Β» Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Kubernetes-кластСр Π½Π° сСгодняшний дСнь устанавливаСм 29 Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ (всС ΠΎΠ½ΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΉ слоТности ΡΠΎΠ·Π΄Π°ΡŽΡ‚ 249 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Kubernetes). ΠŸΡ€ΠΎΡ‰Π΅ говоря, ΠΌΡ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΆΠΈΠ·Π½ΠΈ кластСра Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ.

Автоматизация

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ созданы для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ повсСднСвно сталкиваСмся. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ написаниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

  1. Π•ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ (Ρ‚.Π΅. Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ Π»ΠΎΠ³ΠΈΠ½Π°) registry с ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ для прилоТСния. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ pod’Ρƒ привязываСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСкрСт, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² registry. Наша Π·Π°Π΄Π°Ρ‡Π° β€” ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ этого сСкрСта Π² namespace’Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ pod’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ΅Π½ сСкрСт) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ, Π° сами сСкрСты ΠΏΠΎΠ»Π΅Π·Π½ΠΎ рСгулярно ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с раскладываниСм сСкрСтов Ρ€ΡƒΠΊΠ°ΠΌΠΈ ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚. Π’ΡƒΡ‚ ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€: ΠΌΡ‹ создаём ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒΡΡ появлСния namespace’Π° ΠΈ ΠΏΠΎ этому ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ сСкрСт Π² namespace.
  2. ΠŸΡƒΡΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ доступ ΠΈΠ· pod’ΠΎΠ² ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ Π·Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½. Но ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ: Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ доступа Ρ€Π°Π±ΠΎΡ‚Π°Π» просто, Π½Π΅ трСбуя спСцифичных Π½Π°Π²Ρ‹ΠΊΠΎΠ², β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Π»Π΅ΠΉΠ±Π»Π° Π² namespace’Π΅. Как Π½Π°ΠΌ Ρ‚ΡƒΡ‚ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€? Боздаётся ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ появлСния Π»Π΅ΠΉΠ±Π»Π° Π² namespace’Π΅ ΠΈ добавляСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ policy для доступа Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.
  3. БхоТая ситуация: ΠΏΡƒΡΡ‚ΡŒ Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π° ΡƒΠ·Π΅Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ taint, Ссли Π½Π° Π½Ρ‘ΠΌ Π΅ΡΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Π»Π΅ΠΉΠ±Π» (с ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ прСфиксом). ДСйствия с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ очСвидны…

Π’ любом кластСрС Π½Π°Π΄ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ это Π΄Π΅Π»Π°Ρ‚ΡŒ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

ΠŸΠΎΠ΄Ρ‹Ρ‚ΠΎΠΆΠΈΠ²Π°Ρ всС описанныС истории, ΠΌΡ‹ для сСбя ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ для ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Kubernetes трСбуСтся: Π°) ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ дополнСния, Π±) Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ повсСднСвных админских Π·Π°Π΄Π°Ρ‡).

Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ для Kubernetes?

Π’ Ρ†Π΅Π»ΠΎΠΌ схСма проста:

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

… Π½ΠΎ Ρ‚ΡƒΡ‚ выясняСтся, Ρ‡Ρ‚ΠΎ:

  • Kubernetes API β€” достаточно Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‰ΡŒ, которая Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для освоСния;
  • ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ (язык Go Π²Ρ‹Π±Ρ€Π°Π½ ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ для Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ β€” Operator SDK);
  • с Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌ аналогичная ситуация.

Π˜Ρ‚ΠΎΠ³: для написания ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°) приходится ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ сущСствСнныС рСсурсы для изучСния матчасти. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ для Β«Π±ΠΎΠ»ΡŒΡˆΠΈΡ…Β» ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² β€” скаТСм, для Π‘Π£Π‘Π” MySQL. Но Ссли ΠΌΡ‹ вспомним описанныС Π²Ρ‹ΡˆΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ (раскладываниС сСкрСтов, доступ pod’ΠΎΠ² Π² интСрнСт…), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хочСтся Ρ‚ΠΎΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠΉΠΌΡ‘ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ усилия пСрСвСсят Π½ΡƒΠΆΠ½Ρ‹ΠΉ сСйчас Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π΄ΠΈΠ»Π΅ΠΌΠΌΠ°: ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ рСсурсов ΠΈ обрСсти ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ инструмСнт для написания ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΏΠΎ старинкС» (Π½ΠΎ быстро). Для Π΅Ρ‘ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β€” нахоТдСния компромисса ΠΌΠ΅ΠΆΠ΄Ρƒ этими крайностями β€” ΠΌΡ‹ создали свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚: shell-operator (см. Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΈΠΉ анонс Π½Π° Ρ…Π°Π±Ρ€Π΅).

Shell-operator

Как ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π’ кластСрС Π΅ΡΡ‚ΡŒ pod, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π»Π΅ΠΆΠΈΡ‚ Go-Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ с shell-operator. Рядом с Π½ΠΈΠΌ хранится Π½Π°Π±ΠΎΡ€ Ρ…ΡƒΠΊΠΎΠ² (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Π½ΠΈΡ… β€” см. Π½ΠΈΠΆΠ΅). Π‘Π°ΠΌ shell-operator подписываСтся Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ события Π² Kubernetes API, ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ наступлСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ запускаСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ…ΡƒΠΊΠΈ.

Как shell-operator ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ Ρ…ΡƒΠΊΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… событиях Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ? Π­Ρ‚Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ shell-operator’Ρƒ сами Ρ…ΡƒΠΊΠΈ ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΎΠ½ΠΈ это ΠΎΡ‡Π΅Π½ΡŒ просто.

Π₯ΡƒΠΊ β€” это скрипт Π½Π° Bash ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ исполняСмый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ --config ΠΈ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π½Π΅Π³ΠΎ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ JSON. ПослСдний опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ ΠΈ Π½Π° ΠΊΠ°ΠΊΠΈΠ΅ события (для этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²) слСдуСт Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° shell-operator ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² β€” раскладываниС сСкрСтов для доступа ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΌΡƒ registry с ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ прилоТСния. Она состоит ΠΈΠ· Π΄Π²ΡƒΡ… этапов.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°: 1. ПишСм Ρ…ΡƒΠΊ

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π² Ρ…ΡƒΠΊΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ --config, ΡƒΠΊΠ°Π·Π°Π², Ρ‡Ρ‚ΠΎ нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ namespace’Ρ‹, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ β€” ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΡ… создания:

[[ $1 == "--config" ]] ; then
  cat << EOF
{
  "onKubernetesEvent": [
    {
      "kind": "namespace",
      "event": ["add"]
    }
  ]
}
EOF
…

Как Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠ°? Π’ΠΎΠΆΠ΅ довольно просто:

…
else
  createdNamespace=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH)
  kubectl create -n ${createdNamespace} -f - << EOF
Kind: Secret
...
EOF
fi

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом ΠΌΡ‹ ΡƒΠ·Π½Π°Ρ‘ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ namespace Π±Ρ‹Π» создан, Π° Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ β€” создаём Ρ‡Π΅Ρ€Π΅Π· kubectl сСкрСт для этого пространства ΠΈΠΌΡ‘Π½.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°: 2. Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π·

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ созданный Ρ…ΡƒΠΊ shell-operator’Ρƒ β€” ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? Π‘Π°ΠΌ shell-operator поставляСтся Π² Π²ΠΈΠ΄Π΅ Docker-ΠΎΠ±Ρ€Π°Π·Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ наша Π·Π°Π΄Π°Ρ‡Π° β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ…ΡƒΠΊ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² этом ΠΎΠ±Ρ€Π°Π·Π΅:

FROM flant/shell-operator:v1.0.0-beta.1
ADD my-handler.sh /hooks

ΠžΡΡ‚Π°Π½Π΅Ρ‚ΡΡ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ push’Π½ΡƒΡ‚ΡŒ:

$ docker build -t registry.example.com/my-operator:v1 .
$ docker push registry.example.com/my-operator:v1

Π€ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΡ‚Ρ€ΠΈΡ… β€” Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² кластСр. Для этого напишСм Deployment:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-operator
spec:
  template:
    spec:
      containers:
      - name: my-operator
        image: registry.example.com/my-operator:v1 # 1
      serviceAccountName: my-operator              # 2

Π’ Π½Ρ‘ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°:

  1. ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданного ΠΎΠ±Ρ€Π°Π·Π°;
  2. это систСмный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ (ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ) Π½ΡƒΠΆΠ½Ρ‹ ΠΏΡ€Π°Π²Π° Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° события Π² Kubernetes ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ сСкрСты ΠΏΠΎ namespace’Π°ΠΌ, поэтому ΠΌΡ‹ создаём для Ρ…ΡƒΠΊΠ° ServiceAccount (ΠΈ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»).

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ для Kubernetes способом, создав ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ для раскладывания сСкрСтов.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности shell-operator

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ…ΡƒΠΊ, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ, отбирая ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ Π»Π΅ΠΉΠ±Π»Π°ΠΌ (ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ matchExpressions):

"onKubernetesEvent": [
  {
    "selector": {
      "matchLabels": {
        "foo": "bar",
       },
       "matchExpressions": [
         {
           "key": "allow",
           "operation": "In",
           "values": ["wan", "warehouse"],
         },
       ],
     }
     …
  }
]

ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ jq-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° β€” позволяСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ большиС JSON’Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² малСнькиС, Π³Π΄Π΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ…ΡƒΠΊΠ° shell-operator ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ Π΅ΠΌΡƒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π»ΡŽΠ±Ρ‹Ρ… Π½ΡƒΠΆΠ΄.

Бобытия, ΠΏΡ€ΠΈ наступлСнии ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ…ΡƒΠΊΠΈ, Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Kubernetes events: Π² shell-operator прСдусмотрСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²Ρ‹Π·ΠΎΠ²Π° Ρ…ΡƒΠΊΠΎΠ² ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ crontab Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ΅), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ события onStartup. ВсС эти события ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ…ΡƒΠΊ.

И Π΅Ρ‰Ρ‘ Π΄Π²Π΅ особСнности shell-operator:

  1. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ асинхронно. Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° получСния события Kubernetes (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) Π² кластСрС ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ события (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°), ΠΈ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ…ΡƒΠΊΠ°Ρ…. Если Ρ…ΡƒΠΊ выполнился с ошибкой, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ (это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ).
  2. Он экспортируСт ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ для Prometheus, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ shell-operator, ΡƒΠ·Π½Π°Ρ‚ΡŒ количСство ошибок ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ…ΡƒΠΊΡƒ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Подводя ΠΈΡ‚ΠΎΠ³ этой части Π΄ΠΎΠΊΠ»Π°Π΄Π°:

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Установка Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ

Для ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Kubernetes Π±Ρ‹Π»Π° Ρ‚Π°ΠΊΠΆΠ΅ упомянута Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ установки Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ. О Π½Π΅ΠΉ я расскаТу Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡƒΡ‚ΠΈ нашСй ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ это сСйчас.

Π Π°Π±ΠΎΡ‚Ρƒ с Kubernetes ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… кластСров, СдинствСнным Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π» Ingress. Π’ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ кластСр Π΅Π³ΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, ΠΈ ΠΌΡ‹ сдСлали нСсколько YAML-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ: bare metal, AWS…

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΎΠ² ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡŒ большС β€” большС ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡŒ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π»ΠΈ сами эти ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ стали довольно Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹ΠΌΠΈ:

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π§Ρ‚ΠΎΠ±Ρ‹ привСсти всё Π² порядок, ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ со скрипта (install-ingress.sh), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏ кластСра, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒΡΡ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π» Π½ΡƒΠΆΠ½ΡƒΡŽ YAML-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈ Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Π» Π΅Ρ‘ Π² Kubernetes.

Если Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅, Ρ‚ΠΎ дальнСйший наш ΠΏΡƒΡ‚ΡŒ ΠΈ связанныС с Π½ΠΈΠΌ рассуТдСния Π±Ρ‹Π»ΠΈ Ρ‚Π°ΠΊΠΎΠ²Ρ‹:

  • для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с YAML-конфигурациями трСбуСтся ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€ (Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… этапах это простой sed);
  • с ростом числа кластСров ΠΏΡ€ΠΈΡˆΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ для автоматичСского обновлСния (самоС Ρ€Π°Π½Π½Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ β€” ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ скрипт Π² Git, ΠΏΠΎ cron’Ρƒ Π΅Π³ΠΎ обновляСм ΠΈ запускаСм);
  • схоТий скрипт потрСбовался для Prometheus (install-prometheus.sh), ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»Π΅Π½ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС Π²Π²ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ (ΠΏΠΎ-Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌΡƒ β€” Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈ Π² кластСрС), ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (ΠΏΠ°Ρ€ΠΎΠ»ΠΈ) ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

    Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

  • риск Π²Ρ‹ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π½Π° растущСС число кластСров постоянно рос, поэтому ΠΌΡ‹ поняли, Ρ‡Ρ‚ΠΎ инсталляторам (Ρ‚.Π΅. Π΄Π²ΡƒΠΌ скриптам: для Ingress ΠΈ Prometheus) понадобилось стСйдТированиС (нСсколько Π²Π΅Ρ‚ΠΎΠΊ Π² Git, нСсколько cron’ΠΎΠ² Π½Π° ΠΈΡ… ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…: ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ тСстовых β€” кластСрах);
  • с kubectl apply стало слоТно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ являСтся Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ ΡƒΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΈΡ… статусу/ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ…;
  • Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π»ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π° Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ совсСм Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ:
    • ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ контроля Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° обновлСния кластСров,
    • автоматичСского опрСдСлСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Π²Π²ΠΎΠ΄Π½Ρ‹Ρ… для скриптов установки) Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· кластСра (discovery),
    • Π΅Π³ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ развития Π² Π²ΠΈΠ΄Π΅ continuous discovery.

Π’Π΅ΡΡŒ этот Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ своСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€” addon-operator.

Addon-operator

Π’ Π΅Π³ΠΎ основС β€” ΡƒΠΆΠ΅ упомянутый shell-operator. Вся систСма ΠΆΠ΅ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

К Ρ…ΡƒΠΊΠ°ΠΌ shell-operator’Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ:

  • Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ values,
  • Helm-Ρ‡Π°Ρ€Ρ‚,
  • ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдит Π·Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ values ΠΈ β€” Π² случаС ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ β€” просит Helm ΠΏΠ΅Ρ€Π΅Π²Ρ‹ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ Ρ‡Π°Ρ€Ρ‚.

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° событиС Π² Kubernetes, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ…ΡƒΠΊ, Π° ΠΈΠ· этого Ρ…ΡƒΠΊΠ° β€” внСсти измСнСния Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, послС Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Ρ‹ΠΊΠ°Ρ‡Π΅Π½ Ρ‡Π°Ρ€Ρ‚. Π’ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅ΠΉΡΡ схСмС ΠΌΡ‹ выдСляСм Π½Π°Π±ΠΎΡ€ Ρ…ΡƒΠΊΠΎΠ² ΠΈ Ρ‡Π°Ρ€Ρ‚ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ:

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мноТСство, Π° ΠΊ Π½ΠΈΠΌ ΠΌΡ‹ добавляСм Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ…ΡƒΠΊΠΈ, глобальноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ values ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдит Π·Π° этим Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π² Kubernetes Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ происходит, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π° это ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ глобального Ρ…ΡƒΠΊΠ° ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² глобальном Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‡Π΅Π½ΠΎ ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π²Ρ‹ΠΊΠ°Ρ‚ всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² кластСрС:

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π­Ρ‚Π° схСма удовлСтворяСт всСм трСбованиям ΠΊ установкС Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ ΠΎΠ·Π²ΡƒΡ‡Π΅Π½Ρ‹ Π²Ρ‹ΡˆΠ΅:

  • Π—Π° ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Helm.
  • Вопрос автообновлСния Ρ€Π΅ΡˆΡ‘Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ глобального Ρ…ΡƒΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ Ρ…ΠΎΠ΄ΠΈΡ‚ Π² registry ΠΈ, Ссли Π²ΠΈΠ΄ΠΈΡ‚ Ρ‚Π°ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· систСмы, ΠΏΠ΅Ρ€Π΅Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‘ (Ρ‚.Π΅. «сам сСбя»).
  • Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ настроСк Π² кластСрС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ConfigMap, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ записаны ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ (ΠΏΡ€ΠΈ стартС ΠΎΠ½ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°).
  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ, discovery ΠΈ continuous discovery Ρ€Π΅ΡˆΠ΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠΎΠ².
  • Π‘Ρ‚Π΅ΠΉΠ΄ΠΆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ достигнуто благодаря Ρ‚Π΅Π³Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Docker ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ.
  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° производится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ статус.

Вся эта систСма Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π²ΠΈΠ΄Π΅ СдинствСнного Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ° Π½Π° Go, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ addon-operator. Благодаря этому схСма выглядит ΠΏΡ€ΠΎΡ‰Π΅:

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ ΠΈ дополняСм Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° этой схСмС β€” Π½Π°Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ сСрым Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π²Π½ΠΈΠ·Ρƒ). Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ нСбольшими усилиями Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ дополнСния ΠΈ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ установлСно Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ кластСр, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΅ΠΌΡƒ события Π² кластСрС.

Β«Π€Π»Π°Π½Ρ‚Β» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ addon-operator Π½Π° 70+ Kubernetes-кластСрах. Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ статус β€” Π°Π»ΡŒΡ„Π°-вСрсия. БСйчас ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±Π΅Ρ‚Ρƒ, Π° ΠΏΠΎΠΊΠ° Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ доступны ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой addon.

Π“Π΄Π΅ Π²Π·ΡΡ‚ΡŒ сами ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для addon-operator? ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ своСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ β€” ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап для нас, ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π»Π΅Ρ‚ΠΎΠΌ.

Π’ΠΈΠ΄Π΅ΠΎ ΠΈ слайды

Π’ΠΈΠ΄Π΅ΠΎ с выступлСния (~50 ΠΌΠΈΠ½ΡƒΡ‚):

ΠŸΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄Π°:

P.S.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, вас Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ:

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