Yandex.Cloud için Kubernetes CCM (Bulut Denetleyici Yöneticisi) ile tanışın

Yandex.Cloud için Kubernetes CCM (Bulut Denetleyici Yöneticisi) ile tanışın

Son zamanların devamı olarak CSI sürücü sürümü Yandex.Cloud için bu buluta yönelik başka bir Açık Kaynak projesi yayınlıyoruz - Bulut Denetleyici Yöneticisi. CCM yalnızca kümenin tamamı için değil aynı zamanda CSI sürücüsünün kendisi için de gereklidir. Amacına ve bazı uygulama özelliklerine ilişkin ayrıntılar kesim aşamasındadır.

Giriş

Neden ki?

Bizi Yandex.Cloud için CCM'yi geliştirmeye iten nedenler, daha önce açıklananlarla tamamen örtüşüyor. duyuru CSI sürücüleri. Tek bir araç kullandığımız, farklı bulut sağlayıcılarından çok sayıda Kubernetes kümesi bulunduruyoruz. Bu sağlayıcıların yönetilen çözümlerini "atlayarak" çok sayıda kolaylık uygular. Evet, oldukça spesifik bir durumumuz ve ihtiyaçlarımız var ama bunların yarattığı gelişmeler diğer kullanıcıların işine yarayabilir.

CCM tam olarak nedir?

Genellikle çevremizdeki ortamı küme için hazırlarız dışında - örneğin Terraform'u kullanmak. Ancak bazen etrafımızdaki bulut ortamını yönetmeye ihtiyaç duyulur kümeden. Bu olasılık sağlanmıştır ve uygulanan da budur CCM.

Özellikle Cloud Controller Manager beş ana etkileşim türü sağlar:

  1. Örnekleri – Kubernetes'teki bir düğüm nesnesi arasında 1:1 ilişki uygular (Node) ve bulut sağlayıcısındaki bir sanal makine. Bunun için biz:
    • alanı doldurun spec.providerID nesnede Node. Örneğin OpenStack CCM için bu alan aşağıdaki formata sahiptir: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Bulut sağlayıcının adını ve nesnenin sunucusunun (OpenStack'teki sanal makine) benzersiz UUID'sini görebilirsiniz;
    • Tamamlayıcı nodeInfo nesnede Node sanal makine hakkında bilgi. Örneğin AWS'de bulut sunucusu tipini belirtiyoruz;
    • Bulutta bir sanal makinenin varlığını kontrol ediyoruz. Örneğin, eğer bir nesne Node bir duruma girdi NotReady, sanal makinenin bulut sağlayıcıda mevcut olup olmadığını şu adresten kontrol edebilirsiniz: providerID. Orada değilse nesneyi silin Nodeaksi halde sonsuza kadar kümede kalacak olan;
  2. Bölgeleri – nesnenin hata alanını ayarlar Nodeböylece zamanlayıcı bulut sağlayıcısındaki bölgelere ve bölgelere göre Pod için bir düğüm seçebilir;
  3. Yük dengeleyici – bir nesne oluştururken Service tip ile LoadBalancer trafiği dışarıdan küme düğümlerine yönlendirecek bir tür dengeleyici oluşturur. Örneğin, Yandex.Cloud'da şunları kullanabilirsiniz: NetworkLoadBalancer и TargetGroup bu amaçlar için;
  4. Rota – düğümler arasında bir ağ oluşturur çünkü Kubernetes gereksinimlerine göre her pod'un kendi IP adresine sahip olması ve diğer pod'lara ulaşabilmesi gerekiyor. Bu amaçlar için, bir katman ağı (VXLAN, GENEVE) kullanabilir veya doğrudan bulut sağlayıcının sanal ağında bir yönlendirme tablosu ayarlayabilirsiniz:

    Yandex.Cloud için Kubernetes CCM (Bulut Denetleyici Yöneticisi) ile tanışın

  5. hacim – PVC ve SC kullanılarak PV'nin dinamik olarak sıralanmasına olanak tanır. Başlangıçta bu işlevsellik CCM'nin bir parçasıydı, ancak büyük karmaşıklığı nedeniyle ayrı bir proje olan Container Storage Interface'e (CSI) taşındı. CSI hakkında bir kereden fazla konuştuk писали ve daha önce de belirtildiği gibi, hatta yayınlandı CSI sürücüsü.

Daha önce bulutla etkileşime giren tüm kodlar Kubernetes projesinin ana Git deposunda bulunuyordu. k8s.io/kubernetes/pkg/cloudprovider/providersancak geniş bir kod tabanıyla çalışmanın zorluğu nedeniyle bundan vazgeçmeye karar verdiler. Tüm eski uygulamalar şuraya taşındı: ayrı depo. Daha fazla destek ve geliştirme kolaylığı sağlamak amacıyla tüm ortak bileşenler de şuraya taşındı: ayrı depo.

CSI'da olduğu gibi, birçok büyük bulut sağlayıcısı zaten CCM'lerini Kubernetes'teki bulutlardan yararlanacak şekilde tasarladı. Tedarikçinin CCM'si yoksa ancak gerekli tüm işlevler API aracılığıyla mevcutsa CCM'yi kendiniz uygulayabilirsiniz.

Kendi CCM uygulamanızı yazmak için uygulamanız yeterlidir. gerekli Go arayüzleri.

И elimizde olan bu.

uygulama

Buna nasıl geldin

Geliştirmeye (veya daha doğrusu kullanmaya) şununla başladık: hazır(!) CCM bir yıl önce Yandex.Cloud için.

Ancak bu uygulamada eksiklerimiz vardı:

  • JWT IAM belirteci aracılığıyla kimlik doğrulama;
  • Servis denetleyicisi desteği.

Yazarla anlaşarak (dlisin) Telegram'da yandex-cloud-controller-manager'ı çatalladık ve eksik fonksiyonları ekledik.

Ana özellikleri

Şu anda CCM aşağıdaki arayüzleri desteklemektedir:

  • Örnekleri;
  • Bölgeleri;
  • Yük dengeleyici.

Gelecekte Yandex.Cloud gelişmiş VPC yetenekleriyle çalışmaya başladığında bir arayüz ekleyeceğiz rotalar.

Ana zorluk olarak LoadBalanacer

Başlangıçta diğer CCM uygulamalarında olduğu gibi bir çift oluşturmayı denedik. LoadBalancer и TargetGroup her biri için Service tip ile LoadBalancer. Ancak Yandex.Cloud ilginç bir sınırlama keşfetti: TargetGroups kesişen Targets (çift SubnetID - IpAddress).

Yandex.Cloud için Kubernetes CCM (Bulut Denetleyici Yöneticisi) ile tanışın

Bu nedenle, oluşturulan CCM'nin içinde nesneler değiştiğinde bir denetleyici başlatılır. Node her sanal makinedeki tüm arayüzler hakkında bilgi toplar, bunları belirli alanlara ait olmalarına göre gruplandırır NetworkID, tarafından oluşturulur TargetGroup üzerinde NetworkIDve aynı zamanda alaka düzeyini de izler. Daha sonra bir nesne oluştururken Service tip ile LoadBalanacer sadece önceden oluşturulmuş bir dosyayı ekliyoruz TargetGroup yeni NetworkLoadBalanacer'benim.

Kullanmaya nasıl başlanır?

CCM, Kubernetes sürüm 1.15 ve üzerini destekler. Bir kümede çalışması için bayrağın olması gerekir --cloud-provider=external olarak ayarlandı true kube-apserver, kube-controller-manager, kube-scheduler ve tüm kubelet'ler için.

Kurulumun kendisi için gerekli tüm adımlar şurada açıklanmıştır: README. Kurulum, Kubernetes'te manifestlerden nesneler oluşturmaya indirgenir.

CCM'yi kullanmak için ayrıca şunlara da ihtiyacınız olacak:

  • işaret etmek bildirimde dizin tanımlayıcısı (folder-id) Yandex.Bulut;
  • Yandex.Cloud API ile etkileşim için hizmet hesabı. Manifestoda Secret gerekli yetkili anahtarları aktar hizmet hesabından. Belgelerde tarif, bir hizmet hesabının nasıl oluşturulacağı ve anahtarların nasıl alınacağı.

Geri bildiriminizi almaktan mutluluk duyacağız ve yeni sorunlarherhangi bir sorunla karşılaşırsanız!

sonuçlar

Uygulanan CCM'yi son iki haftadır beş Kubernetes kümesinde kullanıyoruz ve önümüzdeki ay sayıyı 20'ye çıkarmayı planlıyoruz. Şu anda büyük ve kritik K8 kurulumlarında CCM kullanılmasını önermiyoruz.

CSI örneğinde olduğu gibi, Yandex geliştiricilerinin bu projenin geliştirilmesini ve desteklenmesini üstlenmesinden memnuniyet duyarız - bizimle daha alakalı görevlerle başa çıkmak için onların isteği üzerine depoyu aktarmaya hazırız.

PS

Blogumuzda da okuyun:

Kaynak: habr.com

Yorum ekle