Kubernetes кластер бэлтгэх нь хялбар бөгөөд тохиромжтой юу? Нэмэлт операторыг зарлаж байна

Kubernetes кластер бэлтгэх нь хялбар бөгөөд тохиромжтой юу? Нэмэлт операторыг зарлаж байна

Дараа нь бүрхүүлийн оператор Бид түүний том ахыг танилцуулж байна - addon-operator. Энэ нь Нээлттэй эхийн төсөл бөгөөд системийн бүрэлдэхүүн хэсгүүдийг Kubernetes кластерт суулгахад ашигладаг бөгөөд үүнийг нэмэлт гэж нэрлэж болно.

Яагаад ерөөсөө нэмэлтүүд байна вэ?

Kubernetes бол бэлэн бүтээгдэхүүн биш бөгөөд "насанд хүрэгчдийн" кластер барихын тулд танд янз бүрийн нэмэлтүүд хэрэгтэй болох нь нууц биш юм. Addon-operator нь эдгээр нэмэлтүүдийг суулгах, тохируулах, шинэчлэхэд тань туслах болно.

Кластерт нэмэлт бүрэлдэхүүн хэсгүүдийн хэрэгцээг тодруулсан болно тайлан хамт олон Дриуша. Товчхондоо, одоогийн байдлаар Кубернетестэй холбоотой нөхцөл байдал ийм байна: энгийн "тоглох" суулгацын хувьд та хайрцагнаас гарсан бүрэлдэхүүн хэсгүүдийг ашиглах боломжтой, хөгжүүлэгчид болон туршилтын хувьд та Ingress-ийг нэмж болно, гэхдээ бүрэн суулгацын хувьд Та "таны үйлдвэрлэл бэлэн боллоо" гэж хэлж болно, та хэдэн арван өөр нэмэлт хэрэгслээр нэмэх хэрэгтэй: хяналт тавих зүйл, бүртгэл хийх зүйл, нэвтрэх болон сертификат менежерээ бүү мартаарай, зангилааны бүлгүүдийг сонгох, сүлжээний бодлого нэмэх, улирал sysctl болон pod autoscaler тохиргоотой...

Kubernetes кластер бэлтгэх нь хялбар бөгөөд тохиромжтой юу? Нэмэлт операторыг зарлаж байна

Тэдэнтэй ажиллахын онцлог юу вэ?

Практикаас харахад асуудал нь нэг суулгацаар хязгаарлагдахгүй. Кластертай эвтэйхэн ажиллахын тулд нэмэлтүүдийг шинэчлэх, идэвхгүй болгох (кластераас хасах) шаардлагатай бөгөөд заримыг нь үйлдвэрлэлийн кластерт суулгахаасаа өмнө туршихыг хүсэх болно.

Тэгэхээр, магадгүй Ansible энд хангалттай байх болов уу? Магадгүй. Гэхдээ Ерөнхийдөө бүрэн хэмжээний нэмэлтүүд нь тохиргоогүйгээр амьдардаггүй. Эдгээр тохиргоо нь кластерийн хувилбараас хамаарч өөр байж болно (aws, gce, номин, нүцгэн металл, хийх, ...). Зарим тохиргоог урьдчилан зааж өгөх боломжгүй, тэдгээрийг кластераас авах ёстой. Мөн кластер нь статик биш: зарим тохиргооны хувьд та өөрчлөлтийг хянах хэрэгтэй болно. Энд Ansible аль хэдийн алга болсон: танд кластерт амьдардаг програм хэрэгтэй, i.e. Kubernetes оператор.

Ажил дээрээ туршиж үзсэн хүмүүс бүрхүүлийн оператор, нэмэлт хэрэгсэл, хяналтын тохиргоог суулгах, шинэчлэх ажлыг ашиглан бүрэн шийдэж болно гэж тэд хэлэх болно. дэгээ бүрхүүлийн операторын хувьд. Та болзол хийх скрипт бичиж болно kubectl apply болон тохиргоонууд хаана хадгалагдахыг жишээлбэл ConfigMap-г хянах. Энэ нь addon-operator дээр хэрэгжсэн зүйл юм.

Үүнийг addon-operator дээр хэрхэн зохион байгуулдаг вэ?

Шинэ шийдлийг бий болгохдоо бид дараах зарчмуудыг баримталсан.

  • Нэмэлт суулгагч нь дэмжих ёстой загвар болон тунхаглалын тохиргоо. Бид нэмэлт суулгадаг шидэт скрипт хийдэггүй. Addon-оператор нь нэмэлт програмуудыг суулгахдаа Helm ашигладаг. Суулгахын тулд та диаграмм үүсгэж, тохиргоонд ашиглагдах утгуудыг сонгох хэрэгтэй.
  • Тохиргоо байж болно суулгац дээр үүсгэх, тэд байж болно кластераас авах, эсвэл шинэчлэлтүүдийг хүлээн авах, кластерийн нөөцийг хянах. Эдгээр үйлдлийг дэгээ ашиглан хийж болно.
  • Тохиргоо байж болно кластерт хадгална. Тохиргоог кластерт хадгалахын тулд ConfigMap/addon-operator үүсгэсэн бөгөөд Addon-operator нь энэхүү ConfigMap-д гарсан өөрчлөлтийг хянадаг. Addon-оператор нь энгийн конвенцуудыг ашиглан тохиргоонд хандах боломжийг олгодог.
  • Нэмэлт нь тохиргооноос хамаарна. Хэрэв тохиргоо өөрчлөгдсөн бол Addon-оператор нь Helm диаграмыг шинэ утгуудаар гаргана. Бид Helm диаграмм, түүний утгууд ба дэгээний хослолыг модуль гэж нэрлэсэн (дэлгэрэнгүй мэдээллийг доороос үзнэ үү).
  • Тайзлах. Шидэт хувилбарын скрипт байхгүй байна. Шинэчлэх механизм нь ердийн програмтай төстэй - нэмэлт болон нэмэлт операторуудыг зураг болгон цуглуулж, шошгож, тараана.
  • Үр дүнгийн хяналт. Addon-operator нь Prometheus-д зориулсан хэмжүүрүүдийг өгөх боломжтой.

Addon-operator дахь padding гэж юу вэ?

Нэмэлтийг кластерт шинэ функц нэмж байгаа бүх зүйл гэж үзэж болно. Жишээлбэл, Ingress суулгах нь нэмэлт хэрэгслийн гайхалтай жишээ юм. Энэ нь өөрийн CRD-тэй ямар ч оператор эсвэл хянагч байж болно: prometheus-operator, cert-manager, kube-controller-manager гэх мэт. Эсвэл жижиг, гэхдээ ашиглахад хялбар зүйл - жишээлбэл, бүртгэлийн нууцыг шинэ нэрийн талбарт хуулдаг нууц хувилагч эсвэл шинэ зангилаанууд дээр sysctl параметрүүдийг тохируулдаг sysctl тааруулагч.

Нэмэлтүүдийг хэрэгжүүлэхийн тулд Addon-operator нь хэд хэдэн ойлголтыг өгдөг:

  • Жолооны диаграм кластерт янз бүрийн програм хангамж суулгахад ашигладаг - жишээлбэл, Prometheus, Grafana, nginx-ingress. Хэрэв шаардлагатай бүрэлдэхүүн хэсэг нь Helm диаграмтай бол Addon-operator ашиглан суулгах нь маш энгийн байх болно.
  • Үнэт зүйлсийн хадгалалт. Helm chart нь ихэвчлэн цаг хугацааны явцад өөрчлөгдөж болох олон янзын тохиргоотой байдаг. Addon-operator нь эдгээр тохиргоог хадгалахыг дэмждэг бөгөөд Helm диаграмыг шинэ утгуудаар дахин суулгахын тулд тэдгээрийн өөрчлөлтийг хянах боломжтой.
  • Дэгээ Эдгээр нь Addon-операторын үйл явдлууд дээр ажилладаг, утгын сан руу нэвтрэх боломжтой файлууд юм. Дэгээ нь кластер дахь өөрчлөлтийг хянаж, утгын хадгалалтын утгыг шинэчлэх боломжтой. Тэдгээр. Дэгээ ашиглан та эхлүүлэх үед эсвэл хуваарийн дагуу кластераас утгыг цуглуулах нээлт хийх эсвэл кластерт гарсан өөрчлөлт дээр үндэслэн кластераас утгыг цуглуулж тасралтгүй нээлт хийх боломжтой.
  • Модуль нь Helm диаграм, үнэт зүйлсийн дэлгүүр, дэгээний хослол юм. Модулуудыг идэвхжүүлж эсвэл идэвхгүй болгож болно. Модулийг идэвхгүй болгох нь бүх Helm диаграмын хувилбаруудыг устгана гэсэн үг юм. Модулиуд нь өөрсдийгөө динамикаар идэвхжүүлж болно, жишээлбэл, шаардлагатай бүх модулиуд идэвхжсэн эсвэл дэгээнээс шаардлагатай параметрүүдийг илрүүлсэн бол энэ нь туслах идэвхжүүлсэн скрипт ашиглан хийгддэг.
  • Глобал дэгээ. Эдгээр нь "дангаараа" дэгээнүүд бөгөөд тэдгээр нь модулиудад ороогүй бөгөөд дэлхийн үнэт зүйлсийн дэлгүүрт хандах боломжтой бөгөөд утгууд нь модулийн бүх дэгээнд байдаг.

Эдгээр хэсгүүд хэрхэн хамтран ажилладаг вэ? Баримт бичгээс авсан зургийг харцгаая:

Kubernetes кластер бэлтгэх нь хялбар бөгөөд тохиромжтой юу? Нэмэлт операторыг зарлаж байна

Ажлын хоёр хувилбар байна:

  1. Глобал дэгээ нь үйл явдалаар өдөөгддөг - жишээлбэл, кластер дахь нөөц өөрчлөгдөх үед. Энэхүү дэгээ нь өөрчлөлтийг боловсруулж, дэлхийн үнэт зүйлсийн дэлгүүрт шинэ утгыг бичдэг. Addon-оператор дэлхийн санах ой өөрчлөгдсөнийг анзаарч, бүх модулиудыг эхлүүлнэ. Модуль бүр өөрийн дэгээ ашиглан идэвхжүүлэх шаардлагатай эсэхийг тодорхойлж, үнэт зүйлсийн санг шинэчилдэг. Хэрэв модуль идэвхжсэн бол Addon-оператор нь Helm диаграммыг суулгаж эхэлнэ. Энэ тохиолдолд Helm диаграм нь модулийн хадгалалт болон дэлхийн хадгалалтын утгуудад хандах боломжтой.
  2. Хоёрдахь хувилбар нь илүү хялбар юм: модулийн дэгээ нь үйл явдлаар өдөөгдөж, модулийн утгын хадгалалтын утгыг өөрчилдөг. Addon-operator үүнийг анзаарч, шинэчлэгдсэн утгууд бүхий Helm диаграмыг эхлүүлнэ.

Нэмэлтийг нэг дэгээ, эсвэл нэг Helm диаграм хэлбэрээр хийж болно, эсвэл хэд хэдэн хамааралтай модулиудтай адил - энэ нь кластерт суулгаж буй бүрэлдэхүүн хэсгийн нарийн төвөгтэй байдал болон тохируулгын уян хатан байдлын хүссэн түвшингээс хамаарна. Жишээлбэл, хадгалах газарт (/жишээ) sysctl тааруулагч нэмэлт байдаг бөгөөд энэ нь дэгээ ба Helm диаграм бүхий энгийн модуль хэлбэрээр хэрэгждэг бөгөөд ConfigMap-ийг засварлах замаар тохиргоог нэмэх боломжийг олгодог утгын дэлгүүрийг ашигладаг.

Шинэчлэлтүүдийг хүргэх

Addon-операторын суулгадаг бүрэлдэхүүн хэсгүүдийн шинэчлэлтүүдийг зохион байгуулах талаар хэдэн үг хэлье.

Addon-операторыг кластерт ажиллуулахын тулд танд хэрэгтэй нэмэлтүүдээр дүрс бүтээх Hook болон Helm диаграмын файл хэлбэрээр хоёртын файл нэмнэ addon-operator мөн дэгээнд хэрэгтэй бүх зүйл: bash, kubectl, jq, python гэх мэт. Дараа нь энэ зургийг кластерт ердийн програм болгон ашиглах боломжтой бөгөөд магадгүй та нэг эсвэл өөр шошголох схемийг зохион байгуулахыг хүсэх болно. Хэрэв цөөн тооны кластер байгаа бол програмуудтай ижил арга тохиромжтой байж болно: шинэ хувилбар, шинэ хувилбар, бүх кластерууд руу очиж, Pods-ийн дүрсийг засах. Гэсэн хэдий ч, нэлээд олон тооны кластерт нэвтрүүлсэн тохиолдолд сувгаас өөрийгөө шинэчлэх тухай ойлголт бидэнд илүү тохиромжтой байсан.

Бид үүнийг хэрхэн хийх вэ:

  • Суваг нь үндсэндээ юу ч (жишээ нь dev/stage/ea/stable) тохируулж болох танигч юм.
  • Сувгийн нэр нь зургийн шошго юм. Та сувагт шинэчлэлт хийх шаардлагатай үед шинэ зураг угсарч сувгийн нэрээр тэмдэглэгдсэн байна.
  • Бүртгэлд шинэ зураг гарч ирэхэд Addon-operator-ийг дахин эхлүүлж, шинэ дүрсээр ажиллуулна.

Энэ нь дээр бичсэн шиг хамгийн сайн туршлага биш юм Kubernetes баримт бичиг. Үүнийг хийхийг зөвлөдөггүй, гэхдээ бид ярьж байна нэг кластерт амьдардаг ердийн програм. Addon-operator-ийн хувьд програм нь кластеруудаар тархсан маш олон байршуулалт бөгөөд өөрийгөө шинэчлэх нь ихээхэн тус болж, амьдралыг хөнгөвчилдөг.

Сувгууд нь тусалдаг ба туршилтанд: хэрэв туслах кластер байгаа бол та үүнийг сувагт тохируулж болно stage суваг руу дамжуулахаас өмнө шинэчлэлтүүдийг оруулаарай ea и stable. Хэрэв суваг дээр кластертай бол ea алдаа гарсан тул та үүнийг сольж болно stable, энэ кластертай холбоотой асуудлыг судалж байхад. Хэрэв кластер идэвхтэй дэмжлэгээс хасагдсан бол энэ нь "хөлдөөсөн" суваг руу шилждэг - жишээлбэл, freeze-2019-03-20.

Дэгээ болон Helm диаграмыг шинэчлэхээс гадна танд хэрэгтэй байж магадгүй юм шинэчлэлт болон гуравдагч талын бүрэлдэхүүн хэсэг. Жишээлбэл, та нөхцөлт зангилаа экспортлогчийн алдааг анзаарч, түүнийг хэрхэн нөхөх талаар олж мэдсэн. Дараа нь та PR-ыг нээж, шинэ хувилбарыг бүх кластеруудаар дамжуулж, зургийн хувилбарыг нэмэгдүүлэхийг хүлээж байна. Тодорхойгүй хугацаагаар хүлээхгүйн тулд та зангилаа экспортлогчоо бүтээж, PR-г хүлээн авахаасаа өмнө түүн рүү шилжиж болно.

Ерөнхийдөө үүнийг Addon-операторгүйгээр хийж болно, гэхдээ Addon-operator-ийн тусламжтайгаар зангилаа экспортлогчийг суулгах модуль нэг репозитор дээр харагдах бөгөөд таны зургийг бүтээх Dockerfile яг тэнд хадгалагдах бөгөөд энэ нь бүх оролцогчдод илүү хялбар болно. юу болсныг ойлгох үйл явц ... Хэрэв хэд хэдэн кластер байгаа бол PR-аа туршиж үзэх, шинэ хувилбар гаргахад хялбар болно!

Бүрэлдэхүүн хэсгүүдийг шинэчлэх энэхүү зохион байгуулалт нь бидний хувьд амжилттай ажиллаж байгаа боловч өөр ямар ч тохиромжтой схемийг хэрэгжүүлэх боломжтой энэ тохиолдолд Addon-operator нь энгийн хоёртын файл юм.

дүгнэлт

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

Addon-operator-д зориулсан модулийн форматтай нэмэлтүүдийг (Helm chart + hooks) олон нийтэд нээлттэй болгож болно. Бид Флант компани бүтээн байгуулалтаа зуны улиралд ийм нэмэлт хэлбэрээр нийтлэхээр төлөвлөж байна. GitHub дээр хөгжүүлэлтэнд нэгдээрэй (бүрхүүлийн оператор, addon-operator), дээр үндэслэн өөрийн нэмэлтийг хийхийг хичээ жишээ и баримт бичиг, Habré болон манай дээр мэдээ хүлээж байгаарай YouTube суваг!

PS

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

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

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