ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Kubernetes CCM (Cloud Controller Manager) для ЯндСкс.Облака

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Kubernetes CCM (Cloud Controller Manager) для ЯндСкс.Облака

Π’ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΊ Π½Π΅Π΄Π°Π²Π½Π΅ΠΌΡƒ Ρ€Π΅Π»ΠΈΠ·Ρƒ CSI-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° для ЯндСкс.Облака ΠΌΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Open Source-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для этого ΠΎΠ±Π»Π°ΠΊΠ° β€” Cloud Controller Manager. CCM Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для кластСра Π² Ρ†Π΅Π»ΠΎΠΌ, Π½ΠΎ ΠΈ собствСнно CSI-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎ Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΠΌ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π—Π°Ρ‡Π΅ΠΌ это?

ΠœΠΎΡ‚ΠΈΠ²Ρ‹, ΠΏΠΎΠ±ΡƒΠ΄ΠΈΠ²ΡˆΠΈΠ΅ нас ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ CCM для ЯндСкс.Облака, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΡƒΠΆΠ΅ описанными Π² анонсС CSI-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠœΡ‹ обслуТиваСм мноТСство Kubernetes-кластСров Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ², для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ инструмСнт. Он Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ многочислСнныС удобства Β«Π² ΠΎΠ±Ρ…ΠΎΠ΄Β» managed-Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ этих ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π”Π°, Ρƒ нас довольно спСцифичный случай ΠΈ потрСбности, ΠΎΠ΄Π½Π°ΠΊΠΎ созданныС ΠΈΠ·-Π·Π° Π½ΠΈΡ… Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ.

Π§Ρ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‚Π°ΠΊΠΎΠ΅ CCM?

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΡƒΡŽ нас срСду для кластСра ΠΈΠ·Π²Π½Π΅ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Terraform. Но ΠΈΠ½ΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΉ нас ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ срСдой ΠΈΠ· кластСра. Вакая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прСдусмотрСна, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Ρ‘ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ CCM.

Π’ частности, Cloud Controller Manager обСспСчиваСт ΠΏΡΡ‚ΡŒ основных Ρ‚ΠΈΠΏΠΎΠ² взаимодСйствия:

  1. Instances – Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ связь 1:1 ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΡƒΠ·Π»Π° Π² Kubernetes (Node) ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Π² ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π΅. Для этого ΠΌΡ‹:
    • заполняСм ΠΏΠΎΠ»Π΅ spec.providerID Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Node. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, для OpenStack CCM это ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. МоТно Π²ΠΈΠ΄Π΅Ρ‚ΡŒ имя ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ UUID server’а (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Π² OpenStack) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°;
    • дополняСм nodeInfo Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Node ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС. НапримСр, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ instance type Π² AWS;
    • провСряСм Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² ΠΎΠ±Π»Π°ΠΊΠ΅. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Node ΠΏΠ΅Ρ€Π΅ΡˆΡ‘Π» Π² состояниС NotReady, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, сущСствуСт Π»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Π² ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π΅ ΠΏΠΎ providerID. Если Π΅Ρ‘ Π½Π΅Ρ‚ β€” удаляСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Node, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС остался Π±Ρ‹ Π² кластСрС Π½Π°Π²Π΅Ρ‡Π½ΠΎ;
  2. Zones – Π·Π°Π΄Π°Ρ‘Ρ‚ failure domain для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Node, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΌΠΎΠ³ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡƒΠ·Π΅Π» для Pod’а согласно Ρ€Π΅Π³ΠΈΠΎΠ½Π°ΠΌ ΠΈ Π·ΠΎΠ½Π°ΠΌ Π² ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π΅;
  3. LoadBalancer – ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Service с Ρ‚ΠΈΠΏΠΎΠΌ LoadBalancer создаёт Π½Π΅ΠΊΠΈΠΉ балансировщик, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈΠ·Π²Π½Π΅ ΠΊ ΡƒΠ·Π»Π°ΠΌ кластСра. НапримСр, Π² Yandex.Cloud ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NetworkLoadBalancer ΠΈ TargetGroup для этих Ρ†Π΅Π»Π΅ΠΉ;
  4. Route – строит ΡΠ΅Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ, Ρ‚.ΠΊ. ΠΏΠΎ трСбованиям Kubernetes ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ pod Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ свой IP-адрСс ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π΄ΠΎ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ pod’а. Для этих Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ (VXLAN, GENEVE) ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ прямо Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ сСти ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°:

    ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Kubernetes CCM (Cloud Controller Manager) для ЯндСкс.Облака

  5. Volume – позволяСт динамичСски Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ PV, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ PVC ΠΈ SC. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ этот Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» являлся Ρ‡Π°ΡΡ‚ΡŒΡŽ CCM, Π½ΠΎ Π²Π²ΠΈΠ΄Ρƒ большой слоТности Π±Ρ‹Π» вынСсСн Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Container Storage Interface (CSI). ΠŸΡ€ΠΎ CSI ΠΌΡ‹ Π½Π΅ Ρ€Π°Π· писали ΠΈ, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, Π΄Π°ΠΆΠ΅ выпустили CSI-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€.

Π Π°Π½Π΅Π΅ вСсь ΠΊΠΎΠ΄, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ с ΠΎΠ±Π»Π°ΠΊΠΎΠΌ, Π»Π΅ΠΆΠ°Π» Π² основном Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Kubernetes ΠΏΠΎ адрСсу k8s.io/kubernetes/pkg/cloudprovider/providers, Π½ΠΎ ΠΎΡ‚ этого Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΈΠ·-Π·Π° нСудобства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большой ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ. ВсС старыС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ вынСсСны Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Для удобства дальнСйшСй ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всС ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΈ вынСсСны Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

Как ΠΈ Π² случаС с CSI, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ поставщики ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… услуг ΡƒΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ свои CCM для использования ΠΎΠ±Π»Π°ΠΊΠΎΠ² Π² Kubernetes. Если ΠΆΠ΅ CCM Ρƒ поставщика Π½Π΅Ρ‚, Π½ΠΎ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступны Ρ‡Π΅Ρ€Π΅Π· API, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ CCM ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ CCM, достаточно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Go-интСрфСйсы.

И Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ.

РСализация

Как ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ этому

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ (Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ β€” Π΄Π°ΠΆΠ΅ использованиС) ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ(!) CCM для Yandex.Cloud Π³ΠΎΠ΄ΠΎΠ²ΠΎΠΉ давности.

Однако Π² этой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π»ΠΎ:

  • Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· JWT IAM-Ρ‚ΠΎΠΊΠ΅Π½;
  • ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Service controller’а.

По согласованию с Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ (dlisin) Π² Telegram, ΠΌΡ‹ Ρ„ΠΎΡ€ΠΊΠ½ΡƒΠ»ΠΈ yandex-cloud-controller-manager ΠΈ дописали Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ возмоТности

На Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ CCM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйсы:

  • Instances;
  • Zones;
  • LoadBalancer.

Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Yandex.Cloud Π½Π°Ρ‡Π½Ρ‘Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ возмоТностями VPC, ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈ интСрфСйс Routes.

LoadBalanacer ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ, ΠΊΠ°ΠΊ Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ CCM, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΈΠ· LoadBalancer ΠΈ TargetGroup для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Service с Ρ‚ΠΈΠΏΠΎΠΌ LoadBalancer. Однако Ρƒ Yandex.Cloud ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΎΡΡŒ ΠΎΠ΄Π½ΠΎ интСрСсноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ TargetGroups с ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈΡΡ Targets (ΠΏΠ°Ρ€Π° SubnetID β€” IpAddress).

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Kubernetes CCM (Cloud Controller Manager) для ЯндСкс.Облака

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ созданного CCM запускаСтся ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Node собираСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΠΎ всСх интСрфСйсах Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΏΠΎ принадлСТности ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ NetworkID, создаёт ΠΏΠΎ TargetGroup Π½Π° NetworkID, Π° Ρ‚Π°ΠΊΠΆΠ΅ слСдит Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. ВпослСдствии, ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Service с Ρ‚ΠΈΠΏΠΎΠΌ LoadBalanacer ΠΌΡ‹ просто прикрСпляСм Π·Π°Ρ€Π°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ TargetGroup ΠΊ Π½ΠΎΠ²Ρ‹ΠΌ NetworkLoadBalanacer‘Π°ΠΌ.

Как Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ?

CCM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Kubernetes вСрсии 1.15 ΠΈ Π²Ρ‹ΡˆΠ΅. Π’ кластСрС для Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„Π»Π°Π³ --cloud-provider=external Π±Ρ‹Π» установлСн Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true для kube-apiserver, kube-controller-manager, kube-scheduler ΠΈ всСх kubelet’ов.

ВсС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ шаги ΠΏΠΎ самой установкС описаны Π² README. Π˜Π½ΡΡ‚Π°Π»Π»ΡΡ†ΠΈΡ сводится ΠΊ созданию ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Kubernetes ΠΈΠ· манифСстов.

Для использования CCM Ρ‚Π°ΠΊΠΆΠ΅ понадобится:

  • ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² манифСстС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° (folder-id) ЯндСкс.Облака;
  • сСрвисный Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ для взаимодСйствия с API ЯндСкс.Облака. Π’ манифСстС Secret Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΎΡ‚ сСрвисного Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°. Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ описано, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сСрвисный Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ.

Π‘ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π΄Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи ΠΈ Π½ΠΎΠ²Ρ‹ΠΌ issues, Ссли ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ!

Π˜Ρ‚ΠΎΠ³ΠΈ

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ CCM ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² пяти Kubernetes-кластСрах Π½Π° протяТСнии Π΄Π²ΡƒΡ… послСдних нСдСль ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΈΡ… число Π΄ΠΎ 20 Π² блиТайший мСсяц. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ CCM для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ критичСских инсталляций K8s Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ.

Как ΠΈ Π² случаС с CSI, Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π΄Ρ‹, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ЯндСкса Π²ΠΎΠ·ΡŒΠΌΡƒΡ‚ Π½Π° сСбя Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€” ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΠΎ ΠΈΡ… ΠΏΡ€ΠΎΡΡŒΠ±Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ для нас Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ.

P.S.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

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