Сүүлийн үеийн үргэлжлэл
Танилцуулга
Яагаад энэ вэ?
Биднийг Yandex.Cloud-д зориулсан ҮЗХ-г хөгжүүлэхэд түлхэц болсон шалтгаанууд нь дээр дурдсантай бүрэн давхцаж байна
CCM гэж яг юу вэ?
Бид ихэвчлэн кластерт хүрээлэн буй орчныг бэлддэг гадна талаас - жишээлбэл, Terraform ашиглан. Гэхдээ заримдаа бидний эргэн тойронд байгаа үүлэн орчныг зохицуулах шаардлага гардаг кластераас. Энэ боломжийг олгож байгаа бөгөөд энэ нь хэрэгжиж байна
Тодруулбал, Cloud Controller Manager нь харилцан үйлчлэлийн таван үндсэн төрлийг хангадаг:
- Жишээ нь – Kubernetes дахь зангилааны объектын хооронд 1:1 харьцааг хэрэгжүүлдэг (
Node
) болон үүлэн үйлчилгээ үзүүлэгч дэх виртуал машин. Үүний тулд бид:- талбарыг бөглөнө үү
spec.providerID
объектодNode
. Жишээлбэл, OpenStack CCM-ийн хувьд энэ талбар дараах форматтай байна:openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0
. Та үүл үйлчилгээ үзүүлэгчийн нэр болон объектын серверийн өвөрмөц UUID (OpenStack дахь виртуал машин) харах боломжтой; - нэмэлт
nodeInfo
объектодNode
виртуал машины тухай мэдээлэл. Жишээлбэл, бид AWS-д жишээний төрлийг зааж өгдөг; - Бид үүлэн дотор виртуал машин байгаа эсэхийг шалгадаг. Жишээлбэл, хэрэв объект
Node
байдалд оровNotReady
, та виртуал машин үүлэн үйлчилгээ үзүүлэгч дээр байгаа эсэхийг шалгах боломжтойproviderID
. Хэрэв байхгүй бол объектыг устгана ууNode
, өөрөөр хэлбэл кластерт үүрд үлдэх болно;
- талбарыг бөглөнө үү
- бүс – объектын бүтэлгүйтлийн домайныг тохируулна
Node
, ингэснээр хуваарь гаргагч нь үүлэн үйлчилгээ үзүүлэгчийн бүс, бүсийн дагуу Pod-ийн зангилаа сонгох боломжтой; - LoadBalancer - объект үүсгэх үед
Service
төрөлтэйLoadBalancer
гаднаас урсгалыг кластерийн зангилаа руу чиглүүлэх нэгэн төрлийн тэнцвэржүүлэгчийг бий болгодог. Жишээлбэл, Yandex.Cloud дээр та ашиглаж болноNetworkLoadBalancer
иTargetGroup
эдгээр зорилгоор; - Чиглэл – зангилааны хооронд сүлжээг бий болгодог, учир нь Kubernetes-ийн шаардлагын дагуу подвол бүр өөрийн гэсэн IP хаягтай байх ёстой бөгөөд өөр ямар ч pod-д холбогдох боломжтой байх ёстой. Эдгээр зорилгын үүднээс та давхар сүлжээг (VXLAN, GENEVE) ашиглах эсвэл үүлэн үйлчилгээ үзүүлэгчийн виртуал сүлжээнд чиглүүлэлтийн хүснэгтийг шууд тохируулах боломжтой.
- Эзлэхүүн – PVC болон SC ашиглан PV-ийн динамик захиалга хийх боломжийг олгодог. Эхэндээ энэ функц нь CCM-ийн нэг хэсэг байсан боловч маш нарийн төвөгтэй байдлаасаа болж тусдаа төсөл болох Container Storage Interface (CSI) руу шилжсэн. Бид CSI-ийн талаар нэг бус удаа ярьж байсан
бичсэн мөн аль хэдийн дурьдсанчлан, тэр ч байтугайгаргасан CSI жолооч.
Өмнө нь үүлтэй харьцдаг бүх код Кубернетес төслийн Git-н үндсэн репозиторид байрладаг байсан. k8s.io/kubernetes/pkg/cloudprovider/providers
, гэхдээ тэд том кодын суурьтай ажиллахад тохиромжгүй тул үүнийг орхихоор шийдсэн. Бүх хуучин хэрэгжүүлэлтүүд рүү шилжсэн
CSI-ийн нэгэн адил олон том үүлэн үйлчилгээ үзүүлэгчид Kubernetes дээр үүлийг ашиглахын тулд CCM-ээ аль хэдийн зохион бүтээжээ. Хэрэв нийлүүлэгч нь ҮЗХ-гүй боловч шаардлагатай бүх функцийг API-ээр дамжуулан авах боломжтой бол та өөрөө ҮЗХ-г хэрэгжүүлж болно.
ҮЗЗ-ийн хэрэгжилтийг бичихийн тулд хэрэгжүүлэхэд хангалттай
И
Реализация
Чи яаж ийм байдалд хүрэв
Бид хөгжүүлэлтийг (эсвэл бүр ашиглах) эхлүүлсэн
Гэсэн хэдий ч, энэ хэрэгжилтэд бид дутагдаж байсан:
- JWT IAM жетоноор дамжуулан баталгаажуулалт;
- Үйлчилгээний хянагч дэмжлэг.
Зохиогчтой тохиролцсон (длисин) Telegram дээр бид yandex-cloud-controller-менежерийг салгаж, дутуу функцүүдийг нэмсэн.
Гол онцлог
Одоогоор CCM нь дараах интерфейсүүдийг дэмждэг:
- Жишээ нь;
- бүс;
- LoadBalancer.
Ирээдүйд Yandex.Cloud дэвшилтэт VPC боломжуудтай ажиллаж эхлэхэд бид интерфэйс нэмэх болно Замууд.
LoadBalanacer нь гол сорилт юм
Эхэндээ бид бусад CCM хэрэгжүүлэлтүүдийн нэгэн адил хос үүсгэхийг оролдсон LoadBalancer
и TargetGroup
хүн бүрт Service
төрөлтэй LoadBalancer
. Гэсэн хэдий ч Yandex.Cloud нэг сонирхолтой хязгаарлалтыг олж мэдсэн: та ашиглах боломжгүй TargetGroups
огтлолцох Targets
(хос SubnetID
- IpAddress
).
Тиймээс, үүсгэсэн CCM дотор объект өөрчлөгдөхөд хянагчийг ажиллуулдаг Node
Виртуал машин бүр дээрх бүх интерфейсийн талаарх мэдээллийг цуглуулж, тэдгээрийг тодорхой хамаарахаар нь бүлэглэдэг NetworkID
, үүсгэсэн TargetGroup
тухай NetworkID
, мөн хамааралтай байдалд хяналт тавьдаг. Дараа нь объект үүсгэх үед Service
төрөлтэй LoadBalanacer
Бид зүгээр л урьдчилан үүсгэсэн хавсаргана TargetGroup
шинэ рүү NetworkLoadBalanacer
байна.
Үүнийг хэрхэн ашиглаж эхлэх вэ?
CCM нь Kubernetes 1.15 ба түүнээс дээш хувилбарыг дэмждэг. Кластерт ажиллахын тулд туг байх шаардлагатай --cloud-provider=external
гэж тохируулсан true
kube-apiserver, kube-controller-менежер, kube-хуваарилагч болон бүх kubelet-д зориулагдсан.
Суулгахад шаардлагатай бүх алхмуудыг өөрөө тайлбарласан болно
CCM ашиглахын тулд танд дараахь зүйлс хэрэгтэй болно.
-
Онцлох манифест дахь лавлах танигч (folder-id
) Yandex.Cloud; - Yandex.Cloud API-тай харилцах үйлчилгээний данс. Манифестод
Secret
шаардлагатай байнаэрх бүхий түлхүүрүүдийг шилжүүлэх үйлчилгээний данснаас. Баримт бичигттодорхойлсон , үйлчилгээний данс үүсгэх, түлхүүр авах арга.
Бид таны санал хүсэлтийг хүлээн авахдаа баяртай байх болно
Үр дүн
Бид сүүлийн хоёр долоо хоногийн турш хэрэгжсэн CCM-ийг Кубернетесийн таван кластерт ашиглаж байгаа бөгөөд ирэх сард тэдний тоог 20 хүртэл нэмэгдүүлэхээр төлөвлөж байна. Бид одоогоор CCM-ийг том, чухал K8-ийн суурилуулалтанд ашиглахыг зөвлөдөггүй.
CSI-ийн нэгэн адил Yandex-ийн хөгжүүлэгчид энэ төслийг боловсруулж, дэмжвэл бид баяртай байх болно - бид өөрсдийн хүсэлтээр бидэнд илүү хамааралтай ажлуудыг шийдвэрлэхийн тулд репозиторыг шилжүүлэхэд бэлэн байна.
PS
Мөн манай блог дээрээс уншина уу:
- «
Yandex.Cloud-д зориулсан Kubernetes-д CSI драйвер хөгжүүлэх бидний туршлага "; - «
Kubernetes кластер бэлтгэх нь хялбар бөгөөд тохиромжтой юу? Нэмэлт операторыг зарлаж байна "; - «
Kubernetes-ийг өргөжүүлж, нөхөж байна (хяналт болон видео тайлан) ".
Эх сурвалж: www.habr.com