Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
Agar siz Kubernetes bilan ishlasangiz, kubectl siz eng ko'p foydalanadigan yordamchi dasturlardan biri bo'lishi mumkin. Muayyan asbob bilan ishlashga ko‘p vaqt sarflaganingizda esa uni yaxshilab o‘rganish va undan samarali foydalanishni o‘rganish foydali bo‘ladi.

komanda Mail.ru dan Kubernetes aaS Daniel Weibelning maqolasini tarjima qilgan, unda kubectl bilan samarali ishlash bo'yicha maslahatlar va tavsiyalarni topasiz. Shuningdek, bu sizga Kubernetes haqida chuqurroq tushunchaga ega bo'lishingizga yordam beradi.

Muallifning so'zlariga ko'ra, maqolaning maqsadi Kubernetes bilan kundalik ishingizni nafaqat samaraliroq, balki yanada yoqimli qilishdir!

Kirish: kubectl nima

Kubectl-dan samaraliroq foydalanishni o'rganishdan oldin, uning nima ekanligini va qanday ishlashi haqida asosiy tushunchaga ega bo'lishingiz kerak.

Foydalanuvchi nuqtai nazaridan kubectl - bu Kubernetes operatsiyalarini bajarishga imkon beruvchi boshqaruv paneli.

Texnik jihatdan kubectl bu Kubernetes API mijozidir.

Kubernetes API HTTP REST API hisoblanadi. Ushbu API haqiqiy Kubernetes foydalanuvchi interfeysi bo'lib, u orqali u butunlay boshqariladi. Bu shuni anglatadiki, har bir Kubernetes operatsiyasi API so'nggi nuqtasi sifatida namoyon bo'ladi va ushbu so'nggi nuqtaga HTTP so'rovi bilan amalga oshirilishi mumkin.

Shuning uchun kubectl-ning asosiy vazifasi Kubernetes API-ga HTTP so'rovlarini yuborishdir:

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
Kubernetes butunlay resurslarga yo'naltirilgan tizimdir. Bu shuni anglatadiki, u resurslarning ichki holatini saqlaydi va barcha Kubernetes operatsiyalari CRUD operatsiyalari hisoblanadi.

Ushbu resurslarni boshqarish orqali siz Kubernetesni toʻliq nazorat qilasiz va Kubernetes resurslarning joriy holatidan kelib chiqib nima qilish kerakligini aniqlaydi. Shu sababli, Kubernetes API ma'lumotnomasi ular bilan bog'liq operatsiyalari bilan resurs turlari ro'yxati sifatida tashkil etilgan.

Keling, bir misolni ko'rib chiqaylik.

Aytaylik, siz ReplicaSet resursini yaratmoqchisiz. Buni amalga oshirish uchun siz fayldagi ReplicaSet-ni nomi bilan tavsiflaysiz replicaset.yaml, keyin buyruqni bajaring:

$ kubectl create -f replicaset.yaml

Bu ReplicaSet resursini yaratadi. Ammo sahna ortida nima sodir bo'ladi?

Kubernetesda ReplicaSet yaratish operatsiyasi mavjud. Boshqa har qanday operatsiya singari, u API so'nggi nuqtasi sifatida namoyon bo'ladi. Ushbu operatsiya uchun maxsus API so'nggi nuqtasi quyidagicha ko'rinadi:

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

Barcha Kubernetes operatsiyalari uchun API so'nggi nuqtalarini quyidagi manzilda topishingiz mumkin API havolasi (shu jumladan yuqoridagi oxirgi nuqta). Oxirgi nuqtaga haqiqiy so‘rov yuborish uchun avval API serveri URL manzilini API havolasida keltirilgan so‘nggi nuqta yo‘llariga qo‘shishingiz kerak.

Shunday qilib, yuqoridagi buyruqni bajarganingizda, kubectl yuqoridagi API so'nggi nuqtasiga HTTP POST so'rovini yuboradi. Faylda taqdim etgan ReplicaSet ta'rifi replicaset.yaml, so'rov matnida yuboriladi.

Kubernetes klasteri bilan o'zaro aloqada bo'lgan barcha buyruqlar uchun kubectl shunday ishlaydi. Ushbu holatlarning barchasida kubectl shunchaki tegishli Kubernetes API so'nggi nuqtalariga HTTP so'rovlarini yuboradi.

kabi yordamchi dastur yordamida Kubernetes-ni to'liq boshqarishingiz mumkinligini unutmang curlHTTP so'rovlarini Kubernetes API ga qo'lda yuborish orqali. Kubectl shunchaki Kubernetes API-dan foydalanishni osonlashtiradi.

Bu kubectl nima ekanligini va u qanday ishlashining asoslari. Ammo Kubernetes API haqida har bir kubectl foydalanuvchisi bilishi kerak bo'lgan yana bir narsa bor. Keling, Kubernetesning ichki dunyosiga tez nazar tashlaylik.

Kubernetesning ichki dunyosi

Kubernetes klaster tugunlarida alohida jarayonlar sifatida ishlaydigan mustaqil komponentlar to'plamidan iborat. Ba'zi komponentlar asosiy tugunlarda, boshqalari ishchi tugunlarda ishlaydi, har bir komponent o'ziga xos vazifani bajaradi.

Bu erda asosiy tugunlardagi eng muhim komponentlar:

  1. Vault - manba ta'riflarini saqlaydi (odatda bu va hokazo).
  2. API serveri — API taqdim etadi va saqlashni boshqaradi.
  3. Nazoratchi menejeri — Resurs holatining texnik shartlarga muvofiqligini taʼminlaydi.
  4. Rejalashtiruvchi — ishchi tugunlarida podkastlarni rejalashtiradi.

Va bu erda ishchi tugunlaridagi eng muhim komponentlardan biri:

  1. kubelet — ishchi tugundagi konteynerlarni ishga tushirishni boshqaradi.

Ushbu komponentlar qanday ishlashini tushunish uchun keling, misolni ko'rib chiqaylik.

Aytaylik, siz hozirgina yakunladingiz kubectl create -f replicaset.yaml, shundan so'ng kubectl HTTP POST so'rovini yubordi ReplicaSet API oxirgi nuqtasi (ReplicaSet resurs ta'rifidan o'tish).

Klasterda nima bo'lyapti?

  1. Amalga oshirilgandan keyin kubectl create -f replicaset.yaml API serveri sizning ReplicaSet resurs ta'rifini saqlashda saqlaydi:

    Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma

  2. Keyinchalik, ReplicaSet boshqaruvchisi ReplicaSet resurslarini yaratish, o'zgartirish va o'chirish bilan shug'ullanadigan kontroller menejerida ishga tushiriladi:

    Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma

  3. ReplicaSet kontrolleri har bir ReplicaSet replikasi uchun pod ta'rifini yaratadi (ReplicaSet ta'rifidagi pod shabloniga ko'ra) va ularni saqlashda saqlaydi:

    Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma

  4. Rejalashtiruvchi ishga tushirildi, u hali ishchi tugunlariga tayinlanmagan podslarni kuzatadi:

    Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma

  5. Rejalashtiruvchi har bir podkast uchun mos ishchi tugunni tanlaydi va ushbu ma'lumotni do'kondagi pod ta'rifiga qo'shadi:

    Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma

  6. Qopqoq tayinlangan ishchi tugunda Kubelet ishga tushiriladi, u ushbu tugunga tayinlangan podlarni kuzatib boradi:

    Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma

  7. Kubelet pod ta'rifini saqlashdan o'qiydi va konteyner ish vaqti, masalan, Docker, tugundagi konteynerlarni ishga tushirishni buyuradi:

    Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma

Quyida ushbu tavsifning matnli versiyasi keltirilgan.

ReplicaSet yaratish so'nggi nuqtasiga API so'rovi API serveri tomonidan qayta ishlanadi. API server so'rovni autentifikatsiya qiladi va ReplicaSet resurs ta'rifini saqlashda saqlaydi.

Ushbu hodisa boshqaruvchi menejerining quyi jarayoni bo'lgan ReplicaSet kontrollerini ishga tushiradi. ReplicaSet boshqaruvchisi do'konda ReplicaSet resurslarini yaratish, yangilash va o'chirishni nazorat qiladi va bu sodir bo'lganda voqea bildirishnomasini oladi.

ReplicaSet boshqaruvchisining vazifasi kerakli miqdordagi ReplicaSet podlari mavjudligini ta'minlashdan iborat. Bizning misolimizda hali podkastlar mavjud emas, shuning uchun ReplicaSet boshqaruvchisi bu pod ta'riflarini yaratadi (ReplicaSet ta'rifidagi pod shabloniga muvofiq) va ularni saqlashda saqlaydi.

Yangi podslarni yaratish ishchi tugunlar uchun hali rejalashtirilmagan pod ta'riflarini kuzatib boruvchi rejalashtiruvchi tomonidan ishga tushiriladi. Rejalashtiruvchi har bir podkast uchun mos ishchi tugunni tanlaydi va ombordagi pod ta'riflarini yangilaydi.

E'tibor bering, shu paytgacha klasterda hech qanday ish yuki kodi ishlamagan. Hozirgacha qilingan hamma narsa - bu asosiy tugundagi ombordagi resurslarni yaratish va yangilash.

Oxirgi voqea Kubeletsni ishga tushiradi, ular ishchi tugunlari uchun rejalashtirilgan podslarni kuzatadilar. ReplicaSet podkastlaringiz o'rnatilgan ishchi tugunning Kubeleti Docker kabi konteynerning ishlash vaqtiga kerakli konteyner tasvirlarini yuklab olish va ularni ishga tushirishni ko'rsatishi kerak.

Ayni paytda ReplicaSet ilovangiz nihoyat ishlamoqda!

Kubernetes API ning roli

Oldingi misolda ko'rganingizdek, Kubernetes komponentlari (API serveri va xotiradan tashqari) saqlashdagi resurslardagi o'zgarishlarni kuzatib boradi va saqlashdagi resurslar haqidagi ma'lumotlarni o'zgartiradi.

Albatta, bu komponentlar to'g'ridan-to'g'ri saqlash bilan o'zaro ta'sir qilmaydi, faqat Kubernetes API orqali.

Quyidagi misollarni ko'rib chiqing:

  1. ReplicaSet boshqaruvchisi API oxirgi nuqtasidan foydalanadi ReplicaSets ro'yxati parametr bilan watch ReplicaSet resurslaridagi o'zgarishlarni kuzatish.
  2. ReplicaSet boshqaruvchisi API oxirgi nuqtasidan foydalanadi pod yaratish (pod yaratish) podalar yaratish.
  3. Rejalashtiruvchi API oxirgi nuqtasidan foydalanadi patch pod (podni tahrirlash) tanlangan ishchi tugun haqidagi ma'lumotlar bilan podkalarni yangilash.

Ko'rib turganingizdek, bu kubectl kiradigan bir xil API. Ichki komponentlar va tashqi foydalanuvchilar uchun bir xil APIdan foydalanish Kubernetes dizaynidagi asosiy tushunchadir.

Endi biz Kubernetes qanday ishlashini umumlashtirishimiz mumkin:

  1. Saqlash do'konlari holati, ya'ni Kubernetes resurslari.
  2. API serveri Kubernetes API ko'rinishidagi xotiraga interfeysni taqdim etadi.
  3. Boshqa barcha Kubernetes komponentlari va foydalanuvchilari API orqali Kubernetes holatini (resurslarini) o‘qiydi, kuzatadi va boshqaradi.

Ushbu tushunchalarni bilish kubectlni yaxshiroq tushunishga va undan maksimal darajada foydalanishga yordam beradi.

Endi kubectl yordamida unumdorligingizni oshirishga yordam beradigan ba'zi aniq maslahatlar va fokuslarni ko'rib chiqaylik.

1. Buyruqni bajarish orqali kiritishni tezlashtiring

Kubectl bilan ishlashni yaxshilashning eng foydali, ammo ko'pincha e'tibordan chetda qoladigan usullaridan biri bu buyruqni bajarishdir.

Buyruqning bajarilishi Tab tugmasi yordamida kubectl buyruqlarining qismlarini avtomatik ravishda bajarish imkonini beradi. Bu quyi buyruqlar, variantlar va argumentlar, jumladan, manba nomlari kabi murakkab narsalar uchun ishlaydi.

kubectl buyrug'ini bajarish qanday ishlashini ko'ring:

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
Buyruqni bajarish Bash va Zsh qobiqlari uchun ishlaydi.

Rasmiy qo'llanma avtoto'ldirishni o'rnatish bo'yicha batafsil ko'rsatmalarni o'z ichiga oladi, ammo quyida biz qisqacha parcha keltiramiz.

Buyruqni bajarish qanday ishlaydi

Buyruqni bajarish - bu tugatish skripti yordamida ishlaydigan qobiq xususiyati. Kengaytma skripti ma'lum bir buyruq uchun kengaytmaning harakatini belgilaydigan qobiq skriptidir.

Kubectl quyidagi buyruqlar yordamida Bash va Zsh uchun kengaytma skriptlarini avtomatik ravishda yaratadi va chiqaradi:

$ kubectl completion bash

Yoki:

$ kubectl completion zsh

Nazariy jihatdan, kubectl buyruqlarni to'ldirishi uchun ushbu buyruqlarning chiqishini tegishli buyruq qobig'iga ulash kifoya.

Amalda, ulanish usuli Bash (shu jumladan Linux va MacOS o'rtasidagi farqlar) va Zsh uchun farq qiladi. Quyida biz ushbu variantlarning barchasini ko'rib chiqamiz.

Linuxda Bash

Bash tugatish skripti bash-to'ldirish paketiga bog'liq, shuning uchun avval uni o'rnatishingiz kerak:

$ sudo apt-get install bash-completion

Yoki:

$ yum install bash-completion

Paket muvaffaqiyatli o'rnatilganligini quyidagi buyruq yordamida tekshirishingiz mumkin:

$ type _init_completion

Agar bu qobiq funktsiyasi kodini chiqarsa, bash-to'ldirish to'g'ri o'rnatilgan. Agar buyruq "topilmadi" xatosini bersa, faylingizga quyidagi qatorni qo'shishingiz kerak ~ / .bashrc:

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

Ushbu qatorni faylga qo'shish kerakmi ~ / .bashrc yoki yo'q, bash-to'ldirishni o'rnatish uchun foydalangan paket menejeriga bog'liq. Bu APT uchun zarur, lekin YUM uchun emas.

Bash-completion-ni o'rnatganingizdan so'ng, kubectl tugatish skripti barcha qobiq seanslarida yoqilgan bo'lishi uchun hamma narsani sozlashingiz kerak.

Buning usullaridan biri faylga quyidagi qatorni qo'shishdir ~ / .bashrc:

source <(kubectl completion bash)

Yana bir usul kubectl kengaytmasi skriptini katalogga qo'shishdir /etc/bash_completion.d (agar u mavjud bo'lmasa, uni yarating):

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

Katalogdagi barcha qo'shimcha skriptlar /etc/bash_completion.d avtomatik ravishda bash-to'ldirishga qo'shiladi.

Ikkala variant ham bir xil darajada qo'llaniladi.

Qobiqni qayta ishga tushirgandan so'ng, kubectl buyrug'ini bajarish ishlaydi.

MacOS-da Bash

MacOS-da sozlash biroz murakkabroq. Gap shundaki, sukut bo'yicha MacOS Bash 3.2 versiyasidan foydalanadi va kubectl avtoto'ldirish skripti kamida 4.1 Bash versiyasini talab qiladi va Bash 3.2 da ishlamaydi.

MacOS’da Bash’ning eskirgan versiyasidan foydalanish bilan bog‘liq litsenziyalash muammolari mavjud. Bash versiyasi 4 GPLv3 ostida litsenziyalangan, bu Apple tomonidan qo'llab-quvvatlanmaydi.

MacOS’da kubectl avtoto‘ldirishni sozlash uchun siz Bash’ning so‘nggi versiyasini o‘rnatishingiz kerak. Bundan tashqari, yangilangan Bash-ni standart qobiq sifatida o'rnatishingiz mumkin, bu kelajakda sizni ko'p muammolardan xalos qiladi. Bu qiyin emas, tafsilotlar maqolada keltirilgan "MacOS-da Bash yangilanmoqda".

Davom etishdan oldin, Bash-ning so'nggi versiyasidan foydalanayotganingizga ishonch hosil qiling (chiqishni tekshiring bash --version).

Bash tugatish skripti loyihaga qarab farq qiladi bash-to'ldirish, shuning uchun avval uni o'rnatishingiz kerak.

yordamida bash-to'ldirishni o'rnatishingiz mumkin Homebrew:

$ brew install bash-completion@2

u @2 bash-toʻldirish 2-versiyasini bildiradi. kubectl avtotoʻldirish uchun bash-toʻldirish v2, bash-toʻldirish v2 esa kamida Bash 4.1 versiyasini talab qiladi.

Buyruqning chiqishi brew-install Ogohlantirishlar bo'limi mavjud bo'lib, u faylga nima qo'shilishi kerakligini belgilaydi ~/.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"

Biroq, men ushbu qatorlarni qo'shmaslikni tavsiya qilaman ~/.bash_profilevaqt ichida ~/.bashrc. Bunday holda, avtoto'ldirish nafaqat asosiy, balki bolalar buyruqlar qobig'ida ham mavjud bo'ladi.

Buyruqlar qobig'ini qayta ishga tushirgandan so'ng, quyidagi buyruq yordamida o'rnatishning to'g'riligini tekshirishingiz mumkin:

$ type _init_completion

Agar siz chiqishda qobiq funksiyasini ko'rsangiz, unda hamma narsa to'g'ri tuzilgan.

Endi biz kubectl avtoto'ldirish barcha seanslarda yoqilganligiga ishonch hosil qilishimiz kerak.

Buning usullaridan biri quyidagi qatorni o'zingizga qo'shishdir ~/.bashrc:

source <(kubectl completion bash)

Ikkinchi usul - papkaga avtomatik to'ldirish skriptini qo'shish /usr/local/etc/bash_completion.d:

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

Bu usul faqat Homebrew yordamida bash-to'ldirishni o'rnatgan bo'lsangiz ishlaydi. Bunday holda, bash-to'ldirish ushbu katalogdagi barcha skriptlarni yuklaydi.

Agar siz o'rnatgan bo'lsangiz kubectl Homebrew yordamida, keyin oldingi bosqichni bajarishning hojati yo'q, chunki avtomatik to'ldirish skripti avtomatik ravishda papkaga joylashtiriladi. /usr/local/etc/bash_completion.d o'rnatish vaqtida. Bunday holda, kubectl avtomatik yakunlash bash-to'ldirishni o'rnatishingiz bilanoq ishlay boshlaydi.

Natijada, bu variantlarning barchasi tengdir.

zsh

Zsh uchun avtoto'ldirish skriptlari hech qanday bog'liqlikni talab qilmaydi. Siz qilishingiz kerak bo'lgan yagona narsa buyruqlar qobig'ini yuklaganingizda ularni yoqishdir.

Buni o'zingizning qatoringizga qator qo'shish orqali qilishingiz mumkin ~/.zshrc fayl:

source <(kubectl completion zsh)

Agar xato olsangiz not found: compdef qobiqni qayta ishga tushirgandan so'ng, siz o'rnatilgan funksiyani yoqishingiz kerak compdef. Siz uni faylingizning boshiga qo'shish orqali yoqishingiz mumkin ~/.zshrc Quyidagilar:

autoload -Uz compinit
compinit

2. Resurs xususiyatlarini tezda ko'rib chiqing

YAML resurs ta'riflarini yaratganingizda, ushbu manbalar uchun maydonlar va ularning ma'nosini bilishingiz kerak. Ushbu ma'lumotni qidirish uchun bitta joy barcha resurslar uchun to'liq texnik xususiyatlarni o'z ichiga olgan API ma'lumotnomasida.

Biroq, har safar biror narsani qidirish kerak bo'lganda veb-brauzerga o'tish noqulay. Shuning uchun kubectl buyruq beradi kubectl explain, bu sizning terminalingizdagi barcha resurslarning texnik xususiyatlarini ko'rsatadi.

Buyruqning formati quyidagicha:

$ kubectl explain resource[.field]...

Buyruq so'ralgan manba yoki maydonning spetsifikatsiyasini chiqaradi. Ko'rsatilgan ma'lumotlar API qo'llanmasida mavjud bo'lgan ma'lumotlar bilan bir xil.

sukut kubectl explain dalalarni joylashtirishning faqat birinchi darajasini ko'rsatadi.

Bu qanday ko'rinishini ko'ring Keyin mumkin.

Variantni qo'shsangiz, butun daraxtni ko'rsatishingiz mumkin --recursive:

$ kubectl explain deployment.spec --recursive

Qaysi manbalar kerakligini aniq bilmasangiz, ularning barchasini quyidagi buyruq bilan ko'rsatishingiz mumkin:

$ kubectl api-resources

Ushbu buyruq manba nomlarini ko'plik shaklida ko'rsatadi, masalan. deployments o'rniga deployment. Masalan, u qisqa nomni ham ko'rsatadi deploy, unga ega bo'lgan resurslar uchun. Bu farqlar haqida tashvishlanmang. Ushbu nomlash variantlarining barchasi kubectl uchun ekvivalentdir. Ya'ni, siz ulardan har qandayidan foydalanishingiz mumkin kubectl explain.

Quyidagi barcha buyruqlar ekvivalentdir:

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

3. Maxsus ustun chiqish formatidan foydalaning

Standart buyruq chiqish formati 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

Ushbu format qulay, ammo u cheklangan miqdordagi ma'lumotlarni o'z ichiga oladi. To'liq manba ta'rifi formati bilan solishtirganda, bu erda faqat bir nechta maydonlar ko'rsatiladi.

Bunday holda siz maxsus ustun chiqish formatidan foydalanishingiz mumkin. Bu qanday ma'lumotlarni chiqarish kerakligini aniqlash imkonini beradi. Har qanday resurs maydonini alohida ustun sifatida ko'rsatishingiz mumkin.

Maxsus formatdan foydalanish quyidagi variantlar yordamida aniqlanadi:

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

Har bir chiqish ustunini juftlik sifatida belgilashingiz mumkin <header>:<jsonpath>qayerda <header> ustun nomi, va <jsonpath> — resurs maydonini belgilovchi ifoda.

Keling, oddiy misolni ko'rib chiqaylik:

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

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

Chiqishda podalar nomlari yozilgan bitta ustun mavjud.

Variant ifodasi maydondan pod nomlarini tanlaydi metadata.name. Buning sababi, podkastning nomi bola nomi maydonida aniqlangan metadata podning resurs tavsifida. Batafsil ma'lumotni sahifada topishingiz mumkin API qo'llanma yoki buyruqni kiriting kubectl explain pod.metadata.name.

Aytaylik, siz chiqishga qo'shimcha ustun qo'shmoqchisiz, masalan, har bir pod ishlayotgan tugunni ko'rsatish. Buni amalga oshirish uchun siz oddiy ustunlar parametriga tegishli ustun spetsifikatsiyasini qo'shishingiz mumkin:

$ 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

Ifoda tugun nomini tanlaydi spec.nodeName — tugunga pod tayinlanganda maydonga uning nomi yoziladi spec.nodeName pod resurs spetsifikatsiyasi. Batafsil ma'lumotni chiqishda topish mumkin kubectl explain pod.spec.nodeName.

Kubernetes resurs maydonlari katta-kichik harflarga sezgir ekanligini unutmang.

Har qanday manba maydonini ustun sifatida ko'rishingiz mumkin. Shunchaki resurs spetsifikatsiyasini ko'rib chiqing va uni o'zingiz yoqtirgan maydonlar bilan sinab ko'ring.

Biroq, avvalo, maydon tanlash ifodalarini batafsil ko'rib chiqaylik.

JSONPath ifodalari

Resurs maydonlarini tanlash uchun ifodalar asoslanadi JSONPath.

JSONPath - bu JSON hujjatlaridan ma'lumotlarni olish uchun til. Bitta maydonni tanlash JSONPath uchun eng oddiy foydalanish holatidir. Unda ko'p narsa bor ko'proq imkoniyatlar, shu jumladan selektorlar, filtrlar va boshqalar.

Kubectl tushuntirish cheklangan miqdordagi JSONPath xususiyatlarini qo'llab-quvvatlaydi. Ulardan foydalanish imkoniyatlari va misollari quyida tasvirlangan:

# Выбрать все элементы списка
$ 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'

[] operatori ayniqsa muhimdir. Ko'pgina Kubernetes resurs maydonlari ro'yxatlardir va bu operator sizga ushbu ro'yxatlar a'zolarini tanlash imkonini beradi. Ko'pincha ro'yxatning barcha elementlarini tanlash uchun [*] kabi joker belgi bilan ishlatiladi.

Qo'llash misollari

Maxsus ustun chiqish formatidan foydalanish imkoniyatlari cheksizdir, chunki chiqishda istalgan maydon yoki manba maydonlarining kombinatsiyasini ko'rsatishingiz mumkin. Mana bir nechta namunali ilovalar, lekin ularni o'zingiz o'rganing va sizga mos keladigan ilovalarni toping.

  1. Podlar uchun konteyner tasvirlari ko'rsatilmoqda:
    $ 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

    Bu buyruq har bir pod uchun konteyner tasvir nomlarini ko'rsatadi.

    Esda tutingki, podkastda bir nechta konteynerlar bo'lishi mumkin, keyin rasm nomlari vergul bilan ajratilgan bitta satrda ko'rsatiladi.

  2. Tugun mavjudligi zonalari ko'rsatilmoqda:
    $ 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

    Agar sizning klasteringiz umumiy bulutda joylashgan bo'lsa, bu buyruq foydalidir. U har bir tugun uchun mavjudlik zonasini ko'rsatadi.

    Mavjudlik zonasi - bu replikatsiya zonasini geografik mintaqa bilan cheklaydigan bulut tushunchasi.

    Har bir tugun uchun mavjudlik zonalari maxsus yorliq orqali olinadi - failure-domain.beta.kubernetes.io/zone. Agar klaster umumiy bulutda ishlayotgan bo'lsa, bu yorliq avtomatik ravishda yaratiladi va har bir tugun uchun mavjudlik zonalari nomlari bilan to'ldiriladi.

    Yorliqlar Kubernetes resurs spetsifikatsiyasining bir qismi emas, shuning uchun ular haqida maʼlumot topa olmaysiz API qo'llanma. Biroq, agar siz YAML yoki JSON formatidagi tugunlar haqida ma'lumot so'rasangiz, ularni (boshqa teglar kabi) ko'rish mumkin:

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

    Bu resurs xususiyatlarini o'rganishdan tashqari, resurslar haqida ko'proq ma'lumot olishning ajoyib usuli.

4. Klasterlar va nomlar bo'shliqlari o'rtasida osongina almashing

kubectl Kubernetes API ga so'rov yuborganda, u ulanish uchun barcha kerakli parametrlarni olish uchun avval kubeconfig faylini o'qiydi.

Odatiy bo'lib kubeconfig fayli ~/.kube/config. Odatda bu fayl maxsus buyruq bilan yaratiladi yoki yangilanadi.

Bir nechta klasterlar bilan ishlaganingizda kubeconfig faylingizda ushbu klasterlarning barchasiga ulanish sozlamalari mavjud. Sizga kubectl buyrug'iga qaysi klaster bilan ishlayotganingizni aytish uchun usul kerak.

Klaster ichida siz bir nechta nom maydonlarini yaratishingiz mumkin - jismoniy klaster ichida virtual klaster turi. Kubectl shuningdek kubeconfig fayli asosida qaysi nom maydonidan foydalanishni aniqlaydi. Bu sizga kubectl buyrug'iga qanday nomlar maydoni bilan ishlash kerakligini aytishning bir usuli kerakligini anglatadi.

Ushbu bobda biz uning qanday ishlashini va qanday qilib samarali ishlashini tushuntiramiz.

E'tibor bering, sizda KUBECONFIG muhit o'zgaruvchisi ro'yxatida bir nechta kubeconfig fayllari bo'lishi mumkin. Bunday holda, ushbu fayllarning barchasi ish vaqtida bitta umumiy konfiguratsiyaga birlashtiriladi. Shuningdek, kubectl ni parametr bilan ishga tushirish orqali standart kubeconfig faylini o'zgartirishingiz mumkin --kubeconfig. Qarang rasmiy hujjatlar.

kubeconfig fayllari

Keling, kubeconfig faylida nima borligini ko'rib chiqaylik:

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
Ko'rib turganingizdek, kubeconfig faylida kontekstlar to'plami mavjud. Kontekst uchta elementdan iborat:

  • Klaster - klaster serverining API URL manzili.
  • Klasterdagi foydalanuvchi - foydalanuvchi autentifikatsiya ma'lumotlari.
  • Nomlar maydoni - klasterga qo'shilishda foydalaniladigan nomlar maydoni.

Amalda, ular kubeconfig-da ko'pincha klaster uchun bitta kontekstdan foydalanadilar. Biroq, har bir klaster uchun foydalanuvchi yoki nom maydoni bilan farqlangan bir nechta kontekstga ega bo'lishingiz mumkin. Biroq, bu ko'p kontekstli konfiguratsiya kamdan-kam uchraydi, shuning uchun odatda klasterlar va kontekstlar o'rtasida birma-bir xaritalash mavjud.

Har qanday vaqtda kontekstlardan biri joriy:

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
kubectl konfiguratsiya faylini o'qiganda, u har doim joriy kontekstdan ma'lumot oladi. Yuqoridagi misolda kubectl Xare klasteriga ulanadi.

Shunga ko'ra, boshqa klasterga o'tish uchun kubeconfig faylidagi joriy kontekstni o'zgartirishingiz kerak:

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
Endi kubectl Fox klasteriga ulanadi.

Xuddi shu klasterdagi boshqa nom maydoniga o'tish uchun joriy kontekst uchun nom maydoni elementining qiymatini o'zgartirishingiz kerak:

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
Yuqoridagi misolda kubectl Fox klasterining Prod nom maydonidan foydalanadi (ilgari Test nom maydoni o'rnatilgan edi).

E'tibor bering, kubectl ham variantlarni taqdim etadi --cluster, --user, --namespace и --context, bu kubeconfig-da nima o'rnatilganidan qat'i nazar, alohida elementlarni va joriy kontekstning o'zini qayta yozishga imkon beradi. Qarang kubectl options.

Nazariy jihatdan kubeconfig-dagi sozlamalarni qo'lda o'zgartirishingiz mumkin. Lekin bu noqulay. Ushbu operatsiyalarni soddalashtirish uchun parametrlarni avtomatik ravishda o'zgartirishga imkon beruvchi turli xil yordamchi dasturlar mavjud.

kubectx dan foydalaning

Klasterlar va nomlar bo'shliqlari o'rtasida almashish uchun juda mashhur yordamchi dastur.

Yordamchi dastur buyruqlar beradi kubectx и kubens mos ravishda joriy kontekst va nom maydonini o'zgartirish uchun.

Yuqorida aytib o'tilganidek, joriy kontekstni o'zgartirish har bir klasterda faqat bitta kontekstga ega bo'lsangiz, klasterni o'zgartirishni anglatadi.

Bu buyruqlarni bajarishga misol:

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
Aslida, bu buyruqlar kubeconfig faylini yuqorida aytib o'tilganidek tahrir qiladi.

o'rnatish kubectx, ustidagi ko'rsatmalarga amal qiling Github.

Ikkala buyruq ham kontekst va nom maydoni nomlarini avtomatik to'ldirishni qo'llab-quvvatlaydi, bu ularni to'liq terish zaruratini yo'q qiladi. Avtomatik to'ldirishni sozlash bo'yicha ko'rsatmalar shu yerda.

Yana bir foydali xususiyat kubectx u interaktiv rejim. U yordamchi dastur bilan birgalikda ishlaydi fzf, bu alohida o'rnatilishi kerak. Fzf-ni avtomatik ravishda o'rnatish interaktiv rejimni mavjud qiladi kubectx. Interaktiv ravishda siz fzf tomonidan taqdim etilgan interaktiv bepul qidiruv interfeysi orqali kontekst va nomlar maydonini tanlashingiz mumkin.

Shell taxalluslaridan foydalanish

Joriy kontekst va nomlar maydonini o'zgartirish uchun sizga alohida vositalar kerak emas, chunki kubectl buning uchun buyruqlar ham beradi. Ha, jamoa kubectl config kubeconfig fayllarini tahrirlash uchun kichik buyruqlar beradi.

Ulardan ba'zilari quyidagilardir:

  • kubectl config get-contexts: barcha kontekstlarni ko'rsatish;
  • kubectl config current-context: joriy kontekstni olish;
  • kubectl config use-context: joriy kontekstni o'zgartirish;
  • kubectl config set-context: Kontekst elementini o'zgartiring.

Biroq, bu buyruqlarni bevosita ishlatish juda qulay emas, chunki ular uzoq. Siz ular uchun bajarilishi oson bo'lgan qobiq taxalluslarini yaratishingiz mumkin.

Men kubectx-ga o'xshash funksionallikni ta'minlaydigan ushbu buyruqlar asosida taxalluslar to'plamini yaratdim. Bu erda siz ularni amalda ko'rishingiz mumkin:

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
E'tibor bering, taxalluslar fzf dan interaktiv bepul qidiruv interfeysini ta'minlash uchun foydalanadi (masalan, kubectx interaktiv rejimi). Bu sizga kerak degan ma'noni anglatadi fzf ni o'rnatingbu taxalluslardan foydalanish uchun.

Mana taxalluslarning ta'riflari:

# Получить текущий контекст
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/^..//")"'

Ushbu taxalluslarni o'rnatish uchun faylingizga yuqoridagi ta'riflarni qo'shishingiz kerak ~/.bashrc yoki ~/.zshrc va qobiqni qayta ishga tushiring.

Plaginlardan foydalanish

Kubectl sizga asosiy buyruqlar bilan bir xil tarzda bajariladigan plaginlarni yuklash imkonini beradi. Siz, masalan, kubectl-foo plaginini o'rnatishingiz va buyruqni bajarish orqali uni ishga tushirishingiz mumkin kubectl foo.

Kontekst va nom maydonini shu tarzda, masalan, ishga tushirish orqali o'zgartirish qulay bo'ladi kubectl ctx kontekstni o'zgartirish va kubectl ns nom maydonini o'zgartirish uchun.

Men buni amalga oshiradigan ikkita plaginni yozdim:

Plaginlarning ishi oldingi bo'limdagi taxalluslarga asoslangan.

Mana ular qanday ishlaydi:

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
E'tibor bering, plaginlar interaktiv bepul qidiruv interfeysini ta'minlash uchun fzf dan foydalanadi (masalan, kubectx interaktiv rejimi). Bu sizga kerak degan ma'noni anglatadi fzf ni o'rnatingbu taxalluslardan foydalanish uchun.

Plaginlarni o'rnatish uchun siz nomli qobiq skriptlarini yuklab olishingiz kerak kubectl-ctx и kubectl-ns PATH o'zgaruvchingizdagi istalgan katalogga kiriting va ularni bajariladigan qilib qo'ying, masalan: chmod +x. Shundan so'ng darhol foydalanishingiz mumkin bo'ladi kubectl ctx и kubectl ns.

5. Avtoaliazlar bilan kiritishni kamaytiring

Shell taxalluslari kiritishni tezlashtirishning yaxshi usuli hisoblanadi. Loyiha kubectl-taxalluslar asosiy kubectl buyruqlari uchun 800 ga yaqin yorliqlarni o'z ichiga oladi.

Sizni qiziqtirgandirsiz - 800 ta taxallusni qanday eslaysiz? Ammo ularning barchasini eslab qolishning hojati yo'q, chunki ular quyida keltirilgan oddiy sxema bo'yicha qurilgan:

Kubectl-dan qanday samarali foydalanish kerak: batafsil qo'llanma
Masalan:

  1. kgpooyaml - kubectl pods oyaml olish
  2. ksysgsvcw — kubectl -n kube-tizimi svc w olish
  3. ksysrmcm -kubectl -n kube-tizimi rm sm
  4. kgdepallls - kubectl barcha sl-ni joylashtirishni oladi

Ko'rib turganingizdek, taxalluslar komponentlardan iborat bo'lib, ularning har biri kubectl buyrug'ining o'ziga xos elementini ifodalaydi. Har bir taxallus asosiy buyruq, operatsiya va manba uchun bitta komponentga va parametrlar uchun bir nechta komponentlarga ega bo'lishi mumkin. Siz shunchaki yuqoridagi diagrammaga muvofiq ushbu komponentlarni chapdan o‘ngga “to‘ldirasiz”.

Joriy batafsil diagramma quyidagi manzilda joylashgan GitHub. U erda siz ham topishingiz mumkin taxalluslarning to'liq ro'yxati.

Masalan, kgpooyamlall taxallusi buyruqqa teng kubectl get pods -o yaml --all-namespaces.

Variantlarning nisbiy tartibi muhim emas: buyruq kgpooyamlall buyruqqa tengdir kgpoalloyaml.

Barcha komponentlarni taxallus sifatida ishlatish shart emas. Masalan k, kg, klo, ksys, kgpo ham foydalanish mumkin. Bundan tashqari, siz buyruq satrida taxalluslar va oddiy buyruqlar yoki variantlarni birlashtira olasiz:

Masalan:

  1. Buning o'rniga kubectl proxy yozishingiz mumkin k proxy.
  2. Buning o'rniga kubectl get roles yozishingiz mumkin kg roles (Hozirda Rollar resursi uchun taxallus mavjud emas).
  3. Muayyan pod uchun ma'lumotlarni olish uchun siz buyruqdan foydalanishingiz mumkin kgpo my-pod — kubectl get pod my-pod.

E'tibor bering, ba'zi taxalluslar buyruq qatori argumentini talab qiladi. Masalan, taxallus kgpol degani kubectl get pods -l. Variant -l argumentni talab qiladi - yorliq spetsifikatsiyasi. Agar siz taxallusdan foydalansangiz, u shunday ko'rinadi kgpol app=ui.

Ba'zi taxalluslar argumentlarni talab qilganligi sababli a, f va l taxalluslari oxirgi qo'llanilishi kerak.

Umuman olganda, ushbu sxemani o'rganganingizdan so'ng, siz bajarmoqchi bo'lgan buyruqlardan intuitiv ravishda taxalluslarni olishingiz va yozish uchun ko'p vaqtni tejashingiz mumkin.

O'rnatish

kubectl-taxalluslarni o'rnatish uchun faylni yuklab olishingiz kerak .kubectl_aliases GitHub dan va uni faylga qo'shing ~/.bashrc yoki ~/.zshrc:

source ~/.kubectl_aliases

Avtomatik toʻldirish

Yuqorida aytib o'tganimizdek, siz ko'pincha buyruq satrida taxallusga qo'shimcha so'zlarni qo'shasiz. Masalan:

$ kgpooyaml test-pod-d4b77b989

Agar siz kubectl buyrug'ini bajarishdan foydalansangiz, resurs nomlari kabi narsalar uchun avtoto'ldirishdan foydalangan bo'lishingiz mumkin. Ammo taxalluslar ishlatilganda buni qilish mumkinmi?

Bu juda muhim savol, chunki agar avtomatik toʻldirish ishlamasa, taxalluslarning baʼzi afzalliklaridan mahrum boʻlasiz.

Javob qaysi qobiqdan foydalanayotganingizga bog'liq:

  1. Zsh uchun taxallusni to'ldirish qutidan tashqarida ishlaydi.
  2. Bash uchun, afsuski, avtoto'ldirishni ishga tushirish uchun ba'zi ishlar talab qilinadi.

Bashdagi taxalluslar uchun avtomatik toʻldirishni yoqish

Bash bilan bog'liq muammo shundaki, u taxallus ko'rsatadigan buyruqni emas (masalan, Zsh kabi) emas, balki taxallusni (Tab tugmasini bosganingizda) bajarishga harakat qiladi. Sizda 800 ta taxallus uchun yakuniy skriptlar yo‘qligi sababli, avtomatik to‘ldirish ishlamaydi.

Loyiha to'liq taxallus bu muammoning umumiy yechimini taqdim etadi. U taxallusni bajarish mexanizmiga ulanadi, taxallusni buyruqqa ichki kengaytiradi va tugallangan buyruq uchun yakunlash variantlarini qaytaradi. Bu shuni anglatadiki, taxallus uchun to'ldirish to'liq buyruq bilan bir xil ishlaydi.

Quyida men birinchi navbatda to'liq taxallusni qanday o'rnatishni va keyin uni barcha kubectl taxalluslari uchun yakunlashni yoqish uchun qanday sozlashni tushuntiraman.

To'liq taxallus o'rnatilmoqda

Avvalo, to'liq taxallus ga bog'liq bash-to'ldirish. Shuning uchun, to'liq taxallusni o'rnatishdan oldin, bash-to'ldirish o'rnatilganligiga ishonch hosil qilishingiz kerak. O'rnatish bo'yicha ko'rsatmalar avval Linux va MacOS uchun berilgan.

MacOS foydalanuvchilari uchun muhim eslatma: Kubectl avtoto'ldirish skripti kabi, to'liq taxallus MacOS'da standart bo'lgan Bash 3.2 bilan ishlamaydi. Xususan, to'liq taxallus bash-to'ldirish v2 ga bog'liq (brew install bash-completion@2), bu kamida Bash 4.1 ni talab qiladi. Bu MacOS-da to'liq taxallusdan foydalanish uchun Bash-ning yangiroq versiyasini o'rnatishingiz kerakligini anglatadi.

Skriptni yuklab olishingiz kerak bash_completion.sh dan GitHub ombori va uni faylingizga kiriting ~/.bashrc:

source ~/bash_completion.sh

Qobiqni qayta ishga tushirgandan so'ng, to'liq taxallus to'liq o'rnatiladi.

kubectl taxalluslari uchun avtomatik toʻldirish yoqilmoqda

Texnik jihatdan to'liq taxallus o'rash funktsiyasini ta'minlaydi _complete_alias. Bu funktsiya taxallusni tekshiradi va taxallus buyrug'i uchun tugatish ko'rsatmalarini qaytaradi.

Funktsiyani ma'lum bir taxallus bilan bog'lash uchun siz o'rnatilgan Bash mexanizmidan foydalanishingiz kerak to'la, o'rnatish uchun _complete_alias taxallusni tugatish funktsiyasi sifatida.

Misol tariqasida kubectl buyrug'ini bildiruvchi k taxallusni olaylik. o'rnatish uchun _complete_alias Ushbu taxallus uchun qo'shimcha funktsiya sifatida siz quyidagi buyruqni bajarishingiz kerak:

$ complete -F _complete_alias k

Buning natijasi shundaki, k taxallusni avtomatik to'ldirganingizda, funksiya chaqiriladi _complete_alias, bu taxallusni tekshiradi va buyruq uchun yakuniy maslahatlarni qaytaradi kubectl.

Ikkinchi misol sifatida taxallusni olaylik kg, bildiradi kubectl get:

$ complete -F _complete_alias kg

Xuddi oldingi misolda bo'lgani kabi, kg ni avtomatik to'ldirishda siz bajarishingiz kerak bo'lgan bir xil ko'rsatmalarga ega bo'lasiz. kubectl get.

E'tibor bering, siz tizimingizdagi har qanday taxallus uchun to'liq taxallusdan foydalanishingiz mumkin.

Shuning uchun, barcha kubectl taxalluslari uchun avtoto'ldirishni yoqish uchun ularning har biri uchun yuqoridagi buyruqni bajarishingiz kerak. Quyidagi parcha aynan shunday qiladi, agar siz kubectl-taxalluslarini o'rnatgan bo'lsangiz ~/.kubectl-aliases:

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

Ushbu kod qismi sizning sahifangizga joylashtirilishi kerak ~/.bashrc, buyruq qobig'ini qayta ishga tushiring va avtoto'ldirish barcha 800 kubectl taxalluslari uchun mavjud bo'ladi.

6. Plaginlar bilan kubectlni kengaytirish

Chunki 1.12 versiyasi, kubectl qo'llab-quvvatlaydi plagin mexanizmi, bu qo'shimcha buyruqlar bilan uning funktsiyalarini kengaytirish imkonini beradi.

Agar tanish bo'lsangiz Git plagin mexanizmlari, keyin kubectl plaginlari bir xil printsip asosida qurilgan.

Ushbu bobda biz plaginlarni qanday o'rnatish, ularni qaerdan topish va o'z plaginlaringizni qanday yaratishni ko'rib chiqamiz.

Plaginlarni o'rnatish

Kubectl plaginlari kabi nomga ega oddiy bajariladigan fayllar sifatida tarqatiladi kubectl-x. Prefiks kubectl- talab qilinadi, undan keyin plaginga qo'ng'iroq qilish imkonini beruvchi yangi kubectl kichik buyrug'i.

Masalan, salom plagini deb nomlangan fayl sifatida tarqatiladi kubectl-hello.

Plaginni o'rnatish uchun faylni nusxalashingiz kerak kubectl-x PATH-dagi istalgan katalogga kiriting va uni bajariladigan qilib qo'ying, masalan chmod +x. Shundan so'ng darhol plaginga qo'ng'iroq qilishingiz mumkin kubectl x.

Tizimingizda hozirda o'rnatilgan barcha plaginlarni ro'yxatga olish uchun quyidagi buyruqdan foydalanishingiz mumkin:

$ kubectl plugin list

Agar sizda bir xil nomdagi bir nechta plaginlar bo'lsa yoki bajarilmaydigan plaginlar fayli mavjud bo'lsa, bu buyruq ogohlantirishlarni ham ko'rsatadi.

Krew yordamida plaginlarni topish va o'rnatish

Kubectl plaginlari dasturiy paketlar kabi baham ko'rilishi yoki qayta ishlatilishi mumkin. Ammo boshqalar baham ko'rgan plaginlarni qayerdan topishingiz mumkin?

Krew loyihasi kubectl plaginlarini almashish, qidirish, o'rnatish va boshqarish uchun yagona yechimni taqdim etishga qaratilgan. Loyiha o'zini "kubectl plaginlari uchun paket menejeri" deb ataydi (Krew Brew).

Krew - siz tanlashingiz va o'rnatishingiz mumkin bo'lgan kubectl plaginlari ro'yxati. Shu bilan birga, Krew kubectl uchun plagin hamdir.

Bu shuni anglatadiki, Krew o'rnatilishi boshqa kubectl plaginini o'rnatish kabi ishlaydi. Siz batafsil ko'rsatmalar bilan tanishishingiz mumkin GitHub sahifasi.

Eng muhim Krew buyruqlari:

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

Iltimos, Krew yordamida plaginlarni o'rnatish yuqorida tavsiflangan standart usul yordamida plaginlarni o'rnatishga xalaqit bermasligini unutmang.

Iltimos, buyruqni unutmang kubectl krew list buyruq faqat Krew yordamida o'rnatilgan plaginlarni ko'rsatadi kubectl plugin list barcha plaginlarni, ya'ni Krew yordamida o'rnatilganlarni va boshqa usullar bilan o'rnatilganlarni sanab o'tadi.

Plaginlarni boshqa joydan topish

Krew - hozirda o'z ishini boshlagan yosh loyiha ro'yxati faqat 30 ga yaqin plaginlar. Agar kerakli narsani topa olmasangiz, plaginlarni GitHub kabi boshqa joyda topishingiz mumkin.

GitHub bo'limiga qarashni tavsiya qilaman kubectl plaginlari. U erda siz tekshirishga arziydigan o'nlab mavjud plaginlarni topasiz.

O'zingizning plaginlaringizni yozish

o'zingiz qila olasiz plaginlarni yaratish - Bu qiyin emas. Sizga kerakli narsani bajaradigan bajariladigan faylni yaratishingiz kerak, uni shunday nomlang kubectl-x va yuqorida aytib o'tilganidek o'rnating.

Fayl bash skripti, python skripti yoki kompilyatsiya qilingan GO ilovasi bo'lishi mumkin - bu muhim emas. Yagona shart - bu operatsion tizimda to'g'ridan-to'g'ri bajarilishi mumkin.

Keling, hozir misol plaginini yarataylik. Oldingi bo'limda siz kubectl buyrug'idan foydalanib, har bir pod uchun konteynerlarni ro'yxatga oldingiz. Ushbu buyruqni qo'ng'iroq qilishingiz mumkin bo'lgan plaginga aylantirish oson, masalan. kubectl img.

Fayl yarating kubectl-img quyidagi tarkib:

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

Endi faylni bajariladigan qilib yarating chmod +x kubectl-img va uni PATH-dagi istalgan katalogga ko'chiring. Shundan so'ng darhol plagindan foydalanishingiz mumkin kubectl img.

Yuqorida aytib o'tilganidek, kubectl plaginlari istalgan dasturlash yoki skript tilida yozilishi mumkin. Agar siz qobiq skriptlaridan foydalanayotgan bo'lsangiz, plagin ichidan kubectl-ga osongina qo'ng'iroq qilishning afzalligi. Biroq, undan foydalanib, haqiqiy dasturlash tillarida yanada murakkab plaginlarni yozishingiz mumkin Kubernetes mijozlar kutubxonasi. Agar siz Go dan foydalanayotgan bo'lsangiz, siz ham foydalanishingiz mumkin cli-ish vaqti kutubxonasi, bu kubectl plaginlarini yozish uchun maxsus mavjud.

Plaginlaringizni qanday ulashishingiz mumkin

Agar plaginlaringiz boshqalar uchun foydali bo‘lishi mumkin deb hisoblasangiz, uni GitHub’da baham ko‘ring. Ularni mavzuga qo'shishni unutmang kubectl plaginlari.

Shuningdek, plaginingizni qo'shishni so'rashingiz mumkin Krew ro'yxati. Buni qanday qilish bo'yicha ko'rsatmalar maqolada keltirilgan GitHub omborlari.

Buyruqning bajarilishi

Plaginlar hozirda avtomatik toʻldirishni qoʻllab-quvvatlamaydi. Ya'ni, plaginning to'liq nomini va argumentlarning to'liq nomlarini kiritishingiz kerak.

Ushbu funktsiya uchun GitHub kubectl ombori mavjud ochiq so'rov. Demak, bu xususiyat qachondir kelajakda amalga oshirilishi mumkin.

Omad!!!

Mavzu bo'yicha yana nimani o'qish kerak:

  1. Kubernetes-da avtomatik o'lchashning uchta darajasi va ulardan qanday samarali foydalanish.
  2. Kubernetes qaroqchilik ruhida amalga oshirish shabloniga ega.
  3. Telegramdagi Kubernetes atrofidagi kanalimiz.

Manba: www.habr.com

a Izoh qo'shish