Ngenalke Kubernetes CCM (Cloud Controller Manager) kanggo Yandex.Cloud

Ngenalke Kubernetes CCM (Cloud Controller Manager) kanggo Yandex.Cloud

Ing tutugan kanggo anyar release driver CSI kanggo Yandex.Cloud kita nerbitake proyek Open Source liyane kanggo awan iki - Awan Controller Manager. CCM dibutuhake ora mung kanggo kluster sakabèhé, nanging uga kanggo driver CSI dhewe. Rincian babagan tujuane lan sawetara fitur implementasine ana ing ngisor iki.

Pambuka

Kenapa iki?

Motif sing nyebabake kita ngembangake CCM kanggo Yandex.Cloud rampung pas karo sing wis diterangake ing pengumuman driver CSI. Kita njaga akeh klompok Kubernetes saka panyedhiya awan sing beda-beda, sing nggunakake alat siji. Iki nindakake macem-macem kemudahan "ngliwati" solusi sing dikelola saka panyedhiya kasebut. Ya, kita duwe kasus lan kabutuhan sing rada spesifik, nanging pangembangan sing digawe amarga bisa migunani kanggo pangguna liyane.

Apa sejatine CCM?

Biasane, kita nyiapake lingkungan sekitar kita kanggo kluster saka njaba - contone, nggunakake Terraform. Nanging kadhangkala ana perlu kanggo ngatur lingkungan maya watara kita saka kluster. Kamungkinan iki kasedhiya, lan iku sing dileksanakake CCM.

Khusus, Cloud Controller Manager nyedhiyakake limang jinis interaksi utama:

  1. Contoh – ngleksanakake hubungan 1:1 antarane obyek simpul ing Kubernetes (Node) lan mesin virtual ing panyedhiya maya. Kanggo iki kita:
    • ngisi lapangan spec.providerID ing obyek Node. Contone, kanggo OpenStack CCM lapangan iki nduweni format ing ngisor iki: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Sampeyan bisa ndeleng jeneng panyedhiya maya lan UUID unik saka server (mesin virtual ing OpenStack) obyek kasebut;
    • ngompliti nodeInfo ing obyek Node informasi babagan mesin virtual. Contone, kita nemtokake jinis conto ing AWS;
    • Kita mriksa anané mesin virtual ing méga. Contone, yen obyek Node tindak menyang negara NotReady, sampeyan bisa mriksa apa mesin virtual ana ing kabeh panyedhiya maya dening providerID. Yen ora ana, mbusak obyek kasebut Node, sing bakal tetep ing kluster ing salawas-lawase;
  2. Wayah – nyetel domain gagal kanggo obyek Node, supaya panjadwal bisa milih simpul kanggo Pod miturut wilayah lan zona ing panyedhiya maya;
  3. LoadBalancer - nalika nggawe obyek Service karo jinis LoadBalancer nggawe jenis balancer sing bakal ngarahake lalu lintas saka njaba menyang kelenjar kluster. Contone, ing Yandex.Cloud sampeyan bisa nggunakake NetworkLoadBalancer и TargetGroup kanggo tujuan kasebut;
  4. dalan – mbangun jaringan antarane kelenjar, amarga Miturut syarat Kubernetes, saben pod kudu duwe alamat IP dhewe lan bisa tekan pod liyane. Kanggo tujuan kasebut, sampeyan bisa nggunakake jaringan overlay (VXLAN, GENEVE) utawa nyetel tabel nuntun langsung ing jaringan virtual panyedhiya maya:

    Ngenalke Kubernetes CCM (Cloud Controller Manager) kanggo Yandex.Cloud

  5. volume - Ngidini pesenan dinamis PV nggunakake PVC lan SC. Kaping pisanan, fungsi iki minangka bagéan saka CCM, nanging amarga kerumitan gedhe dipindhah menyang project kapisah, Container Storage Interface (CSI). Kita wis ngomong babagan CSI luwih saka sepisan wrote lan, minangka wis kasebut, malah dirilis driver CSI.

Sadurunge, kabeh kode sing sesambungan karo awan ana ing gudang Git utama proyek Kubernetes ing k8s.io/kubernetes/pkg/cloudprovider/providers, nanging padha mutusake kanggo ninggalake iki amarga ora nyaman nggarap basis kode gedhe. Kabeh implementasine lawas wis dipindhah menyang panyimpenan kapisah. Kanggo penak saka support luwih lan pembangunan, kabeh komponen umum uga dipindhah menyang panyimpenan kapisah.

Kaya CSI, akeh panyedhiya awan gedhe wis ngrancang CCM kanggo nggunakake awan ing Kubernetes. Yen panyedhiya ora duwe CCM, nanging kabeh fungsi sing dibutuhake kasedhiya liwat API, mula sampeyan bisa ngetrapake CCM dhewe.

Kanggo nulis implementasi CCM dhewe, cukup kanggo ngleksanakake antarmuka Go dibutuhake.

И iki apa kita entuk.

Реализация

Kepiye carane sampeyan tekan iki

Kita miwiti pembangunan (utawa luwih, malah nggunakake) karo siap (!) CCM kanggo Yandex.Cloud setahun kepungkur.

Nanging, ing implementasine iki kita ilang:

  • otentikasi liwat token JWT IAM;
  • Dhukungan pengontrol layanan.

Ing persetujuan karo penulis (dipun) ing Telegram, kita forked yandex-cloud-controller-manager lan nambah fungsi ilang.

Fitur utama

Saiki, CCM ndhukung antarmuka ing ngisor iki:

  • Contoh;
  • Wayah;
  • LoadBalancer.

Ing mangsa ngarep, nalika Yandex.Cloud wiwit nggarap kapabilitas VPC canggih, kita bakal nambah antarmuka Rute.

LoadBalanacer minangka tantangan utama

Kaping pisanan, kita nyoba, kaya implementasi CCM liyane, kanggo nggawe pasangan LoadBalancer и TargetGroup kanggo kabeh wong Service karo jinis LoadBalancer. Nanging, Yandex.Cloud nemokake siji watesan sing menarik: sampeyan ora bisa nggunakake TargetGroups karo intersecting Targets (pasangan SubnetID - IpAddress).

Ngenalke Kubernetes CCM (Cloud Controller Manager) kanggo Yandex.Cloud

Mulane, ing CCM sing digawe, pengontrol diluncurake, sing, nalika obyek diganti, Node nglumpukake informasi bab kabeh antarmuka ing saben mesin virtual, kelompok mau miturut gadhahanipun tartamtu NetworkID, nggawe dening TargetGroup ing NetworkID, lan uga ngawasi relevansi. Sabanjure, nalika nggawe obyek Service karo jinis LoadBalanacer kita mung masang pra-digawe TargetGroup kanggo anyar NetworkLoadBalanacer'aku.

Carane miwiti nggunakake?

CCM ndhukung Kubernetes versi 1.15 lan luwih dhuwur. Ing kluster, supaya bisa, mbutuhake gendéra --cloud-provider=external disetel kanggo true kanggo kube-apiserver, kube-controller-manager, kube-scheduler lan kabeh kubelet.

Kabeh langkah sing perlu kanggo instalasi dhewe diterangake ing README. Instalasi boils mudhun kanggo nggawe obyek ing Kubernetes saka manifests.

Kanggo nggunakake CCM sampeyan uga kudu:

  • nuduhake ing manifest pengenal direktori (folder-id) Yandex.Cloud;
  • akun layanan kanggo sesambungan karo Yandex.Cloud API. Ing manifesto Secret perlu nransfer tombol sah saka akun layanan. Ing dokumentasi diterangake, carane nggawe akun layanan lan entuk kunci.

Kita bakal seneng nampa saran lan masalah anyaryen sampeyan nemoni masalah!

Hasil

Kita wis nggunakake CCM sing dileksanakake ing limang kluster Kubernetes sajrone rong minggu kepungkur lan rencana ngembangake jumlahe dadi 20 ing wulan sing bakal teka. Saiki kita ora nyaranake nggunakake CCM kanggo instalasi K8s gedhe lan kritis.

Kaya ing kasus CSI, kita bakal bungah yen pangembang Yandex njupuk pembangunan lan dhukungan saka proyek iki - kita siap nransfer repositori ing panyuwunan supaya bisa ngatasi tugas sing luwih relevan karo kita.

PS

Waca uga ing blog kita:

Source: www.habr.com

Add a comment