Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
Хэрэв та Kubernetes-тэй ажилладаг бол kubectl нь таны хамгийн их ашигладаг хэрэгслүүдийн нэг байх магадлалтай. Мөн та тодорхой хэрэгсэлтэй ажиллахад маш их цаг зарцуулах бүрт үүнийг сайтар судалж, хэрхэн үр дүнтэй ашиглах талаар суралцах нь зүйтэй.

баг Mail.ru сайтаас Kubernetes aaS Би kubectl-тэй үр дүнтэй ажиллах зөвлөмж, аргачлалыг санал болгодог Даниел Вейбелийн нийтлэлийг орчуулсан. Энэ нь танд Кубернетесийн талаар илүү гүнзгий ойлголттой болоход тусална.

Зохиогчийн хэлснээр энэ нийтлэлийн зорилго нь Кубернетестэй хийсэн өдөр тутмын ажлыг илүү үр дүнтэй төдийгүй илүү тааламжтай болгох явдал юм!

Танилцуулга: kubectl гэж юу вэ?

kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах талаар сурахаасаа өмнө энэ нь юу болох, хэрхэн ажилладаг талаар үндсэн ойлголттой болох хэрэгтэй.

Хэрэглэгчийн үүднээс авч үзвэл kubectl бол Kubernetes-ийн үйлдлийг гүйцэтгэх боломжийг олгодог хяналтын самбар юм.

Техникийн хувьд kubectl бол Kubernetes API үйлчлүүлэгч юм.

Kubernetes API нь HTTP REST API юм. Энэхүү API нь Kubernetes-ийн жинхэнэ хэрэглэгчийн интерфэйс бөгөөд үүгээрээ дамжуулан бүрэн хянагддаг. Энэ нь Kubernetes-ийн үйлдэл бүрийг API төгсгөлийн цэг болгон төлөөлдөг бөгөөд энэ төгсгөлийн цэг рүү HTTP хүсэлтээр гүйцэтгэх боломжтой гэсэн үг юм.

Тиймээс kubectl-ийн гол ажил бол Kubernetes API-д HTTP хүсэлт гаргах явдал юм.

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
Kubernetes бол нөөцөд бүрэн чиглэсэн систем юм. Энэ нь дотоод нөөцийн төлөвийг хадгалж, бүх Kubernetes үйлдлүүд нь CRUD үйлдлүүд гэсэн үг юм.

Та эдгээр нөөцийг удирдан Кубернетесийг бүрэн хянах боломжтой бөгөөд Кубернетес нөөцийн одоогийн байдалд үндэслэн юу хийхээ тодорхойлдог. Ийм учраас Kubernetes API нь нөөцийн төрлүүд болон тэдгээртэй холбоотой үйлдлүүдийн жагсаалт хэлбэрээр зохион байгуулагдсан.

Нэг жишээ авч үзье.

Та ReplicaSet нөөц үүсгэхийг хүсч байна гэж бодъё. Үүнийг хийхийн тулд та ReplicaSet-ийг нэртэй файлд тайлбарлана уу replicaset.yaml, дараа нь тушаалыг ажиллуулна уу:

$ kubectl create -f replicaset.yaml

Энэ нь ReplicaSet нөөцийг үүсгэх болно. Гэхдээ хөшигний ард юу болж байна вэ?

Kubernetes нь ReplicaSet үүсгэх үйлдэлтэй. Бусад үйлдлүүдийн нэгэн адил энэ нь API төгсгөлийн цэг болж илэрдэг. Энэ үйлдлийн тусгай API төгсгөлийн цэг дараах байдалтай байна:

POST /apis/apps/v1/namespaces/{namespace}/replicasets

Kubernetes-ийн бүх үйлдлийн API төгсгөлийн цэгүүдийг эндээс олж болно API лавлагаа (үүнд дээрх төгсгөлийн цэг). Төгсгөлийн цэгт бодит хүсэлт гаргахын тулд эхлээд API серверийн URL-г API лавлагаанд жагсаасан төгсгөлийн цэгийн замд хавсаргах ёстой.

Тиймээс, таныг дээрх тушаалыг ажиллуулах үед kubectl нь дээрх API төгсгөлийн цэг рүү HTTP POST хүсэлт илгээдэг. Таны файлд заасан ReplicaSet тодорхойлолт replicaset.yaml, хүсэлтийн биед дамжуулагдана.

Kubernetes кластертай харьцдаг бүх командуудад kubectl ингэж ажилладаг. Эдгээр бүх тохиолдолд kubectl нь зүгээр л HTTP хүсэлтийг тохирох Kubernetes API төгсгөлийн цэгүүд рүү илгээдэг.

гэх мэт хэрэгслийг ашиглан Kubernetes-ийг бүрэн удирдах боломжтой гэдгийг анхаарна уу curl, HTTP хүсэлтийг гараар Kubernetes API руу илгээх. Kubectl нь Kubernetes API-ийн хэрэглээг хялбаршуулдаг.

Эдгээр нь kubectl гэж юу болох, хэрхэн ажилладаг тухай үндсэн ойлголтууд юм. Гэхдээ kubectl хэрэглэгч бүрийн мэдэх ёстой Kubernetes API-ийн талаар илүү их зүйл бий. Кубернетесийн дотоод үйл ажиллагаа руу хурдан шумбаж үзье.

Кубернетесийн дотоод ертөнц

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

Мастер зангилааны хамгийн чухал бүрэлдэхүүн хэсгүүд энд байна:

  1. репозитор - нөөцийн тодорхойлолтыг хадгалдаг (Ихэнхдээ энэ нь гэх мэт).
  2. API сервер — API хангаж, хадгалах санг удирддаг.
  3. Хяналтын менежер - нөөцийн төлөв байдал нь техникийн үзүүлэлттэй нийцэж байгаа эсэхийг баталгаажуулдаг.
  4. Хуваарьлагч — ажилчны зангилаанууд дээрх pods хуваарь.

Ажилчдын зангилааны хамгийн чухал бүрэлдэхүүн хэсгүүдийн нэг нь энд байна:

  1. Кубелет - ажилчны зангилаа дээр савыг хөөргөх ажлыг удирддаг.

Эдгээр бүрэлдэхүүн хэсгүүд хэрхэн хамтран ажилладагийг ойлгохын тулд жишээг харцгаая.

Та дөнгөж сая дуусгалаа гэж бодъё kubectl create -f replicaset.yaml, үүний дараа kubectl HTTP POST хүсэлт гаргасан ReplicaSet API төгсгөлийн цэг (ReplicaSet нөөцийн тодорхойлолтыг дамжуулж байна).

Кластерт юу болж байна вэ?

  1. Хийсний дараа kubectl create -f replicaset.yaml API сервер нь таны ReplicaSet нөөцийн тодорхойлолтыг хадгалах санд хадгалдаг:

    Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага

  2. Дараа нь ReplicaSet хянагч нь ReplicaSet нөөцийг үүсгэх, өөрчлөх, устгах үйлдлийг зохицуулдаг удирдлагын менежерт нээгдэнэ.

    Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага

  3. ReplicaSet хянагч нь ReplicaSet доторх хуулбар бүрийн хувьд pod тодорхойлолтыг үүсгэж (ReplicaSet тодорхойлолт дахь подны загварын дагуу) дэлгүүрт хадгалдаг:

    Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага

  4. Төлөвлөгч нь ажилчны зангилаанд хараахан хуваарилагдаагүй байгаа pods-уудыг хянаж эхэлнэ:

    Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага

  5. Хуваарьлагч нь под тус бүрт тохирох ажилчны зангилаа сонгож, энэ мэдээллийг хадгалах сан дахь pod тодорхойлолтод нэмнэ:

    Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага

  6. Pod-г хуваарилсан ажилчны зангилаа дээр Kubelet-г ажиллуулж, уг зангилаанд хуваарилагдсан подкуудыг хянадаг:

    Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага

  7. Кубелет нь репозитороос pod тодорхойлолтыг уншиж, зангилаа дээрх контейнеруудыг ажиллуулахын тулд Docker зэрэг контейнерийн ажиллах цагт тушаалуудыг өгдөг:

    Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага

Энэ тайлбарын текст хувилбарыг доор харуулав.

ReplicaSet үүсгэх эцсийн цэгийн API хүсэлтийг API сервер боловсруулдаг. API сервер нь хүсэлтийг баталгаажуулж, ReplicaSet нөөцийн тодорхойлолтыг хадгалах санд хадгалдаг.

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

ReplicaSet хянагчийн ажил нь шаардлагатай тооны ReplicaSet pods байгаа эсэхийг баталгаажуулах явдал юм. Бидний жишээн дээр хараахан подвол байхгүй тул ReplicaSet хянагч нь эдгээр подын тодорхойлолтыг (ReplicaSet тодорхойлолт дахь pod загварын дагуу) үүсгэж, хадгалах санд хадгалдаг.

Шинэ pods үүсгэх нь ажилчны зангилаанд хараахан төлөвлөөгүй байгаа pod тодорхойлолтуудыг хянадаг төлөвлөгчийг идэвхжүүлдэг. Төлөвлөгч нь под тус бүрт тохирох ажилчны зангилаа сонгож, репозитор дахь pod тодорхойлолтыг шинэчилдэг.

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

Сүүлчийн үйл явдал нь тэдний ажилчдын зангилаанууддаа хуваарьтай хонхорцогуудыг хянадаг Kubelet-ийг идэвхжүүлдэг. Таны ReplicaSet pods суулгасан ажилчны зангилааны Kubelet нь Docker гэх мэт контейнерийн ажиллах цагийг шаардлагатай контейнерийн зургийг татаж аваад ажиллуулах зааварчилгаа өгөх ёстой.

Энэ үед таны ReplicaSet програм ажиллаж байна!

Kubernetes API-ийн үүрэг

Өмнөх жишээн дээр харсанчлан Kubernetes-ийн бүрэлдэхүүн хэсгүүд (API сервер болон хадгалах сангаас бусад) хадгалах сан дахь нөөцийн өөрчлөлтийг ажиглаж, хадгалалтын нөөцийн талаарх мэдээллийг өөрчилдөг.

Мэдээжийн хэрэг, эдгээр бүрэлдэхүүн хэсгүүд нь хадгалах сантай шууд харьцдаггүй, зөвхөн Kubernetes API-ээр дамжуулан ажилладаг.

Дараах жишээнүүдийг авч үзье:

  1. ReplicaSet хянагч нь API төгсгөлийн цэгийг ашигладаг ReplicaSets жагсаалт параметртэй watch ReplicaSet нөөцийн өөрчлөлтийг хянах.
  2. ReplicaSet хянагч нь API төгсгөлийн цэгийг ашигладаг Pod үүсгэх (pod үүсгэх) pods үүсгэх.
  3. Төлөвлөгч нь API төгсгөлийн цэгийг ашигладаг Patch Pod (pod-ыг өөрчлөх) сонгосон ажилчны зангилааны талаарх мэдээллээр подкуудыг шинэчлэх.

Таны харж байгаагаар энэ нь kubectl-ийн ханддаг API юм. Дотоод бүрэлдэхүүн хэсгүүд болон гадаад хэрэглэгчдэд ижил API ашиглах нь Kubernetes-ийн дизайны үндсэн ойлголт юм.

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

  1. Хадгалалт нь муж, өөрөөр хэлбэл Кубернетес нөөцийг хадгалдаг.
  2. API сервер нь Kubernetes API хэлбэрээр хадгалах интерфейсийг хангадаг.
  3. Kubernetes-ийн бусад бүх бүрэлдэхүүн хэсэг болон хэрэглэгчид API-ээр дамжуулан Kubernetes төлөвийг (нөөцийг) уншиж, ажиглаж, удирддаг.

Эдгээр ойлголтуудыг мэдэх нь kubectl-г илүү сайн ойлгож, түүнээс хамгийн их ашиг хүртэхэд тусална.

Одоо kubectl-ийн бүтээмжийг сайжруулахад туслах тодорхой зөвлөмж, аргачлалуудыг харцгаая.

1. Командыг дуусгаснаар бичих ажлыг хурдасгана

kubectl бүтээмжийг сайжруулах хамгийн хэрэгтэй, гэхдээ ихэнхдээ үл тоомсорлодог аргуудын нэг бол командын гүйцэтгэл юм.

Тушаал дуусгах нь Tab товчлуурыг ашиглан kubectl командын бие даасан хэсгийг автоматаар дуусгах боломжийг танд олгоно. Энэ нь дэд командууд, сонголтууд болон аргументуудад, үүнд нөөцийн нэр гэх мэт нарийн төвөгтэй командуудад ажиллана.

kubectl командын гүйцэтгэл хэрхэн ажилладагийг харна уу:

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
Командыг дуусгах нь Bash болон Zsh бүрхүүлд зориулагдсан.

Албан ёсны хөтөч нь автоматаар гүйцээхийг тохируулах талаар дэлгэрэнгүй зааврыг агуулсан боловч доор бид товч ишлэлийг өгдөг.

Командын гүйцэтгэл хэрхэн ажилладаг

Command completion нь дуусгах скрипт ашиглан ажилладаг бүрхүүлийн функц юм. Гүйцэтгэх скрипт нь тодорхой командын гүйцэтгэлийн үйлдлийг тодорхойлдог бүрхүүлийн скрипт юм.

Kubectl нь дараах командуудыг ашиглан Bash болон Zsh-д зориулсан дуусгах скриптүүдийг автоматаар үүсгэж, гаргадаг.

$ kubectl completion bash

Эсвэл:

$ kubectl completion zsh

Онолын хувьд эдгээр командын гаралтыг тохирох тушаалын бүрхүүлд оруулахад хангалттай бөгөөд ингэснээр kubectl тушаалуудыг гүйцээж чадна.

Практикт холболтын арга нь Bash (Linux болон MacOS хоорондын ялгааг оруулаад) болон Zsh хооронд ялгаатай байдаг. Бид эдгээр бүх сонголтыг доор авч үзэх болно.

Линукс дээр Bash

Bash дуусгах скрипт нь bash дуусгах багцаас хамаардаг тул та эхлээд үүнийг суулгах хэрэгтэй:

$ sudo apt-get install bash-completion

Эсвэл:

$ yum install bash-completion

Та дараах тушаалыг ашиглан багцыг амжилттай суулгасан эсэхийг шалгаж болно.

$ type _init_completion

Хэрэв энэ нь бүрхүүлийн функцийн кодыг гаргавал bash-г гүйцээхийг зөв суулгасан болно. Хэрэв тушаал "Одоогүй" гэсэн алдааг буцаавал та дараах мөрийг файлдаа нэмэх хэрэгтэй. ~ / .bashrc:

$ source /usr/share/bash-completion/bash_completion

Энэ мөрийг файлд нэмэх шаардлагатай юу ~ / .bashrc Энэ нь шаардлагатай эсэхээс үл хамааран bash-ийг суулгахдаа ашигласан багц менежерээс хамаарна. Энэ нь APT-д шаардлагатай боловч YUM-д биш юм.

Bash-ийг суулгасны дараа та kubectl дуусгах скриптийг бүх бүрхүүлийн сессүүдэд идэвхжүүлэхийн тулд бүх зүйлийг тохируулах хэрэгтэй.

Үүнийг хийх нэг арга бол файлд дараах мөрийг нэмэх явдал юм ~ / .bashrc:

source <(kubectl completion bash)

Өөр нэг арга бол kubectl addon скриптийг директорт нэмэх явдал юм /etc/bash_completion.d (хэрэв байхгүй бол үүсгэнэ үү):

$ kubectl completion bash >/etc/bash_completion.d/kubectl

Каталогт байгаа бүх нэмэлт скриптүүд /etc/bash_completion.d автоматаар bash дуусгахад багтдаг.

Хоёр сонголт хоёулаа адилхан хамааралтай.

Бүрхүүлийг дахин эхлүүлсний дараа kubectl командыг дуусгах нь ажиллах болно.

MacOS дээр Bash

MacOS дээр тохиргоо нь арай илүү төвөгтэй байдаг. Учир нь macOS нь анхдагчаар Bash 3.2-г ашигладаг бөгөөд kubectl автоматаар гүйцээх скрипт нь Bash 4.1 ба түүнээс дээш хувилбарыг шаарддаг бөгөөд Bash 3.2 дээр ажилладаггүй.

MacOS дээр Bash-ийн хуучирсан хувилбарыг ашиглах нь лицензийн асуудлаас үүдэлтэй. Bash хувилбар 4 нь GPLv3-ийн дагуу лицензтэй бөгөөд Apple үүнийг дэмждэггүй.

MacOS дээр kubectl автоматаар гүйцээхийг тохируулахын тулд та Bash-ийн сүүлийн үеийн хувилбарыг суулгах хэрэгтэй. Та мөн шинэчлэгдсэн Bash-г анхдагч бүрхүүл болгон тохируулж болох бөгөөд энэ нь таныг ирээдүйд маш их бэрхшээлээс аврах болно. Энэ нь амархан; дэлгэрэнгүй мэдээллийг нийтлэлд оруулсан болно "MacOS дээр Bash-ийг шинэчилж байна".

Үргэлжлүүлэхээсээ өмнө Bash-ийн сүүлийн хувилбарыг ашиглаж байгаа эсэхээ шалгана уу (гаралтыг шалгана уу bash --version).

Bash автоматаар гүйцээх скрипт нь төсөлд зориулагдсан bash дуусгах, тиймээс та эхлээд суулгах хэрэгтэй.

Та bash-г ашиглан суулгаж болно гар хийцийн:

$ brew install bash-completion@2

энд @2 bash-completion version 2-ын товчлол юм. kubectl-ийг дуусгахад bash-completion v2, bash-completion v2-д доод тал нь Bash хувилбар 4.1 шаардлагатай.

Тушаалын гаралт brew-install файлд юу нэмэх ёстойг зааж өгсөн Анхааруулга хэсгийг агуулдаг ~/.bash_profile:

export BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . 
"/usr/local/etc/profile.d/bash_completion.sh"

Гэсэн хэдий ч би эдгээр мөрүүдийг оруулахгүй байхыг зөвлөж байна ~/.bash_profile, дотор нь ~/.bashrcЭнэ тохиолдолд автоматаар гүйцээх нь зөвхөн үндсэн бүрхүүлд төдийгүй хүүхдийн командын бүрхүүлд боломжтой болно.

Командын бүрхүүлийг дахин эхлүүлсний дараа та дараах тушаалыг ашиглан суулгацын зөв эсэхийг шалгаж болно.

$ type _init_completion

Хэрэв та гаралт дээр бүрхүүлийн функцийг харвал бүх зүйл зөв тохируулагдсан байна.

Одоо бид kubectl автоматаар гүйцээх функцийг бүх сешнүүдэд идэвхжүүлсэн эсэхийг шалгах хэрэгтэй.

Нэг арга зам бол дараах мөрийг өөрийн мөрөнд нэмэх явдал юм ~/.bashrc:

source <(kubectl completion bash)

Хоёрдахь арга бол хавтас руу автоматаар бөглөх скрипт нэмэх явдал юм /usr/local/etc/bash_completion.d:

$ kubectl completion bash
>/usr/local/etc/bash_completion.d/kubectl

Энэ арга нь зөвхөн Homebrew ашиглан bash-г бөглөх суулгасан тохиолдолд л ажиллах болно. Энэ тохиолдолд bash дуусгах нь энэ лавлахаас бүх скриптийг ачаална.

Хэрэв та суулгасан бол kubectl Homebrew ашиглан, дараа нь та өмнөх алхамыг хийх шаардлагагүй, учир нь автоматаар бөглөх скрипт нь хавтсанд автоматаар тавигдах болно. /usr/local/etc/bash_completion.d суурилуулах явцад. Энэ тохиолдолд kubectl автоматаар дуусгах нь bash-г суулгасны дараа шууд ажиллаж эхэлнэ.

Эцсийн эцэст эдгээр бүх сонголтууд тэнцүү байна.

Зш

Zsh-ийн автомат бөглөх скриптүүд нь хамаарал шаарддаггүй. Таны хийх ёстой зүйл бол бүрхүүлийг эхлүүлэх үед тэдгээрийг идэвхжүүлэх явдал юм.

Та үүнийг өөрийн мөрөнд мөр нэмж хийж болно ~/.zshrc файл:

source <(kubectl completion zsh)

Хэрэв та алдаа хүлээн авбал not found: compdef Бүрхүүлээ дахин эхлүүлсний дараа та суулгасан функцийг идэвхжүүлэх хэрэгтэй compdef. Та үүнийг файлынхаа эхэнд нэмж идэвхжүүлж болно. ~/.zshrc дараах байдлаар:

autoload -Uz compinit
compinit

2. Нөөцийн үзүүлэлтүүдийг хурдан харах

YAML нөөцийн тодорхойлолтыг үүсгэхдээ эдгээр нөөцийн талбарууд болон тэдгээрийн утгыг мэдэх хэрэгтэй. Энэ мэдээллийг олох нэг газар бол бүх нөөцийн бүрэн үзүүлэлтүүдийг агуулсан API лавлагаа юм.

Гэсэн хэдий ч ямар нэг зүйл хайх бүрт вэб хөтөч рүү шилжих нь тохиромжгүй байдаг. Тиймээс kubectl тушаалыг өгдөг kubectl explain, энэ нь таны терминал дээрх бүх нөөцийн үзүүлэлтүүдийг харуулдаг.

Командын формат дараах байдалтай байна.

$ kubectl explain resource[.field]...

Энэ тушаал нь хүссэн нөөц эсвэл талбарын тодорхойлолтыг гаргана. Мэдээллийн гаралт нь API гарын авлагад байгаатай ижил байна.

анхдагчаар kubectl explain талбайн үүрлэлтийн зөвхөн эхний түвшинг харуулж байна.

Энэ нь ямар харагдаж байгааг хараарай Та дараа нь болно.

Та сонголтыг нэмснээр модыг бүхэлд нь харуулах боломжтой --recursive:

$ kubectl explain deployment.spec --recursive

Хэрэв та яг ямар нөөц хэрэгтэйг мэдэхгүй байгаа бол дараах тушаалаар бүгдийг нь харуулах боломжтой.

$ kubectl api-resources

Энэ тушаал нь нөөцийн нэрийг олон тоогоор харуулдаг, жишээлбэл, deployments оронд нь deployment. Энэ нь мөн гэх мэт богино нэрийг харуулдаг deploy, байгаа нөөцийн хувьд. Эдгээр ялгааны талаар санаа зовох хэрэггүй. Эдгээр бүх нэрлэх сонголтууд нь kubectl-тэй дүйцэхүйц байна. Өөрөөр хэлбэл та тэдгээрийн аль нэгийг нь ашиглаж болно kubectl explain.

Дараах бүх тушаалууд тэнцүү байна:

$ kubectl explain deployments.spec
# или
$ kubectl explain deployment.spec
# или        
$ kubectl explain deploy.spec

3. Тусгай баганын гаралтын форматыг ашиглана уу

Анхдагч тушаалын гаралтын формат нь kubectl get:

$ kubectl get pods
NAME                     READY    STATUS    RESTARTS  AGE
engine-544b6b6467-22qr6   1/1     Running     0       78d
engine-544b6b6467-lw5t8   1/1     Running     0       78d
engine-544b6b6467-tvgmg   1/1     Running     0       78d
web-ui-6db964458-8pdw4    1/1     Running     0       78d

Энэ формат нь тохиромжтой боловч хязгаарлагдмал хэмжээний мэдээллийг агуулдаг. Бүрэн нөөцийн тодорхойлолтын форматтай харьцуулахад энэ нь хэдхэн талбарыг харуулдаг.

Энэ тохиолдолд та өөрчлөн баганын гаралтын форматыг ашиглаж болно. Энэ нь ямар өгөгдөл гаргахыг тодорхойлох боломжийг танд олгоно. Та ямар ч нөөцийн талбарыг тусдаа багана болгон гаргаж болно.

Захиалгат форматын хэрэглээг дараах сонголтуудаар тодорхойлно.

-o custom-columns=<header>:<jsonpath>[,<header>:<jsonpath>]...

Та гаралтын багана бүрийг хос болгон тодорхойлж болно <header>:<jsonpath>хаана <header> - баганын нэр, ба <jsonpath> - нөөцийн талбарыг тодорхойлсон илэрхийлэл.

Энгийн жишээг харцгаая:

$ kubectl get pods -o custom-columns='NAME:metadata.name'

NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4

Гаралт нь хонгилын нэр бүхий нэг багана агуулна.

Сонголт дахь илэрхийлэл нь талбараас pod нэрийг сонгоно metadata.nameУчир нь pod нэр нь хүүхдийн талбарын нэрээр тодорхойлогддог metadata pod-ийн нөөцийн тайлбарт. Дэлгэрэнгүй мэдээллийг эндээс авах боломжтой API гарын авлага эсвэл тушаал бичнэ үү kubectl explain pod.metadata.name.

Одоо та гаралтад нэмэлт багана нэмэхийг хүсч байна гэж бодъё, жишээлбэл, под бүр дээр ажиллаж байгаа зангилааг харуулах. Үүнийг хийхийн тулд та захиалгат баганын сонголтод тохирох баганын тодорхойлолтыг нэмж болно:

$ kubectl get pods 
  -o custom-columns='NAME:metadata.name,NODE:spec.nodeName'

NAME                       NODE
engine-544b6b6467-22qr6    ip-10-0-80-67.ec2.internal
engine-544b6b6467-lw5t8    ip-10-0-36-80.ec2.internal
engine-544b6b6467-tvgmg    ip-10-0-118-34.ec2.internal
web-ui-6db964458-8pdw4     ip-10-0-118-34.ec2.internal

Илэрхийлэл нь зангилааны нэрийг сонгоно spec.nodeName — зангилаанд pod нь оноогдсон үед түүний нэрийг талбарт бичнэ spec.nodeName pod нөөцийн тодорхойлолт. Илүү дэлгэрэнгүй мэдээллийг гаралтаас авах боломжтой kubectl explain pod.spec.nodeName.

Kubernetes нөөцийн талбарууд нь том жижиг жижиг жижиг үсгийг мэдэрдэг гэдгийг анхаарна уу.

Та ямар ч нөөцийн талбарыг багана хэлбэрээр харж болно. Зүгээр л нөөцийн тодорхойлолтыг хянаж үзээд дуртай талбараараа туршиж үзээрэй.

Гэхдээ эхлээд талбайн сонголтын илэрхийллүүдийг нарийвчлан авч үзье.

JSONPath илэрхийлэл

Нөөцийн талбаруудыг сонгох илэрхийлэл нь дээр үндэслэсэн болно JSONPath.

JSONPath нь JSON баримтаас мэдээлэл авах хэл юм. Нэг талбарыг сэргээх нь JSONPath-ийн хамгийн энгийн хэрэглээ юм. Үүнд маш их зүйл бий илүү их боломж, үүнд сонгогч, шүүлтүүр гэх мэт.

Kubectl тайлбарлах нь хязгаарлагдмал тооны JSONPath боломжийг дэмждэг. Эдгээр чадвар, хэрэглээний жишээг доор тайлбарлав.

# Выбрать все элементы списка
$ kubectl get pods -o custom-columns='DATA:spec.containers[*].image'
# Выбрать специфический элемент списка
$ kubectl get pods -o custom-columns='DATA:spec.containers[0].image'
# Выбрать элементы списка, попадающие под фильтр
$ kubectl get pods -o custom-columns='DATA:spec.containers[?(@.image!="nginx")].image'
# Выбрать все поля по указанному пути, независимо от их имени
$ kubectl get pods -o custom-columns='DATA:metadata.*'
# Выбрать все поля с указанным именем, вне зависимости от их расположения
$ kubectl get pods -o custom-columns='DATA:..image'

[] оператор онцгой чухал. Kubernetes нөөцийн олон талбарууд нь жагсаалт бөгөөд энэ оператор эдгээр жагсаалтаас элементүүдийг сонгох боломжийг танд олгоно. Жагсаалтын бүх элементүүдийг сонгохдоо [*] гэх мэт орлуулагч тэмдэгтээр ихэвчлэн ашиглагддаг.

Програмын жишээ

Гаралтад дурын талбар эсвэл нөөцийн талбаруудын хослолыг харуулах боломжтой тул захиалгат баганын гаралтын форматыг ашиглах боломж хязгааргүй юм. Энд хэдэн жишээ програм байна, гэхдээ тэдгээрийг өөрөө судалж, хэрэгцээтэй програмуудыг хайж олох боломжтой.

  1. Контейнерийн зургийг харуулж байна.
    $ kubectl get pods 
      -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
    
    NAME                        IMAGES
    engine-544b6b6467-22qr6     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-lw5t8     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-tvgmg     rabbitmq:3.7.8-management,nginx
    web-ui-6db964458-8pdw4      wordpress

    Энэ тушаал нь под тус бүрийн контейнер зургийн нэрийг харуулна.

    Под нь олон контейнер агуулж болно гэдгийг санаарай, энэ тохиолдолд зургийн нэрийг таслалаар тусгаарласан нэг мөрөнд харуулах болно.

  2. Зангилааны боломжтой бүсүүдийг харуулж байна:
    $ kubectl get nodes 
      -o 
    custom-columns='NAME:metadata.name,ZONE:metadata.labels.failure-domain.beta.kubernetes.io/zone'
    
    NAME                          ZONE
    ip-10-0-118-34.ec2.internal   us-east-1b
    ip-10-0-36-80.ec2.internal    us-east-1a
    ip-10-0-80-67.ec2.internal    us-east-1b

    Хэрэв таны кластер нь нийтийн үүлэнд байрладаг бол энэ тушаал хэрэгтэй. Энэ нь зангилаа бүрийн боломжтой бүсийг харуулдаг.

    Availability Zone нь хуулбарлах хэсгийг газарзүйн бүсээр хязгаарладаг үүлний ойлголт юм.

    Зангилаа бүрийн хүртээмжтэй бүсийг тусгай шошго ашиглан олж авдаг - failure-domain.beta.kubernetes.io/zoneХэрэв кластер нь нийтийн үүлэн дээр ажиллаж байгаа бол энэ шошгыг автоматаар үүсгэж, зангилаа бүрийн боломжтой бүсийн нэрээр дүүргэнэ.

    Шошго нь Kubernetes нөөцийн тодорхойлолтын нэг хэсэг биш тул та тэдгээрийн талаарх мэдээллийг эндээс олохгүй API гарын авлагаГэсэн хэдий ч тэдгээрийг YAML эсвэл JSON форматаар зангилааны мэдээллийг хүсэх замаар (бусад шошготой адил) харж болно:

    $ kubectl get nodes -o yaml
    # или
    $ kubectl get nodes -o json

    Энэ нь нөөцийн тодорхойлолтыг судлахаас гадна нөөцийн талаар илүү ихийг мэдэх гайхалтай арга юм.

4. Кластер болон нэрийн зай хооронд хялбар сэлгэх

kubectl нь Kubernetes API-д хүсэлт гаргахдаа эхлээд kubeconfig файлыг уншиж холболтод шаардлагатай бүх параметрүүдийг авдаг.

Анхдагч байдлаар, kubeconfig файл нь байна ~/.kube/config. Энэ файлыг ихэвчлэн тусгай тушаалаар үүсгэж эсвэл шинэчилдэг.

Та олон кластертай ажиллах үед таны kubeconfig файл бүгдэд нь холболтын параметрүүдийг агуулна. Та аль кластертай ажиллаж байгаагаа kubectl тушаалд хэлэх арга хэрэгтэй.

Кластер дотор та физик кластер доторх виртуал кластерын төрөл болох олон нэрийн орон зай үүсгэж болно. Kubectl нь kubeconfig файл дээр үндэслэн ямар нэрийн орон зайг ашиглахыг тодорхойлдог. Тиймээс, танд kubectl-д аль нэрний зайг ашиглахаа хэлэх арга хэрэгтэй.

Энэ бүлэгт бид хэрхэн ажилладаг, үр дүнтэй ажилд хэрхэн хүрэх талаар тайлбарлах болно.

Та KUBECONFIG орчны хувьсагчид жагсаасан олон kubeconfig файлтай байж болохыг анхаарна уу. Энэ тохиолдолд эдгээр бүх файлыг ажиллах үед нэг хуваалцсан тохиргоонд нэгтгэх болно. Та мөн kubectl-г параметртэй ажиллуулснаар өгөгдмөл kubeconfig файлыг өөрчилж болно --kubeconfig. Хараач. албан ёсны баримт бичиг.

kubeconfig файлууд

Kubeconfig файлд яг юу агуулагдаж байгааг харцгаая:

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
Таны харж байгаагаар kubeconfig файл нь контекстүүдийн багцыг агуулдаг. Контекст нь гурван элементээс бүрдэнэ:

  • Кластер — Кластер серверийн API URL.
  • Хэрэглэгч — кластерт зориулсан хэрэглэгчийн баталгаажуулалт.
  • Нэрийн орон зай - Кластерт нэгдэх үед ашигладаг нэрийн орон зай.

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

Ямар ч үед контекстүүдийн нэг нь одоогийн байна:

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
kubectl тохиргооны файлыг уншихдаа тухайн үеийн контекстээс мэдээлэл авдаг. Дээрх жишээнд kubectl нь Hare кластерт холбогдох болно.

Үүний дагуу өөр кластер руу шилжихийн тулд та kubeconfig файл дахь одоогийн контекстийг өөрчлөх хэрэгтэй.

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
Одоо kubectl нь Fox кластерт холбогдох болно.

Нэг кластер дахь өөр нэрийн орон зай руу шилжихийн тулд та одоогийн контекст нэрийн орон зайны элементийн утгыг өөрчлөх шаардлагатай.

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
Дээрх жишээнд kubectl нь Fox кластерын Бүтээгдэхүүний нэрийн орон зайг ашиглах болно (Тестийн нэрийн талбарыг өмнө нь тохируулсан).

kubectl нь бас сонголтуудыг өгдөг гэдгийг анхаарна уу --cluster, --user, --namespace и --context, энэ нь kubeconfig файлд юу тохируулагдсанаас үл хамааран бие даасан элементүүд болон одоогийн контекстийг дарж бичих боломжийг олгодог. Харна уу kubectl options.

Онолын хувьд та kubeconfig файл дахь параметрүүдийг гараар өөрчлөх боломжтой. Гэсэн хэдий ч энэ нь тохиромжгүй юм. Эдгээр үйлдлүүдийг хялбарчлахын тулд параметрүүдийг автоматаар өөрчлөх боломжийг олгодог янз бүрийн хэрэгслүүд байдаг.

kubectx ашиглах

Кластер болон нэрийн орон зай хооронд шилжих маш алдартай хэрэгсэл.

Хэрэгсэл нь тушаалуудыг өгдөг kubectx и kubens одоогийн контекст болон нэрийн орон зайг тус тус өөрчлөх.

Өмнө дурьдсанчлан, одоогийн контекстийг өөрчлөх нь кластер бүрт зөвхөн нэг контекст байвал кластерыг өөрчилнө гэсэн үг юм.

Эдгээр тушаалуудыг гүйцэтгэх жишээ энд байна:

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
Үндсэндээ эдгээр тушаалууд нь дээр дурдсанчлан kubeconfig файлыг засдаг.

Суулгахын тулд kubectx, дээрх зааврыг дагана уу Гитуб.

Хоёр тушаал хоёулаа контекст болон нэрийн зайн нэрийг автоматаар бөглөхийг дэмжиж, тэдгээрийг бүрэн бичих шаардлагагүй болно. Автомат бөглөх тохиргоог хийх заавар энд.

Өөр нэг ашигтай шинж чанар kubectx Энэ нь интерактив горимЭнэ нь хэрэгсэлтэй хамт ажилладаг fzf, үүнийг тусад нь суулгах ёстой. fzf-г автоматаар суулгаснаар интерактив горимыг ашиглах боломжтой болгодог kubectxИнтерактив горимд та fzf-ийн өгсөн интерактив үнэгүй хайлтын интерфейсээр дамжуулан контекст болон нэрийн орон зайг сонгох боломжтой.

Бүрхүүлийн нэр ашиглах

kubectl мөн үүнд зориулсан командуудыг өгдөг тул одоогийн контекст болон нэрийн орон зайг өөрчлөхийн тулд танд тусдаа хэрэгсэл хэрэггүй. Жишээлбэл, тушаал kubectl config Kubeconfig файлуудыг засварлах дэд командуудыг өгдөг.

Эдгээрийн зарим нь:

  • kubectl config get-contexts: бүх контекстийг гаргах;
  • kubectl config current-context: одоогийн нөхцөл байдлыг олж авах;
  • kubectl config use-context: одоогийн нөхцөл байдлыг өөрчлөх;
  • kubectl config set-context: контекст элементийг өөрчлөх.

Гэсэн хэдий ч эдгээр тушаалуудыг шууд ашиглах нь тийм ч тохиромжтой биш бөгөөд учир нь тэдгээр нь урт байдаг. Та тэдгээрийг гүйцэтгэхэд хялбар бүрхүүлийн нэр үүсгэж болно.

Би kubectx-тэй төстэй функцээр хангадаг эдгээр командууд дээр тулгуурлан олон тооны нэр үүсгэсэн. Та тэдгээрийг хэрхэн ажиллаж байгааг эндээс харж болно:

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
Гадна нэр нь fzf-г интерактив, чөлөөтэй хайх интерфэйсийг (kubectx-ийн интерактив горимтой төстэй) хангахын тулд ашигладаг болохыг анхаарна уу. Энэ нь танд хэрэгтэй гэсэн үг юм fzf суулгана ууЭдгээр нэрсийг ашиглах.

Энд нэрсийн тодорхойлолтууд байна:

# Получить текущий контекст
alias krc='kubectl config current-context'
# Список всех контекстов
alias klc='kubectl config get-contexts -o name | sed "s/^/  /;|^  $(krc)$|s/ /*/"'
# Изменить текущий контекст
alias kcc='kubectl config use-context "$(klc | fzf -e | sed "s/^..//")"'

# Получить текущее пространство имен
alias krn='kubectl config get-contexts --no-headers "$(krc)" | awk "{print $5}" | sed "s/^$/default/"'
# Список всех пространств имен
alias kln='kubectl get -o name ns | sed "s|^.*/|  |;|^  $(krn)$|s/ /*/"'
# Изменить текущее пространство имен
alias kcn='kubectl config set-context --current --namespace "$(kln | fzf -e | sed "s/^..//")"'

Эдгээр нэрсийг тохируулахын тулд дээрх тодорхойлолтуудыг файлдаа нэмэх шаардлагатай. ~/.bashrc буюу ~/.zshrc мөн бүрхүүлээ дахин ачаална уу.

Plugins ашиглах

Kubectl нь үндсэн командуудын нэгэн адил хэрэгждэг залгаасуудыг ачаалах боломжийг олгодог. Жишээлбэл, та kubectl-foo залгаасыг суулгаж, тушаалыг ажиллуулж ажиллуулж болно kubectl foo.

Ийм байдлаар контекст болон нэрийн орон зайг өөрчлөх нь тохиромжтой байх болно, жишээлбэл, ажиллуулах kubectl ctx нөхцөлийг өөрчлөх ба kubectl ns нэрийн орон зайг өөрчлөх.

Би үүнийг хийдэг хоёр залгаас бичсэн:

Plugins нь өмнөх хэсгийн нэр дээр тулгуурлан ажилладаг.

Тэд хэрхэн ажилладагийг энд харуулав.

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
Plugins нь fzf-г ашиглан интерактив, чөлөөтэй хайлт хийх интерфэйсийг (kubectx-ийн интерактив горимтой төстэй) хангадаг болохыг анхаарна уу. Энэ нь танд хэрэгтэй гэсэн үг юм fzf суулгана ууЭдгээр нэрсийг ашиглах.

Плагинуудыг суулгахын тулд та нэртэй бүрхүүлийн скриптүүдийг татаж авах хэрэгтэй kubectl-ctx и kubectl-ns PATH хувьсагчийнхаа дурын лавлах руу шилжүүлж, гүйцэтгэх боломжтой болгох, жишээ нь chmod +x. Үүний дараа та шууд ашиглах боломжтой болно. kubectl ctx и kubectl ns.

5. Оролтыг автомат нэрээр богиносгох

Бүрхүүлийн нэр нь бичихийг хурдасгах гайхалтай арга юм. Төсөл kubectl-алиасууд Үндсэн kubectl командын 800 орчим товчлол агуулсан.

Та 800 нэрийн нэрийг хэрхэн санах талаар гайхаж байж магадгүй юм. Гэхдээ та тэдгээрийг бүгдийг нь санах шаардлагагүй, учир нь тэд доор үзүүлсэн шиг энгийн томъёог дагаж мөрддөг.

Kubectl-ийг хэрхэн илүү үр дүнтэй ашиглах вэ: дэлгэрэнгүй гарын авлага
Жишээ нь:

  1. kgpooyaml - kubectl pods oyaml авах
  2. ksysgsvcw — kubectl -n kube-систем нь svc w авах
  3. ksysrmcm -kubectl -n kube-систем rm см
  4. kgdepallls - kubectl deployment all sl

Таны харж байгаагаар бусад нэр нь kubectl командын тодорхой элементийг төлөөлдөг бүрэлдэхүүн хэсгүүдээс бүрддэг. Гадна нэр бүр нь үндсэн тушаал, үйлдэл, нөөцийн нэг бүрэлдэхүүн хэсэг, параметрийн олон бүрэлдэхүүн хэсэгтэй байж болно. Та дээрх схемийн дагуу эдгээр бүрэлдэхүүн хэсгүүдийг зүүнээс баруун тийш "бөглөх" хэрэгтэй.

Одоогийн нарийвчилсан диаграмм дээр байрладаг GitHubТэнд та бас олж болно хоч нэрсийн бүрэн жагсаалт.

Жишээ нь, kgpooyamlall гэдэг нь командтай тэнцэнэ kubectl get pods -o yaml --all-namespaces.

Сонголтуудын харьцангуй дараалал нь чухал биш юм: тушаал kgpooyamlall тушаалтай тэнцэнэ kgpoalloyaml.

Та бүх бүрэлдэхүүн хэсгүүдийг өөр нэр болгон ашиглаж болохгүй. Жишээ нь k, kg, klo, ksys, kgpo бас ашиглаж болно. Түүнчлэн, командын мөрөнд бусад нэр болон ердийн тушаалууд эсвэл сонголтуудыг нэгтгэж болно:

Жишээ нь:

  1. Оронд нь kubectl proxy та бичиж болно k proxy.
  2. Оронд нь kubectl get roles та бичиж болно kg roles (Одоогоор үүрэг ролийн нөөцийн нэр байхгүй).
  3. Тодорхой pod-д өгөгдөл авахын тулд та тушаалыг ашиглаж болно kgpo my-pod — kubectl get pod my-pod.

Зарим нэрс нь командын мөрөнд аргумент шаарддаг гэдгийг анхаарна уу. Жишээлбэл, бусад нэр kgpol гэсэн үг kubectl get pods -l. Сонголт -l аргумент шаарддаг - шошгоны тодорхойлолт. Хэрэв та өөр нэр ашиглавал дараах байдлаар харагдах болно. kgpol app=ui.

Зарим нэрс нь аргумент шаарддаг тул a, f, l нэрсийг хамгийн сүүлд ашиглах ёстой.

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

Суурилуулалт

kubectl-алиасуудыг суулгахын тулд та файлыг татаж авах хэрэгтэй .kubectl_aliases GitHub-аас файлд оруулаарай ~/.bashrc буюу ~/.zshrc:

source ~/.kubectl_aliases

Автоматаар дуусгах

Өмнө дурьдсанчлан, та командын мөрөнд өөр нэрэнд нэмэлт үгс нэмж оруулдаг. Жишээ нь:

$ kgpooyaml test-pod-d4b77b989

Хэрэв та kubectl командыг дуусгахыг ашигладаг бол та үүнийг нөөцийн нэр гэх мэт зүйлд ашигласан байх. Гэхдээ бусад нэр ашиглах үед үүнийг хийх боломжтой юу?

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

Хариулт нь таны ямар бүрхүүл ашиглаж байгаагаас хамаарна.

  1. Zsh-ийн хувьд хуурамч нэрийг автоматаар гүйцээх нь хайрцагнаас гадуур ажилладаг.
  2. Харамсалтай нь, Bash-д автоматаар дуусгахын тулд зарим ажил шаардлагатай.

Bash дахь бусад нэрийг автоматаар бөглөхийг идэвхжүүлж байна

Bash-тай холбоотой асуудал бол энэ нь бусад нэрийг (жишээ нь Zsh гэх мэт) заадаг командыг биш харин (Та Tab товчлуурыг дарах болгонд) гүйцээхийг оролддогт оршино. Танд бүх 800 нэрийн гүйцээх скрипт байхгүй тул автоматаар гүйцээх нь ажиллахгүй.

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

Дараа нь би эхлээд бүрэн-алиа-г хэрхэн суулгах, дараа нь бүх kubectl-д гүйцээхийг идэвхжүүлэхийн тулд хэрхэн тохируулах талаар тайлбарлах болно.

Бүрэн нэр суулгаж байна

Юуны өмнө, бүрэн-алиас хамаарна bash дуусгахТиймээс, та бүрэн нэр суулгахаасаа өмнө bash-г бүрэн гүйцэд суулгасан эсэхийг шалгах хэрэгтэй. Суулгах зааврыг өмнө нь Linux болон macOS-д өгсөн.

MacOS хэрэглэгчдэд зориулсан чухал тэмдэглэл: kubectl автоматаар гүйцээх скриптийн нэгэн адил бүрэн нэр нь MacOS дээрх үндсэн хувилбар болох Bash 3.2-тэй ажиллахгүй. Ялангуяа, бүрэн нэр нь bash дуусгах v2 (brew install bash-completion@2), хамгийн багадаа Bash 4.1 шаарддаг. Энэ нь macOS дээр бүрэн нэр ашиглахын тулд Bash-ийн шинэ хувилбарыг суулгах шаардлагатай гэсэн үг юм.

Та скриптийг татаж авах хэрэгтэй bash_completion.sh нь GitHub репозитор мөн файлдаа оруулна уу ~/.bashrc:

source ~/bash_completion.sh

Бүрхүүлийг дахин ачаалсны дараа бүрэн нэр бүрэн суурилагдсан болно.

kubectl нэрийн автомат гүйцээлтийг идэвхжүүлж байна

Техникийн хувьд, бүрэн нэр нь бүрхүүлийн функцийг хангадаг _complete_aliasЭнэ функц нь alias-ыг шалгаж, алиас командын дуусгах зөвлөмжийг буцаана.

Тодорхой нэр бүхий функцийг холбохын тулд та Bash-ийн суурилуулсан механизмыг ашиглах хэрэгтэй. иж бүрэнсуулгах _complete_alias нэрийн нэмэлтийн функцээр.

Жишээ болгон kubectl командыг илэрхийлдэг k alias-ийг авч үзье. Суулгахын тулд _complete_alias Энэ нэрийн нэмэлт функцийн хувьд та дараах тушаалыг ажиллуулах хэрэгтэй.

$ complete -F _complete_alias k

Үүний үр дүнд k-г автоматаар бөглөх болгонд уг функц дуудагдана _complete_alias, энэ нь бусад нэрийг шалгаж, командын гүйцэтгэлийн зөвлөмжийг буцаана kubectl.

Хоёрдахь жишээ болгон өөр нэр авъя kg, гэсэн үг kubectl get:

$ complete -F _complete_alias kg

Өмнөх жишээн дээрх шиг, та кг-ыг автоматаар бөглөхөд таны авах боломжтой ижил төстэй дуусгах зөвлөмжийг авах болно. kubectl get.

Та өөрийн систем дээрх аливаа өөр нэрийн хувьд бүрэн-алиа ашиглаж болно гэдгийг анхаарна уу.

Тиймээс, бүх kubectl нэрийн автомат гүйцээлтийг идэвхжүүлэхийн тулд дээрх тушаалыг тус бүр дээр ажиллуулах хэрэгтэй. Та kubectl-алиасуудыг тохируулсан гэж үзвэл дараах хэсэг үүнийг л хийнэ ~/.kubectl-aliases:

for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//' ~/.kubectl_aliases); 
do
  complete -F _complete_alias "$_a"
done

Энэ кодын хэсэг нь таны дотор байх ёстой ~/.bashrc, тушаалын бүрхүүлийг дахин эхлүүлснээр автоматаар гүйцээх нь бүх 800 kubectl нэрийн хувьд боломжтой болно.

6. Plugin-ийн тусламжтайгаар kubectl-г өргөтгөх

-С эхлэн хувилбар 1.12, kubectl дэмждэг залгаас механизм, энэ нь функцийг нэмэлт командуудаар өргөжүүлэх боломжийг танд олгоно.

Хэрэв танил бол Git залгаасын механизмууд, дараа нь kubectl залгаасууд ижил зарчмаар бүтээгдсэн.

Энэ бүлэгт бид залгаасуудыг хэрхэн суулгах, тэдгээрийг хаанаас олох, өөрийн залгаасуудыг хэрхэн үүсгэх талаар авч үзэх болно.

Plugins суулгаж байна

Kubectl залгаасууд нь ийм нэртэй энгийн гүйцэтгэх файл хэлбэрээр тархсан kubectl-x. Угтвар kubectl- шаардлагатай бөгөөд дараа нь залгаасыг дуудах боломжийг олгодог kubectl дэд командыг оруулна.

Жишээлбэл, hello залгаасыг нэртэй файл хэлбэрээр түгээх болно kubectl-hello.

Залгаасыг суулгахын тулд та файлыг хуулах хэрэгтэй kubectl-x PATH хувьсагчийн дурын лавлах руу шилжүүлж, гүйцэтгэх боломжтой болгох, жишээ нь chmod +x. Үүний дараа та залгаасыг ашиглан залгаж болно kubectl x.

Та өөрийн систем дээр суулгасан бүх залгаасуудыг жагсаахын тулд дараах тушаалыг ашиглаж болно.

$ kubectl plugin list

Энэ тушаал нь танд ижил нэртэй хэд хэдэн залгаас байгаа эсвэл гүйцэтгэх боломжгүй залгаас файл байгаа бол анхааруулгыг харуулдаг.

Krew ашиглан залгаасуудыг хайж олох, суулгах

Kubectl залгаасууд нь програм хангамжийн багцтай адил хуваалцах, дахин ашиглахад хялбар байдаг. Гэхдээ бусад хүмүүсийн хуваалцсан залгаасуудыг хаанаас олох вэ?

Төсөл Krew kubectl залгаасуудыг хуваалцах, олох, суулгах, удирдах нэгдсэн шийдлээр хангах зорилготой. Төсөл нь өөрийгөө "Kubectl залгаасуудын багц менежер" гэж нэрлэдэг (Krew-тэй төстэй Brew).

Krew бол таны сонгож суулгаж болох kubectl залгаасуудын жагсаалт юм. Krew бол kubectl залгаас юм.

Энэ нь Krew-г суулгах нь үндсэндээ бусад kubectl залгаасуудыг суулгахтай адил ажилладаг гэсэн үг юм. Та нарийвчилсан зааврыг эндээс авах боломжтой GitHub хуудас.

Krew-ийн хамгийн чухал багууд:

# Поиск в списке плагинов
$ kubectl krew search [<query>]
# Посмотреть информацию о плагине
$ kubectl krew info <plugin>
# Установить плагин
$ kubectl krew install <plugin>
# Обновить все плагины до последней версии
$ kubectl krew upgrade
# Посмотреть все плагины, установленные через Krew
$ kubectl krew list
# Деинсталлировать плагин
$ kubectl krew remove <plugin>

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

тушаал гэдгийг анхаарна уу kubectl krew list команд нь зөвхөн Krew ашиглан суулгасан залгаасуудыг харуулдаг kubectl plugin list Krew ашиглан суулгасан болон бусад аргаар суулгасан бүх залгаасуудыг жагсаав.

Бусад газраас залгаас хайх

Крю бол одоо хэрэгжиж байгаа залуу төсөл юм жагсаалт Нийтдээ 30 орчим залгаас байдаг. Хэрэв та хэрэгтэй зүйлээ олж чадахгүй бол GitHub гэх мэт өөр газраас нэмэлт өргөтгөлүүдийг олох боломжтой.

Би GitHub хэсгийг шалгахыг зөвлөж байна. kubectl залгаасуудТэнд та шалгаж үзэх боломжтой олон арван залгаасуудыг олох болно.

Өөрийнхөө залгаасуудыг бичих

чи өөрөө чадна залгаас үүсгэх - хэцүү биш. Та хэрэгтэй зүйлээ гүйцэтгэх боломжтой файл үүсгэх хэрэгтэй, үүнийг нэрлээрэй kubectl-x дээр дурдсанчлан суулгана уу.

Файл нь bash скрипт, python скрипт эсвэл эмхэтгэсэн go програм байж болно-энэ нь хамаагүй. Цорын ганц шаардлага бол үйлдлийн системээр шууд гүйцэтгэх боломжтой.

Яг одоо жишээ залгаасыг үүсгэцгээе. Өмнөх хэсэгт та kubectl командыг ашиглан под тус бүрийн савыг жагсаасан. Та энэ тушаалыг хялбархан залгаж болох, жишээ нь залгах боломжтой kubectl img.

Файл үүсгэх kubectl-img дараах агуулга:

#!/bin/bash
kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'

Одоо файлыг ашиглан ажиллах боломжтой болго chmod +x kubectl-img PATH доторх дурын лавлах руу зөөнө үү. Үүний дараа та залгаасыг шууд ашиглаж болно. kubectl img.

Дээр дурдсанчлан kubectl залгаасуудыг ямар ч програмчлалын эсвэл скрипт хэл дээр бичиж болно. Хэрэв та бүрхүүлийн скрипт ашиглаж байгаа бол давуу тал нь залгаас дотроос kubectl-г хялбархан дуудах чадвар юм. Гэсэн хэдий ч та илүү төвөгтэй залгаасуудыг ашиглан бодит програмчлалын хэл дээр бичиж болно Kubernetes үйлчлүүлэгчийн номын санХэрэв та Go ашигладаг бол бас ашиглаж болно cli-runtime номын сан, энэ нь kubectl залгаасуудыг бичихэд зориулагдсан.

Өөрийн залгаасуудыг хэрхэн хуваалцах вэ

Хэрэв та өөрийн залгаасуудыг бусдад хэрэгтэй гэж бодож байвал GitHub дээр чөлөөтэй хуваалцаарай. Тэдгээрийг сэдэвт нэмэхээ мартуузай. kubectl залгаасууд.

Та мөн залгаасаа нэмэх хүсэлт гаргаж болно Крюгийн жагсаалтҮүнийг хэрхэн хийх зааврыг дотор нь оруулсан болно GitHub репозиторууд.

Тушаал дуусгах

Одоогоор залгаасууд автоматаар гүйцээхийг дэмждэггүй. Энэ нь та залгаасын бүтэн нэр болон аргументын бүрэн нэрийг оруулах ёстой гэсэн үг юм.

GitHub репозиторт энэ функцэд зориулсан kubectl агуулах байдаг нээлттэй хүсэлт. Тиймээс энэ функцийг ирээдүйд хэзээ нэгэн цагт хэрэгжүүлэх боломжтой юм.

Амжилт хүсье!!!

Энэ сэдвээр өөр юу унших вэ:

  1. Кубернетес дэх автомат масштабын гурван түвшин ба тэдгээрийг хэрхэн үр дүнтэй ашиглах талаар.
  2. Хэрэгжүүлэх загвар бүхий далайн дээрэмчлэлийн сүнстэй Кубернетес.
  3. Telegram дахь Kubernetes-ийн эргэн тойронд манай суваг.

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

DDoS хамгаалалт, VPS VDS сервер бүхий сайтуудад найдвартай хостинг худалдаж аваарай 🔥 DDoS хамгаалалттай, VPS VDS сервертэй найдвартай вэбсайт хостинг худалдаж аваарай | ProHoster