Yandex.Cloud-д зориулсан Kubernetes CCM (Cloud Controller Manager)-ийг танилцуулж байна

Yandex.Cloud-д зориулсан Kubernetes CCM (Cloud Controller Manager)-ийг танилцуулж байна

Сүүлийн үеийн үргэлжлэл CSI драйверын хувилбар Yandex.Cloud-ийн хувьд бид энэ үүлэнд зориулсан өөр Нээлттэй эхийн төслийг нийтэлж байна - Cloud Controller Manager. CCM нь зөвхөн кластерт төдийгүй CSI драйверт шаардлагатай. Үүний зорилго, хэрэгжүүлэх зарим онцлог шинж чанаруудын талаархи дэлгэрэнгүй мэдээллийг доор харуулав.

Танилцуулга

Яагаад энэ вэ?

Биднийг Yandex.Cloud-д зориулсан ҮЗХ-г хөгжүүлэхэд түлхэц болсон шалтгаанууд нь дээр дурдсантай бүрэн давхцаж байна мэдэгдэл CSI драйверууд. Бид өөр өөр үүлэн үйлчилгээ үзүүлэгчээс олон Kubernetes кластеруудыг ажиллуулдаг бөгөөд үүнд бид нэг хэрэгсэл ашигладаг. Энэ нь эдгээр үйлчилгээ үзүүлэгчдийн удирдаж буй шийдлүүдийг "ойрч" олон тооны тохь тухыг хэрэгжүүлдэг. Тийм ээ, бидэнд тодорхой тохиолдол, хэрэгцээ байгаа боловч тэдгээрийн улмаас бий болсон хөгжүүлэлт нь бусад хэрэглэгчдэд хэрэгтэй байж магадгүй юм.

CCM гэж яг юу вэ?

Бид ихэвчлэн кластерт хүрээлэн буй орчныг бэлддэг гадна талаас - жишээлбэл, Terraform ашиглан. Гэхдээ заримдаа бидний эргэн тойронд байгаа үүлэн орчныг зохицуулах шаардлага гардаг кластераас. Энэ боломжийг олгож байгаа бөгөөд энэ нь хэрэгжиж байна ҮЗЗ.

Тодруулбал, Cloud Controller Manager нь харилцан үйлчлэлийн таван үндсэн төрлийг хангадаг:

  1. Жишээ нь – Kubernetes дахь зангилааны объектын хооронд 1:1 харьцааг хэрэгжүүлдэг (Node) болон үүлэн үйлчилгээ үзүүлэгч дэх виртуал машин. Үүний тулд бид:
    • талбарыг бөглөнө үү spec.providerID объектод Node. Жишээлбэл, OpenStack CCM-ийн хувьд энэ талбар дараах форматтай байна: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Та үүл үйлчилгээ үзүүлэгчийн нэр болон объектын серверийн өвөрмөц UUID (OpenStack дахь виртуал машин) харах боломжтой;
    • нэмэлт nodeInfo объектод Node виртуал машины тухай мэдээлэл. Жишээлбэл, бид AWS-д жишээний төрлийг зааж өгдөг;
    • Бид үүлэн дотор виртуал машин байгаа эсэхийг шалгадаг. Жишээлбэл, хэрэв объект Node байдалд оров NotReady, та виртуал машин үүлэн үйлчилгээ үзүүлэгч дээр байгаа эсэхийг шалгах боломжтой providerID. Хэрэв байхгүй бол объектыг устгана уу Node, өөрөөр хэлбэл кластерт үүрд үлдэх болно;
  2. бүс – объектын бүтэлгүйтлийн домайныг тохируулна Node, ингэснээр хуваарь гаргагч нь үүлэн үйлчилгээ үзүүлэгчийн бүс, бүсийн дагуу Pod-ийн зангилаа сонгох боломжтой;
  3. LoadBalancer - объект үүсгэх үед Service төрөлтэй LoadBalancer гаднаас урсгалыг кластерийн зангилаа руу чиглүүлэх нэгэн төрлийн тэнцвэржүүлэгчийг бий болгодог. Жишээлбэл, Yandex.Cloud дээр та ашиглаж болно NetworkLoadBalancer и TargetGroup эдгээр зорилгоор;
  4. Чиглэл – зангилааны хооронд сүлжээг бий болгодог, учир нь Kubernetes-ийн шаардлагын дагуу подвол бүр өөрийн гэсэн IP хаягтай байх ёстой бөгөөд өөр ямар ч pod-д холбогдох боломжтой байх ёстой. Эдгээр зорилгын үүднээс та давхар сүлжээг (VXLAN, GENEVE) ашиглах эсвэл үүлэн үйлчилгээ үзүүлэгчийн виртуал сүлжээнд чиглүүлэлтийн хүснэгтийг шууд тохируулах боломжтой.

    Yandex.Cloud-д зориулсан Kubernetes CCM (Cloud Controller Manager)-ийг танилцуулж байна

  5. Эзлэхүүн – PVC болон SC ашиглан PV-ийн динамик захиалга хийх боломжийг олгодог. Эхэндээ энэ функц нь CCM-ийн нэг хэсэг байсан боловч маш нарийн төвөгтэй байдлаасаа болж тусдаа төсөл болох Container Storage Interface (CSI) руу шилжсэн. Бид CSI-ийн талаар нэг бус удаа ярьж байсан бичсэн мөн аль хэдийн дурьдсанчлан, тэр ч байтугай гаргасан CSI жолооч.

Өмнө нь үүлтэй харьцдаг бүх код Кубернетес төслийн Git-н үндсэн репозиторид байрладаг байсан. k8s.io/kubernetes/pkg/cloudprovider/providers, гэхдээ тэд том кодын суурьтай ажиллахад тохиромжгүй тул үүнийг орхихоор шийдсэн. Бүх хуучин хэрэгжүүлэлтүүд рүү шилжсэн тусдаа агуулах. Цаашид дэмжлэг үзүүлэх, хөгжүүлэхэд тохиромжтой байхын тулд бүх нийтлэг бүрэлдэхүүн хэсгүүдийг шилжүүлсэн тусдаа агуулах.

CSI-ийн нэгэн адил олон том үүлэн үйлчилгээ үзүүлэгчид Kubernetes дээр үүлийг ашиглахын тулд CCM-ээ аль хэдийн зохион бүтээжээ. Хэрэв нийлүүлэгч нь ҮЗХ-гүй боловч шаардлагатай бүх функцийг API-ээр дамжуулан авах боломжтой бол та өөрөө ҮЗХ-г хэрэгжүүлж болно.

ҮЗЗ-ийн хэрэгжилтийг бичихийн тулд хэрэгжүүлэхэд хангалттай шаардлагатай Go интерфейсүүд.

И Энэ бол бидний авсан зүйл юм.

Реализация

Чи яаж ийм байдалд хүрэв

Бид хөгжүүлэлтийг (эсвэл бүр ашиглах) эхлүүлсэн бэлэн(!) CCM Yandex.Cloud-ийн хувьд жилийн өмнө.

Гэсэн хэдий ч, энэ хэрэгжилтэд бид дутагдаж байсан:

  • JWT IAM жетоноор дамжуулан баталгаажуулалт;
  • Үйлчилгээний хянагч дэмжлэг.

Зохиогчтой тохиролцсон (длисин) Telegram дээр бид yandex-cloud-controller-менежерийг салгаж, дутуу функцүүдийг нэмсэн.

Гол онцлог

Одоогоор CCM нь дараах интерфейсүүдийг дэмждэг:

  • Жишээ нь;
  • бүс;
  • LoadBalancer.

Ирээдүйд Yandex.Cloud дэвшилтэт VPC боломжуудтай ажиллаж эхлэхэд бид интерфэйс нэмэх болно Замууд.

LoadBalanacer нь гол сорилт юм

Эхэндээ бид бусад CCM хэрэгжүүлэлтүүдийн нэгэн адил хос үүсгэхийг оролдсон LoadBalancer и TargetGroup хүн бүрт Service төрөлтэй LoadBalancer. Гэсэн хэдий ч Yandex.Cloud нэг сонирхолтой хязгаарлалтыг олж мэдсэн: та ашиглах боломжгүй TargetGroups огтлолцох Targets (хос SubnetID - IpAddress).

Yandex.Cloud-д зориулсан 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-менежер, kube-хуваарилагч болон бүх kubelet-д зориулагдсан.

Суулгахад шаардлагатай бүх алхмуудыг өөрөө тайлбарласан болно README. Суурилуулалт нь манифестуудаас Kubernetes-д объект үүсгэхэд хүргэдэг.

CCM ашиглахын тулд танд дараахь зүйлс хэрэгтэй болно.

Бид таны санал хүсэлтийг хүлээн авахдаа баяртай байх болно шинэ асуудлуудХэрэв танд ямар нэгэн асуудал тулгарвал!

Үр дүн

Бид сүүлийн хоёр долоо хоногийн турш хэрэгжсэн CCM-ийг Кубернетесийн таван кластерт ашиглаж байгаа бөгөөд ирэх сард тэдний тоог 20 хүртэл нэмэгдүүлэхээр төлөвлөж байна. Бид одоогоор CCM-ийг том, чухал K8-ийн суурилуулалтанд ашиглахыг зөвлөдөггүй.

CSI-ийн нэгэн адил Yandex-ийн хөгжүүлэгчид энэ төслийг боловсруулж, дэмжвэл бид баяртай байх болно - бид өөрсдийн хүсэлтээр бидэнд илүү хамааралтай ажлуудыг шийдвэрлэхийн тулд репозиторыг шилжүүлэхэд бэлэн байна.

PS

Мөн манай блог дээрээс уншина уу:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх