Kubernetes-ийн шилдэг 10 заль мэх, зөвлөмж

Kubernetes-ийн шилдэг 10 заль мэх, зөвлөмж

Интернет дээр маш олон лавлах ном байдаг, гэхдээ заримдаа хамгийн энгийн зөвлөгөө хамгийн үнэ цэнэтэй байдаг. Баг Mail.ru сайтаас Kubernetes aaS орчуулсан арван заль мэх, зөвлөмжийн сонголт, нийтлэлийн зохиогч Кубернетестэй нэг жил ажилласны дараа цуглуулсан. Зөвлөмжийг ач холбогдлоор нь ангилаагүй ч хүн бүр өөрт хэрэгтэй зүйл олж авна гэж бид бодож байна.

Kubernetes-тэй ажиллах хамгийн энгийн тушаал

Эхлээд Кубернетестэй ажиллах хамгийн энгийн бөгөөд хамгийн хэрэгтэй үйлдэл байж магадгүй юм. Дараах тушаал нь командыг дуусгах боломжийг олгоно kubectl bash бүрхүүлд:

echo "source <(kubectl completion bash)" >> ~/.bashrc

Автомат бөглөх kubectl .bashrc файлд бичигдэх бөгөөд бүрхүүл эхлэх бүрт автоматаар идэвхжинэ. Энэ нь урт командууд болон параметрүүдийг бичихийг хурдасгадаг all-namespaces. Дэлгэрэнгүйг эндээс уншина уу Kubernetes bash тусламж.

Нэрийн орон зай дахь анхдагч санах ой болон CPU-ийн хязгаарлалт

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

Үүнээс урьдчилан сэргийлэхийн тулд Kubernetes нь танд нэрийн зай тус бүрээр үндсэн хязгаарлалт тогтоох боломжийг олгодог. Тэдгээр нь yaml файлд тодорхой нэрийн зайд бичигдсэн байдаг. Ийм файлын жишээ энд байна:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

Ийм ямл үүсгээд ямар ч нэрийн орон зайд хэрэглээрэй. Жишээлбэл, нэрийн талбарт limit-example. Одоо энэ нэрийн талбарт байрлуулсан аливаа контейнер 512Mi-ийн хязгаартай байх болно, хэрвээ энэ контейнерт өөр хувийн хязгаарлалт тогтоогоогүй бол.

Kubernetes-ийн хуучин хувилбаруудын хог цуглуулах

Kubelet анхдагчаар хэзээ хог цуглуулж эхэлдэг var/lib/docker боломжтой дискний зайны 90%-ийг эзэлдэг. Энэ нь гайхалтай боловч Kubernetes 1.7 хүртэл файлын систем дэх файлуудын тоотой тохирч байгаа инодын тоонд анхдагч хязгаарлалт байгаагүй.

Таны сав байж магадгүй var/lib/docker дискний зайны зөвхөн 50%-ийг ашиглаж болох ч inode-ууд дуусч, ажилчдад хүндрэл учруулах болно.

Kubelet-ийн 1.4-ээс 1.6 хүртэлх хуучин хувилбаруудад та энэ тугийг нэмэх шаардлагатай болно:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

1.7 болон түүнээс хойшхи хувилбаруудад энэ тугийг анхдагчаар тохируулдаг. Гэсэн хэдий ч өмнөх хувилбарууд нь inode хязгаарыг хянадаггүй.

Minikube... жижиг боловч хүчирхэг орон нутгийн Kubernetes

Minikube нь орон нутгийн Kubernetes кластерийг ажиллуулах хамгийн хялбар арга юм. Үүнийг энгийн тушаалаар ажиллуулдаг:

minikube start

Энэ тушаалыг ажиллуулснаар таны машин дээр жинхэнэ Kubernetes кластер ажиллаж байна.

Kubernetes-ийн шилдэг 10 заль мэх, зөвлөмж
Зургийн эх сурвалж

Энэхүү заль мэх нь програмыг хэрхэн бүтээж, тухайн кластер дээр локал байдлаар ажиллуулах явдал юм. Тусгайлан заагаагүй бол Docker дүрс нь кластер дээр биш таны компьютер дээр бүтээгдэх болно.

Docker-г зургийг локал Кубернетес кластер руу түлхэхийн тулд докер машинд дараах тушаалыг өгнө.

eval $(minikube docker-env)

Одоо бид орон нутгийн Kubernetes кластер дээр програм бүтээх боломжтой.

kubectl-д бүх хүнд хандах эрхийг бүү өг

Энэ нь ойлгомжтой мэт боловч хэрвээ олон баг програмдаа нэг кластер ашиглаж байгаа бол (энэ нь Kubernetes-ийг бий болгосон) хүн бүрт өгөх ёсгүй. kubectl. Командуудыг салгаж, тус бүрдээ өөрийн нэрийн орон зайг зааж, RBAC бодлогыг ашиглан хандалтыг хязгаарлах нь дээр.

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

Pod төсвийг удирдах

Kubernetes кластер дахь аппликешн ажиллахгүй байх хугацааг хэрхэн хангах вэ? PodDisruptionBudget болон дахин PodDisruptionBudget.

Кластерууд үе үе шинэчлэгдэж, зангилаанууд хоосорно. Юу ч зогсохгүй, энэ бол бодит байдал. Нэгээс олон тохиолдол бүхий байршуулалт бүр нь PDB (PodDisruptionBudget) агуулсан байх ёстой. Энэ нь кластерт хэрэглэгддэг энгийн yaml файлд үүсгэгддэг. Тодорхой PDB-ийн хамрах хүрээг шошго сонгогчид тодорхойлно.

Тайлбар: Төсвийн зөрчлийг буцаах боломжтой үед л БХБ-ын төсвийг харгалзан үзнэ (сайн дурын тасалдал). Техник хангамжийн доголдол зэрэг тохиолдолд PDB ажиллахгүй.

Жишээ PDB:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

Хоёр үндсэн параметр нь matchLabels и minAvailable. Эхний параметр нь төсөв ямар программд хамаарахыг тодорхойлдог. Жишээлбэл, хэрэв би шошготой байршуулалттай бол app: app-a и app: app-b, дараа нь энэ PDB нь зөвхөн эхнийх нь хамаарна.

Үзүүлэлт minAvailable зангилааг хоослох (цэвэрлэх) үед харгалзан үзнэ. Жишээлбэл, бидний жишээн дээр хоослох үед бүх тохиолдлыг нүүлгэн шилжүүлдэг app: app-a, хоёроос бусад.

Энэ нь ямар ч үед програмын хэдэн тохиолдол ажиллах ёстойг хянах боломжийг танд олгоно.

Хэрэглээний эрүүл мэндийн хяналт

Ийм хяналтыг Бэлэн байдал эсвэл Амьдрах тест ашиглан хоёр аргаар хийх боломжтой.

Эхний датчик (бэлэн байдал) нь чингэлэгийн хөдөлгөөнийг хүлээн авахад бэлэн байдлыг тодорхойлдог.

Хоёр дахь (амьдрал) нь сав нь эрүүл эсвэл дахин эхлүүлэх шаардлагатай эсэхийг харуулдаг.

Холбогдох тохиргоог зүгээр л байршуулахын тулд yaml-д нэмдэг. Тэнд та завсарлага, хойшлуулах хугацаа, дахин туршилтын тоог зааж өгч болно. Тэдний тухай дэлгэрэнгүй мэдээллийг үзнэ үү Kubernetes баримт бичиг.

Шошгууд нь хаа сайгүй байдаг

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

Та шошготой бараг бүх зүйлийг хийж чадна, гэхдээ нэг кластер дээр програм ажиллуулах олон орчин үүсгэх нь сайн жишээ юм.

Та ижил кластер ашигладаг гэж бодъё dev и qa. Энэ нь танд өргөдөл гаргах боломжтой гэсэн үг юм app-a, хоёр орчинд нэгэн зэрэг ажиллах qa и dev. Энэ тохиолдолд бид тохирох параметрийг зааж өгснөөр тодорхой орчинд байгаа програмын жишээнд тусад нь хандаж болно environment. Жишээлбэл, app: app-a и environment: dev нэг орчинд зориулсан, мөн app: app-a и environment: qa хоёр дахь нь.

Энэ нь танд програмын хоёр хувилбарт хандах, жишээлбэл, нэгэн зэрэг туршилт хийх боломжийг олгоно.

Зохион байгуулалттай байгаарай

Кубернетес бол маш хүчирхэг систем боловч аливаа систем хэт олон процесст гацаж болно. Kubelet нь таны зааж өгсөн бүх процесс, шалгалтыг өөрөө ажиллуулдаг.

Мэдээжийн хэрэг, нэг өнчин үйлчилгээ нь системийг удаашруулахгүй бөгөөд Kubernetes нь эхнээс нь өргөжүүлэх зорилготой юм. Гэхдээ нэг үйлчилгээний оронд сая гарч ирвэл кубелет амьсгал боогдуулж эхэлнэ.

Хэрэв та ямар нэг шалтгааны улмаас байршуулалтыг (контейнер, зураг гэх мэт) устгавал бүрэн цэвэрлэгээ хийхээ мартуузай.

Готой уулз

Бид гол зөвлөгөөг хамгийн сүүлд хадгалсан. Go програмчлалын хэл сур.

Kubernetes-ийг Go-д хөгжүүлсэн, бүх өргөтгөлүүдийг Go-д бичсэн бөгөөд client-go клиент номын санг албан ёсоор дэмждэг.

Үүнийг янз бүрийн, сонирхолтой зүйлд ашиглаж болно. Жишээлбэл, Kubernetes системийг өөрийн үзэмжээр өргөжүүлэх. Тиймээс, та өөрийн программыг ашиглан өгөгдөл цуглуулах, програм байрлуулах, эсвэл зүгээр л савыг цэвэрлэх боломжтой.

Go програмчлалын хэл сурч, client-go-г эзэмших нь Kubernetes-ийн шинэ хэрэглэгчдэд өгөх хамгийн чухал зөвлөгөө байж магадгүй юм.

Mail.ru Cloud Solutions-ийн дэмжлэгтэйгээр орчуулагдсан

Өөр юу унших вэ:

  1. Кубернетес дэх автомат масштабын гурван түвшин ба тэдгээрийг хэрхэн үр дүнтэй ашиглах талаар.
  2. Kubernetes ажилчны зангилаа: олон жижиг эсвэл цөөн том?
  3. Kubernetes-ийг байрлуулах, удирдахад хэрэгтэй 25 хэрэглүүр.

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

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