Yandex.Cloud üçün Kubernetes CCM (Cloud Controller Manager) təqdim olunur

Yandex.Cloud üçün Kubernetes CCM (Cloud Controller Manager) təqdim olunur

Son zamanların davamı olaraq CSI sürücü buraxılışı Yandex.Cloud üçün biz bu bulud üçün başqa bir Açıq Mənbə layihəsini dərc edirik - Bulud Nəzarətçisi Meneceri. CCM təkcə bütövlükdə klaster üçün deyil, həm də CSI sürücüsünün özü üçün tələb olunur. Məqsədi və bəzi tətbiq xüsusiyyətləri haqqında təfərrüatlar kəsilmişdir.

Giriş

Niyə bu?

Bizi Yandex.Cloud üçün CCM-ni inkişaf etdirməyə vadar edən motivlər yuxarıda təsvir olunanlarla tamamilə üst-üstə düşür elan CSI sürücüləri. Biz müxtəlif bulud provayderlərindən çoxlu Kubernetes klasterlərini saxlayırıq, bunun üçün bir alətdən istifadə edirik. O, bu provayderlərin idarə olunan həllərini “yanaraq” çoxsaylı rahatlıqlar həyata keçirir. Bəli, bizim kifayət qədər spesifik bir vəziyyətimiz və ehtiyaclarımız var, lakin bunlara görə yaradılan inkişaflar digər istifadəçilər üçün faydalı ola bilər.

CCM tam olaraq nədir?

Tipik olaraq, biz ətrafımızdakı mühiti çoxluq üçün hazırlayırıq kənardan - məsələn, Terraform istifadə edərək. Ancaq bəzən ətrafımızdakı bulud mühitini idarə etməyə ehtiyac var klasterdən. Bu imkan verilir və məhz həyata keçirilir CCM.

Xüsusilə, Cloud Controller Manager beş əsas qarşılıqlı əlaqə növünü təmin edir:

  1. Nümunələr – Kubernetes-də qovşaq obyekti arasında 1:1 əlaqəsini həyata keçirir (Node) və bulud provayderində virtual maşın. Bunun üçün biz:
    • sahəsini doldurun spec.providerID obyektdə Node. Məsələn, OpenStack CCM üçün bu sahə aşağıdakı formata malikdir: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Bulud provayderinin adını və obyektin serverinin unikal UUID-sini (OpenStack-də virtual maşın) görə bilərsiniz;
    • tamamlayır nodeInfo obyektdə Node virtual maşın haqqında məlumat. Məsələn, AWS-də nümunə növünü təyin edirik;
    • Buludda virtual maşının mövcudluğunu yoxlayırıq. Məsələn, əgər bir obyekt Node vəziyyətə düşdü NotReady, virtual maşının ümumiyyətlə bulud provayderində olub olmadığını yoxlaya bilərsiniz providerID. Əgər orada deyilsə, obyekti silin Node, əks halda həmişəlik çoxluqda qalacaqdı;
  2. Zones – obyekt üçün uğursuzluq domenini təyin edir Node, beləliklə, planlaşdırıcı bulud provayderindəki bölgələrə və zonalara uyğun olaraq Pod üçün qovşaq seçə bilsin;
  3. LoadBalancer – obyekt yaratarkən Service növü ilə LoadBalancer trafiki xaricdən klaster qovşaqlarına yönəldəcək bir növ balanslaşdırıcı yaradır. Məsələn, Yandex.Cloud-da istifadə edə bilərsiniz NetworkLoadBalancer и TargetGroup bu məqsədlər üçün;
  4. Marşrut – qovşaqlar arasında şəbəkə qurur, çünki Kubernetes tələblərinə görə, hər bir pod öz IP ünvanına malik olmalıdır və istənilən digər pod-a çata bilməlidir. Bu məqsədlər üçün siz üst-üstə düşən şəbəkədən (VXLAN, GENEVE) istifadə edə və ya birbaşa bulud provayderinin virtual şəbəkəsində marşrut cədvəli təyin edə bilərsiniz:

    Yandex.Cloud üçün Kubernetes CCM (Cloud Controller Manager) təqdim olunur

  5. Həcm – PVC və SC istifadə edərək PV-nin dinamik sifarişinə imkan verir. Əvvəlcə bu funksionallıq CCM-nin bir hissəsi idi, lakin böyük mürəkkəbliyinə görə o, ayrı bir layihəyə, Konteyner Saxlama İnterfeysinə (CSI) köçürüldü. Biz CSI haqqında bir dəfədən çox danışmışıq писали və artıq qeyd edildiyi kimi, hətta sərbəst buraxıldı CSI sürücü.

Əvvəllər bulud ilə qarşılıqlı əlaqədə olan bütün kodlar Kubernetes layihəsinin əsas Git deposunda yerləşirdi. k8s.io/kubernetes/pkg/cloudprovider/providers, lakin böyük kod bazası ilə işləməyin əlverişsizliyi səbəbindən bundan imtina etmək qərarına gəldilər. Bütün köhnə tətbiqlər köçürüldü ayrı depo. Əlavə dəstək və inkişafın rahatlığı üçün bütün ümumi komponentlər də köçürüldü ayrı depo.

CSI-də olduğu kimi, bir çox böyük bulud provayderləri artıq Kubernetes-də buludlardan istifadə etmək üçün öz CCM-lərini hazırlayıblar. Əgər təchizatçının CCM-si yoxdursa, lakin bütün lazımi funksiyalar API vasitəsilə mövcuddursa, onda siz CCM-ni özünüz həyata keçirə bilərsiniz.

Öz CCM tətbiqinizi yazmaq üçün həyata keçirmək kifayətdir tələb olunan Go interfeysləri.

И əldə etdiyimiz budur.

Tətbiq

Necə oldu ki, bu hala gəldi

Biz inkişafa (daha doğrusu, hətta istifadə etməyə) başladıq hazır(!) CCM bir il əvvəl Yandex.Cloud üçün.

Lakin, bu tətbiqdə biz əskik idik:

  • JWT IAM tokeni vasitəsilə autentifikasiya;
  • Xidmət nəzarətçi dəstəyi.

Müəlliflə razılaşaraq (dlisin) Telegram-da yandex-bulud-nəzarətçi-menecerini çəngəllədik və çatışmayan funksiyaları əlavə etdik.

Əsas xüsusiyyətlər

Hazırda CCM aşağıdakı interfeysləri dəstəkləyir:

  • Nümunələr;
  • Zones;
  • LoadBalancer.

Gələcəkdə Yandex.Cloud qabaqcıl VPC imkanları ilə işləməyə başlayanda biz interfeys əlavə edəcəyik Marşrutlar.

Əsas problem kimi LoadBalanacer

Əvvəlcə biz digər CCM tətbiqləri kimi bir cüt yaratmağa çalışdıq LoadBalancer и TargetGroup hər biri üçün Service növü ilə LoadBalancer. Bununla belə, Yandex.Cloud bir maraqlı məhdudiyyət aşkar etdi: istifadə edə bilməzsiniz TargetGroups kəsişməsi ilə Targets (cüt SubnetID - IpAddress).

Yandex.Cloud üçün Kubernetes CCM (Cloud Controller Manager) təqdim olunur

Buna görə də, yaradılmış CCM daxilində obyektlər dəyişdikdə nəzarətçi işə salınır Node hər bir virtual maşındakı bütün interfeyslər haqqında məlumat toplayır, onları müəyyən mənsubiyyətinə görə qruplaşdırır NetworkID, tərəfindən yaradır TargetGroup haqqında NetworkID, həmçinin aktuallığına nəzarət edir. Sonradan, bir obyekt yaratarkən Service növü ilə LoadBalanacer biz sadəcə olaraq əvvəlcədən yaradılmış əlavə edirik TargetGroup yenisinə NetworkLoadBalanacer'am.

İstifadəyə necə başlamaq olar?

CCM Kubernetes 1.15 və daha yüksək versiyaları dəstəkləyir. Bir çoxluqda işləməsi üçün bayrağın olması lazımdır --cloud-provider=external təyin edilmişdi true kube-apiserver, kube-nəzarətçi-menecer, kube-planlaşdırıcı və bütün kubeletlər üçün.

Quraşdırmanın özü üçün bütün zəruri addımlar təsvir edilmişdir README. Quraşdırma manifestlərdən Kubernetes-də obyektlər yaratmağa başlayır.

CCM-dən istifadə etmək üçün sizə də lazımdır:

Biz sizin rəyinizi almaqdan şad olarıq və yeni məsələlərhər hansı bir problemlə qarşılaşsanız!

Nəticələri

Biz son iki həftə ərzində beş Kubernetes klasterində tətbiq edilmiş CCM-dən istifadə etdik və gələn ay onların sayını 20-yə çatdırmağı planlaşdırırıq. Hazırda biz böyük və kritik K8 quraşdırmaları üçün CCM-dən istifadə etməyi tövsiyə etmirik.

CSI vəziyyətində olduğu kimi, Yandex tərtibatçıları bu layihənin işlənib hazırlanmasını və dəstəyini öhdələrinə götürsələr, biz şad olarıq - bizə daha uyğun olan tapşırıqların öhdəsindən gəlmək üçün onların xahişi ilə deponu köçürməyə hazırıq.

PS

Bloqumuzda da oxuyun:

Mənbə: www.habr.com

Добавить комментарий