Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
Kubernetes ilə işləyirsinizsə, kubectl çox güman ki, ən çox istifadə etdiyiniz yardım proqramlarından biridir. Müəyyən bir alətlə işləmək üçün çox vaxt sərf etdiyiniz zaman onu yaxşı öyrənmək və ondan səmərəli istifadə etməyi öyrənmək faydalıdır.

Komanda Mail.ru-dan Kubernetes aaS Daniel Weibel tərəfindən kubectl ilə effektiv işləmək üçün məsləhətlər və tövsiyələr tapa biləcəyiniz məqaləni tərcümə etdi. O, həmçinin Kubernetes haqqında daha dərindən başa düşməyə kömək edəcək.

Müəllifin fikrincə, məqalənin məqsədi Kubernetes ilə gündəlik işinizi nəinki daha səmərəli, həm də daha zövqlü etməkdir!

Giriş: kubectl nədir

Kubectl-dən daha effektiv istifadə etməyi öyrənməzdən əvvəl onun nə olduğu və necə işlədiyi barədə əsas anlayış əldə etməlisiniz.

İstifadəçinin nöqteyi-nəzərindən kubectl Kubernetes əməliyyatlarını yerinə yetirməyə imkan verən idarəetmə panelidir.

Texniki baxımdan kubectl Kubernetes API müştərisidir.

Kubernetes API HTTP REST API-dir. Bu API əsl Kubernetes istifadəçi interfeysidir və onun vasitəsilə tamamilə idarə olunur. Bu o deməkdir ki, hər Kubernetes əməliyyatı API son nöqtəsi kimi təqdim olunur və həmin son nöqtəyə HTTP sorğusu ilə edilə bilər.

Buna görə kubectl-in əsas işi Kubernetes API-yə HTTP sorğuları etməkdir:

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
Kubernetes tamamilə resurs yönümlü bir sistemdir. Bu o deməkdir ki, o, resursların daxili vəziyyətini saxlayır və bütün Kubernetes əməliyyatları CRUD əməliyyatlarıdır.

Bu resursları idarə etməklə siz Kubernetes-ə tam nəzarət edirsiniz və Kubernetes resursların cari vəziyyətinə əsasən nə edəcəyinizi müəyyənləşdirir. Bu səbəbdən Kubernetes API arayışı əlaqəli əməliyyatları ilə resurs növlərinin siyahısı kimi təşkil edilmişdir.

Bir nümunəyə baxaq.

Tutaq ki, siz ReplicaSet resursu yaratmaq istəyirsiniz. Bunun üçün faylda ReplicaSet-i adla təsvir edirsiniz replicaset.yaml, sonra əmri işlədin:

$ kubectl create -f replicaset.yaml

Bu, ReplicaSet resursu yaradacaq. Bəs pərdə arxasında nə baş verir?

Kubernetes ReplicaSet yaratma əməliyyatına malikdir. Hər hansı digər əməliyyat kimi, API son nöqtəsi kimi təqdim olunur. Bu əməliyyat üçün xüsusi API son nöqtəsi belə görünür:

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

Bütün Kubernetes əməliyyatları üçün API son nöqtələrini burada tapa bilərsiniz API arayışı (o cümlədən yuxarıdakı son nöqtə). Son nöqtəyə faktiki sorğu etmək üçün əvvəlcə API serverinin URL-ni API istinadında sadalanan son nöqtə yollarına əlavə etməlisiniz.

Beləliklə, yuxarıdakı əmri yerinə yetirdiyiniz zaman kubectl yuxarıdakı API son nöqtəsinə HTTP POST sorğusu göndərir. Faylda təqdim etdiyiniz ReplicaSet tərifi replicaset.yaml, sorğunun mətnində göndərilir.

Kubernetes klasteri ilə qarşılıqlı əlaqədə olan bütün əmrlər üçün kubectl belə işləyir. Bütün bu hallarda kubectl sadəcə uyğun Kubernetes API son nöqtələrinə HTTP sorğuları göndərir.

kimi bir yardım proqramından istifadə edərək Kubernetes-i tam idarə edə biləcəyinizi nəzərə alın curlHTTP sorğularını Kubernetes API-yə əl ilə göndərməklə. Kubectl sadəcə olaraq Kubernetes API-dən istifadəni asanlaşdırır.

Bu kubectl-in nə olduğunu və necə işlədiyinin əsaslarıdır. Ancaq Kubernetes API haqqında hər kubectl istifadəçisinin bilməli olduğu başqa bir şey var. Gəlin Kubernetesin daxili dünyasına qısaca nəzər salaq.

Kubernetesin daxili dünyası

Kubernetes klaster qovşaqlarında ayrı-ayrı proseslər kimi işləyən müstəqil komponentlər dəstindən ibarətdir. Bəzi komponentlər əsas qovşaqlarda, digərləri işçi qovşaqlarında işləyir, hər bir komponent öz xüsusi vəzifəsini yerinə yetirir.

Əsas qovşaqlarda ən vacib komponentlər bunlardır:

  1. depo - resurs təriflərini saxlayır (adətən bu və s).
  2. API server — API təmin edir və yaddaşı idarə edir.
  3. Nəzarətçi meneceri — Resurs statuslarının spesifikasiyalara uyğun olmasını təmin edir.
  4. Planlayıcı — işçi qovşaqlarında podları planlaşdırır.

Və burada işçi qovşaqlarının ən vacib komponentlərindən biri var:

  1. kubelet — işçi qovşağında konteynerlərin işə salınmasını idarə edir.

Bu komponentlərin birlikdə necə işlədiyini başa düşmək üçün bir nümunəyə baxaq.

Tutaq ki, siz yenicə tamamladınız kubectl create -f replicaset.yaml, bundan sonra kubectl HTTP POST sorğusu göndərdi ReplicaSet API son nöqtəsi (ReplicaSet resurs tərifindən keçməklə).

Klasterdə nə baş verir?

  1. Etdikdən sonra kubectl create -f replicaset.yaml API serveri ReplicaSet resurs tərifinizi yaddaşda saxlayır:

    Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi

  2. Sonra ReplicaSet nəzarətçisi ReplicaSet resurslarının yaradılması, dəyişdirilməsi və silinməsi ilə məşğul olan nəzarətçi menecerində işə salınır:

    Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi

  3. ReplicaSet nəzarətçisi hər bir ReplicaSet replikası üçün pod tərifi yaradır (ReplicaSet tərifindəki pod şablonuna uyğun olaraq) və onları yaddaşda saxlayır:

    Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi

  4. Planlayıcı işə salınır, hələ heç bir işçi qovşağına təyin edilməmiş podları izləyir:

    Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi

  5. Planlayıcı hər bir pod üçün uyğun işçi node seçir və bu məlumatı mağazadakı pod tərifinə əlavə edir:

    Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi

  6. Podun təyin olunduğu işçi qovşağında Kubelet işə salınır, bu node üçün təyin edilmiş podları izləyir:

    Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi

  7. Kubelet yaddaşdan pod tərifini oxuyur və qovşaqda konteynerləri işə salmaq üçün Docker kimi konteyner işləmə müddətinə göstəriş verir:

    Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi

Aşağıda bu təsvirin mətn versiyası verilmişdir.

ReplicaSet yaratma son nöqtəsinə API sorğusu API serveri tərəfindən işlənir. API server sorğunun doğruluğunu təsdiqləyir və ReplicaSet resurs tərifini yaddaşda saxlayır.

Bu hadisə nəzarətçi menecerinin alt prosesi olan ReplicaSet nəzarətçisini işə salır. ReplicaSet nəzarətçisi mağazada ReplicaSet resurslarının yaradılmasına, yenilənməsinə və silinməsinə nəzarət edir və bu baş verdikdə hadisə bildirişi alır.

ReplicaSet nəzarətçisinin işi tələb olunan sayda ReplicaSet podlarının mövcud olmasını təmin etməkdir. Bizim nümunəmizdə hələ heç bir pods yoxdur, ona görə də ReplicaSet nəzarətçisi bu pod tərifləri yaradır (ReplicaSet tərifindəki pod şablonuna uyğun olaraq) və onları yaddaşda saxlayır.

Yeni podların yaradılması hələ işçi qovşaqları üçün planlaşdırılmamış pod təriflərini izləyən planlaşdırıcı tərəfindən tetiklenir. Planlayıcı hər bir pod üçün uyğun işçi node seçir və anbarda pod təriflərini yeniləyir.

Qeyd edək ki, bu nöqtəyə qədər klasterdə heç bir iş yükü kodu işləmirdi. İndiyə qədər görülən hər şey - bu, master node-da depoda resursların yaradılması və yenilənməsidir.

Son hadisə, işçi qovşaqları üçün planlaşdırılan podları izləyən Kubelets'i işə salır. ReplicaSet podlarının quraşdırıldığı işçi qovşağının Kubeleti tələb olunan konteyner şəkillərini endirmək və onları işə salmaq üçün Docker kimi konteyner işləmə müddətinə göstəriş verməlidir.

Bu anda ReplicaSet tətbiqiniz nəhayət işləyir!

Kubernetes API-nin rolu

Əvvəlki nümunədə gördüyünüz kimi, Kubernetes komponentləri (API serveri və yaddaşdan başqa) yaddaşdakı resurslara dəyişiklikləri izləyir və yaddaşdakı resurslar haqqında məlumatı dəyişir.

Əlbəttə ki, bu komponentlər yaddaşla birbaşa əlaqə yaratmır, ancaq Kubernetes API vasitəsilə.

Aşağıdakı nümunələri nəzərdən keçirin:

  1. ReplicaSet nəzarətçisi API son nöqtəsindən istifadə edir ReplicaSets siyahısı parametri ilə watch ReplicaSet resurslarında dəyişiklikləri izləmək.
  2. ReplicaSet nəzarətçisi API son nöqtəsindən istifadə edir pod yaratmaq (pod yaratmaq) podlar yaratmaq.
  3. Planlayıcı API son nöqtəsindən istifadə edir yamaq pod (redaktə pod) seçilmiş işçi node haqqında məlumat ilə podları yeniləmək.

Gördüyünüz kimi, bu kubectl-in daxil olduğu eyni API-dir. Daxili komponentlər və xarici istifadəçilər üçün eyni API-dən istifadə Kubernetes dizaynında əsas konsepsiyadır.

İndi Kubernetes-in necə işlədiyini ümumiləşdirə bilərik:

  1. Saxlama anbarları dövlət, yəni Kubernetes resursları.
  2. API serveri Kubernetes API formasında yaddaşa interfeys təqdim edir.
  3. Bütün digər Kubernetes komponentləri və istifadəçiləri API vasitəsilə Kubernetes vəziyyətini (resurslarını) oxuyur, müşahidə edir və manipulyasiya edir.

Bu anlayışları bilmək kubectl-i daha yaxşı başa düşməyə və ondan maksimum yararlanmağa kömək edəcək.

İndi kubectl ilə məhsuldarlığınızı artırmağa kömək edəcək bəzi xüsusi məsləhətlərə və fəndlərə baxaq.

1. Əmr tamamlamaqdan istifadə edərək daxiletməni sürətləndirin

Kubectl ilə performansı artırmaq üçün ən faydalı, lakin tez-tez nəzərdən qaçırılan üsullardan biri əmrin tamamlanmasıdır.

Komandanın tamamlanması Tab düyməsini istifadə edərək kubectl əmrlərinin hissələrini avtomatik tamamlamağa imkan verir. Bu, resurs adları kimi mürəkkəb bir şey daxil olmaqla, alt əmrlər, seçimlər və arqumentlər üçün işləyir.

kubectl komanda tamamlamasının necə işlədiyinə baxın:

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
Komanda tamamlama Bash və Zsh mərmiləri üçün işləyir.

Rəsmi bələdçi avtomatik tamamlamanın qurulması üçün ətraflı təlimatları ehtiva edir, lakin aşağıda qısa bir çıxarış təqdim edəcəyik.

Komandanın tamamlanması necə işləyir

Komandanın tamamlanması tamamlama skripti ilə işləyən qabıq xüsusiyyətidir. Uzatma skripti müəyyən bir əmr üçün genişləndirmənin davranışını təyin edən bir qabıq skriptidir.

Kubectl avtomatik olaraq aşağıdakı əmrlərdən istifadə edərək Bash və Zsh üçün genişləndirmə skriptlərini yaradır və çıxarır:

$ kubectl completion bash

Или:

$ kubectl completion zsh

Nəzəri olaraq, kubectl əmrləri tamamlaya bilməsi üçün bu əmrlərin çıxışını müvafiq əmr qabığına qoşmaq kifayətdir.

Praktikada Bash (Linux və MacOS arasındakı fərqlər daxil olmaqla) və Zsh üçün əlaqə üsulu fərqlidir. Aşağıda bütün bu variantları nəzərdən keçirəcəyik.

Linux-da Bash

Bash tamamlama skripti bash tamamlama paketindən asılıdır, ona görə də əvvəlcə onu quraşdırmalısınız:

$ sudo apt-get install bash-completion

Или:

$ yum install bash-completion

Paketin uğurla quraşdırıldığını aşağıdakı əmrdən istifadə edərək yoxlaya bilərsiniz:

$ type _init_completion

Bu, qabıq funksiya kodunu çıxarırsa, bash-tamamlama düzgün quraşdırılmışdır. Əgər əmr "Tapılmadı" xətası verirsə, faylınıza aşağıdakı sətri əlavə etməlisiniz ~ / .bashrc:

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

Bu sətri fayla əlavə etmək lazımdırmı? ~ / .bashrc ya yox, bash-tamamlamağı quraşdırmaq üçün istifadə etdiyiniz paket menecerindən asılıdır. Bu APT üçün lazımdır, lakin YUM üçün deyil.

Bash-tamamlamağı quraşdırdıqdan sonra hər şeyi konfiqurasiya etməlisiniz ki, kubectl tamamlama skripti bütün qabıq sessiyalarında aktiv olsun.

Bunun bir yolu fayla aşağıdakı sətri əlavə etməkdir ~ / .bashrc:

source <(kubectl completion bash)

Başqa bir yol kubectl genişləndirilməsi skriptini qovluğa əlavə etməkdir /etc/bash_completion.d (əgər mövcud deyilsə onu yaradın):

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

Kataloqdakı bütün əlavə skriptlər /etc/bash_completion.d avtomatik olaraq bash-tamamlamaya daxil edilir.

Hər iki variant eyni dərəcədə tətbiq olunur.

Qabığı yenidən işə saldıqdan sonra kubectl əmrinin tamamlanması işləyəcək.

MacOS-da Bash

MacOS-da quraşdırma bir az daha mürəkkəbdir. Fakt budur ki, standart olaraq MacOS Bash versiyası 3.2-dən istifadə edir və kubectl avtomatik tamamlama skripti ən azı 4.1 Bash versiyasını tələb edir və Bash 3.2-də işləmir.

MacOS-da Bash-ın köhnəlmiş versiyasından istifadə ilə bağlı lisenziyalaşdırma problemləri var. Bash versiyası 4, Apple tərəfindən dəstəklənməyən GPLv3 altında lisenziyalıdır.

MacOS-da kubectl avtomatik tamamlamasını konfiqurasiya etmək üçün Bash-ın daha yeni versiyasını quraşdırmalısınız. Siz həmçinin yenilənmiş Bash-ı defolt qabıq olaraq təyin edə bilərsiniz ki, bu da gələcəkdə sizi bir çox problemlərdən xilas edəcək. Bu çətin deyil, təfərrüatlar məqalədə verilmişdir "MacOS-da Bash yenilənir.

Davam etməzdən əvvəl Bash-ın son versiyasını istifadə etdiyinizə əmin olun (çıxışı yoxlayın bash --version).

Bash tamamlama skripti layihəyə görə dəyişir bash-tamamlama, buna görə də əvvəlcə onu quraşdırmalısınız.

istifadə edərək bash tamamlamasını quraşdıra bilərsiniz homebrew:

$ brew install bash-completion@2

Burada @2 bash tamamlama versiyası 2 deməkdir. kubectl avtomatik tamamlama üçün bash tamamlama v2, bash tamamlama v2 isə minimum Bash versiyası 4.1 tələb edir.

əmr çıxışı brew-install fayla əlavə edilməli olanları təyin edən Caveats bölməsini ehtiva edir ~/.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"

Ancaq bu sətirləri əlavə etməyi məsləhət görürəm ~/.bash_profile, içində isə ~/.bashrc. Bu halda, avtomatik tamamlama təkcə əsas deyil, həm də uşaq əmr mərmilərində mövcud olacaqdır.

Komanda qabığını yenidən başlatdıqdan sonra aşağıdakı əmrdən istifadə edərək quraşdırmanın düzgünlüyünü yoxlaya bilərsiniz:

$ type _init_completion

Çıxışda bir qabıq funksiyasını görsəniz, hər şey düzgün konfiqurasiya edilmişdir.

İndi kubectl avtomatik tamamlamanın bütün seanslarda aktiv olmasını təmin etməliyik.

Bunun bir yolu aşağıdakı sətri əlavə etməkdir ~/.bashrc:

source <(kubectl completion bash)

İkinci yol, qovluğa avtomatik tamamlama skripti əlavə etməkdir /usr/local/etc/bash_completion.d:

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

Bu üsul yalnız Homebrew istifadə edərək bash-tamamlama quraşdırdığınız halda işləyəcək. Bu halda, bash-tamamlama bu kataloqdan bütün skriptləri yükləyir.

Əgər quraşdırdınızsa kubectl Homebrew istifadə edərək, onda əvvəlki addımı yerinə yetirməyə ehtiyac yoxdur, çünki avtomatik tamamlama skripti avtomatik olaraq qovluğa yerləşdiriləcək /usr/local/etc/bash_completion.d quraşdırma zamanı. Bu halda kubectl avtomatik tamamlama siz bash-tamamlamanı quraşdıran kimi işə başlayacaq.

Nəticədə, bütün bu variantlar ekvivalentdir.

zsh

Zsh üçün avtomatik tamamlama skriptləri heç bir asılılıq tələb etmir. Sizə lazım olan tək şey əmr qabığını yüklədiyiniz zaman onları aktivləşdirməkdir.

Bunu özünüzə bir xətt əlavə etməklə edə bilərsiniz ~/.zshrc fayl:

source <(kubectl completion zsh)

Səhv alsanız not found: compdef qabığını yenidən işə saldıqdan sonra daxili funksiyanı aktivləşdirməlisiniz compdef. Onu faylınızın əvvəlinə əlavə etməklə aktivləşdirə bilərsiniz ~/.zshrc aşağıdakılar:

autoload -Uz compinit
compinit

2. Resurs spesifikasiyalarına tez baxın

YAML resurs təriflərini yaratdığınız zaman həmin resurslar üçün sahələri və onların mənasını bilməlisiniz. Bu məlumatı axtarmaq üçün bir yer bütün resurslar üçün tam spesifikasiyaları ehtiva edən API arayışıdır.

Bununla belə, hər dəfə nəyisə axtarmaq lazım olanda veb brauzerə keçid əlverişsizdir. Buna görə kubectl əmr verir kubectl explain, bu, birbaşa terminalınızdakı bütün resursların spesifikasiyalarını göstərir.

Komanda formatı aşağıdakı kimidir:

$ kubectl explain resource[.field]...

Komanda tələb olunan resursun və ya sahənin spesifikasiyasını verəcəkdir. Göstərilən məlumat API təlimatında olanlarla eynidir.

Qiyabi kubectl explain sahələrin yuvalanmasının yalnız birinci səviyyəsini göstərir.

Görün necə görünür Daha sonra bilərsiniz.

Seçim əlavə etsəniz, bütün ağacı göstərə bilərsiniz --recursive:

$ kubectl explain deployment.spec --recursive

Hansı resursların lazım olduğunu dəqiq bilmirsinizsə, aşağıdakı əmrlə onların hamısını göstərə bilərsiniz:

$ kubectl api-resources

Bu əmr resurs adlarını cəm formada göstərir, məs. deployments əvəzinə deployment. O, həmçinin, məsələn, qısa adı göstərir deploy, ona malik olan resurslar üçün. Bu fərqlərdən narahat olmayın. Bütün bu adlandırma seçimləri kubectl üçün ekvivalentdir. Yəni onlardan hər hansı birini istifadə edə bilərsiniz kubectl explain.

Aşağıdakı bütün əmrlər ekvivalentdir:

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

3. Fərdi sütun çıxış formatından istifadə edin

Defolt əmr çıxış formatı 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

Bu format rahatdır, lakin məhdud miqdarda məlumat ehtiva edir. Tam resurs tərifi formatı ilə müqayisədə burada yalnız bir neçə sahə göstərilir.

Bu halda, xüsusi sütun çıxış formatından istifadə edə bilərsiniz. Bu, hansı məlumatların çıxacağını müəyyən etməyə imkan verir. İstənilən resurs sahəsini ayrıca sütun kimi göstərə bilərsiniz.

Fərdi formatın istifadəsi seçimlərdən istifadə etməklə müəyyən edilir:

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

Siz hər bir çıxış sütununu cüt kimi təyin edə bilərsiniz <header>:<jsonpath>Hara <header> sütun adıdır və <jsonpath> — resurs sahəsini təyin edən ifadə.

Sadə bir misala baxaq:

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

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

Çıxışda podların adları ilə bir sütun var.

Seçim ifadəsi sahədən pod adlarını seçir metadata.name. Bunun səbəbi, podun adının uşaq adı sahəsində müəyyən edilməsidir metadata podun resurs təsvirində. Ətraflı məlumatı bölmədə tapa bilərsiniz API Bələdçisi və ya əmri yazın kubectl explain pod.metadata.name.

İndi deyək ki, siz çıxışa əlavə sütun əlavə etmək istəyirsiniz, məsələn, hər bir podun işlədiyi qovşağı göstərmək. Bunu etmək üçün sadəcə olaraq xüsusi sütunlar seçiminə müvafiq sütun spesifikasiyasını əlavə edə bilərsiniz:

$ 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

İfadə qovşağın adını seçir spec.nodeName — qovşaq qovşağına təyin edildikdə, onun adı sahəyə yazılır spec.nodeName pod resurs spesifikasiyası. Daha ətraflı məlumatı çıxışda tapa bilərsiniz kubectl explain pod.spec.nodeName.

Nəzərə alın ki, Kubernetes resurs sahələri hərflərə həssasdır.

İstənilən resurs sahəsinə sütun kimi baxa bilərsiniz. Sadəcə resursun spesifikasiyasını nəzərdən keçirin və onu istədiyiniz sahələrlə sınayın.

Ancaq əvvəlcə sahə seçimi ifadələrinə daha yaxından nəzər salaq.

JSONPath İfadələri

Resurs sahələrini seçmək üçün ifadələr əsaslanır JSONPath.

JSONPath JSON sənədlərindən məlumat almaq üçün bir dildir. Tək sahənin seçilməsi JSONPath üçün ən sadə istifadə halıdır. Onun çoxu var daha çox imkanlar, o cümlədən seçicilər, filtrlər və s.

Kubectl izahı məhdud sayda JSONPath xüsusiyyətlərini dəstəkləyir. Onların istifadə imkanları və nümunələri aşağıda təsvir edilmişdir:

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

[] operatoru xüsusilə vacibdir. Bir çox Kubernetes resurs sahələri siyahılardır və bu operator sizə həmin siyahıların üzvlərini seçməyə imkan verir. Tez-tez siyahının bütün elementlərini seçmək üçün [*] kimi joker işarə ilə istifadə olunur.

Tətbiq nümunələri

Xüsusi sütun çıxış formatından istifadə imkanları sonsuzdur, çünki çıxışda istənilən sahəni və ya resurs sahələrinin birləşməsini göstərə bilərsiniz. Burada bəzi nümunə proqramlar var, lakin onları özünüz araşdırın və sizin üçün işləyən proqramları tapın.

  1. Podlar üçün konteyner şəkilləri göstərilir:
    $ 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 əmr hər bir pod üçün konteyner təsvirinin adlarını göstərir.

    Yadda saxlayın ki, podda bir neçə konteyner ola bilər, sonra şəkil adları vergüllə ayrılmış bir sətirdə göstəriləcək.

  2. Node əlçatanlıq zonaları göstərilir:
    $ 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

    Əgər klasteriniz ictimai buludda yerləşdirilirsə, bu əmr faydalıdır. O, hər bir node üçün mövcudluq zonasını göstərir.

    Əlçatanlıq zonası təkrarlama zonasını coğrafi bölgə ilə məhdudlaşdıran bulud anlayışıdır.

    Hər bir node üçün mövcudluq zonaları xüsusi bir etiket vasitəsilə əldə edilir - failure-domain.beta.kubernetes.io/zone. Klaster ictimai buludda işləyirsə, bu etiket avtomatik olaraq yaradılır və hər bir qovşaq üçün əlçatanlıq zonalarının adları ilə doldurulur.

    Etiketlər Kubernetes resurs spesifikasiyasının bir hissəsi deyil, ona görə də onlar haqqında məlumat tapa bilməyəcəksiniz API Bələdçisi. YAML və ya JSON formatında qovşaqlar haqqında məlumat tələb etsəniz, onlar (digər etiketlər kimi) görünə bilər:

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

    Bu, resurs spesifikasiyalarını öyrənməkdən əlavə, resurslar haqqında daha çox öyrənmək üçün əla yoldur.

4. Asanlıqla klasterlər və ad məkanları arasında keçid edin

kubectl Kubernetes API-yə sorğu göndərdikdə, əlaqə üçün bütün lazımi parametrləri əldə etmək üçün əvvəlcə kubeconfig faylını oxuyur.

Varsayılan olaraq kubeconfig faylıdır ~/.kube/config. Adətən bu fayl xüsusi əmrlə yaradılır və ya yenilənir.

Çoxlu klasterlərlə işlədiyiniz zaman kubeconfig faylınız bu klasterlərin hamısına qoşulmaq üçün parametrləri ehtiva edir. Hansı klasterlə işlədiyinizi kubectl əmrinə söyləmək üçün bir yola ehtiyacınız var.

Klaster daxilində siz çoxlu ad məkanı yarada bilərsiniz - fiziki klasterdə virtual klaster növü. Kubectl həmçinin kubeconfig faylı əsasında hansı ad sahəsinin istifadə olunacağını müəyyənləşdirir. Bu o deməkdir ki, kubectl əmrinə hansı ad sahəsi ilə işləməyinizi söyləmək üçün bir yola ehtiyacınız var.

Bu fəsildə biz bunun necə işlədiyini və effektiv işləməsini izah edəcəyik.

Nəzərə alın ki, KUBECONFIG mühit dəyişənində sadalanan bir neçə kubeconfig faylınız ola bilər. Bu halda, bütün bu fayllar iş vaxtında bir ümumi konfiqurasiyada birləşdiriləcəkdir. Siz həmçinin parametrlə kubectl işlətməklə defolt kubeconfig faylını dəyişə bilərsiniz --kubeconfig. Görmək rəsmi sənədlər.

kubeconfig faylları

Gəlin görək kubeconfig faylında nələr var:

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
Gördüyünüz kimi kubeconfig faylında kontekstlər dəsti var. Kontekst üç elementdən ibarətdir:

  • Cluster — klaster serverinin API URL-i.
  • İstifadəçi - çoxluqdakı istifadəçi identifikasiyası etimadnaməsi.
  • Ad sahəsi - klasterə qoşulduqda istifadə olunan ad sahəsi.

Praktikada kubekonfiqurasiyasında çox vaxt hər klaster üçün bir kontekstdən istifadə edirlər. Bununla belə, hər klaster üçün istifadəçi və ya ad sahəsi ilə fərqlənən bir neçə kontekstiniz ola bilər. Bununla belə, bu çox kontekstli konfiqurasiya qeyri-adi haldır, ona görə də adətən klasterlər və kontekstlər arasında bir-bir xəritəçəkmə olur.

İstənilən vaxt kontekstlərdən biri aktualdır:

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
kubectl konfiqurasiya faylını oxuduqda həmişə cari kontekstdən məlumat alır. Yuxarıdakı nümunədə kubectl Hare klasterinə qoşulacaq.

Müvafiq olaraq, başqa klasterə keçmək üçün kubeconfig faylında mövcud konteksti dəyişdirməlisiniz:

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
İndi kubectl Fox klasterinə qoşulacaq.

Eyni klasterdə fərqli ad sahəsinə keçmək üçün cari kontekst üçün ad sahəsi elementinin dəyərini dəyişdirməlisiniz:

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
Yuxarıdakı misalda kubectl Fox klasterinin Prod ad məkanından istifadə edəcək (əvvəllər Test ad məkanı təyin edilmişdi).

Qeyd edək ki, kubectl də seçimlər təqdim edir --cluster, --user, --namespace и --contextkubeconfig-də nə təyin olunduğundan asılı olmayaraq, fərdi elementlərin və cari kontekstin özünün üzərinə yazmağa imkan verir. Bax kubectl options.

Teorik olaraq kubeconfig-də parametrləri əl ilə dəyişə bilərsiniz. Amma əlverişsizdir. Bu əməliyyatları sadələşdirmək üçün parametrləri avtomatik olaraq dəyişdirməyə imkan verən müxtəlif yardım proqramları mövcuddur.

kubectx istifadə edin

Klasterlər və ad boşluqları arasında keçid üçün çox məşhur köməkçi proqram.

Utilit əmrləri təmin edir kubectx и kubens müvafiq olaraq cari kontekst və ad sahəsini dəyişdirmək üçün.

Qeyd edildiyi kimi, hər klaster üçün yalnız bir kontekstiniz varsa, cari kontekstin dəyişdirilməsi klasterin dəyişdirilməsi deməkdir.

Bu əmrləri yerinə yetirmək üçün bir nümunədir:

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
Əslində, bu əmrlər kubeconfig faylını yuxarıda göstərildiyi kimi redaktə edir.

quraşdırmaq kubectx, üzərindəki təlimatlara əməl edin Github.

Hər iki əmr kontekst və ad məkanı adlarının avtomatik tamamlamasını dəstəkləyir ki, bu da onları tamamilə yazmaq ehtiyacını aradan qaldırır. Avtomatik tamamlamanın qurulması üçün təlimatlar burada.

Başqa bir faydalı xüsusiyyət kubectx edir interaktiv rejim. Kommunal ilə birlikdə işləyir fzf, ayrıca quraşdırılmalıdır. fzf-nin quraşdırılması avtomatik olaraq interaktiv rejimi mövcud edir kubectx. İnteraktiv olaraq siz fzf tərəfindən təmin edilən interaktiv pulsuz axtarış interfeysi vasitəsilə kontekst və ad məkanını seçə bilərsiniz.

Qabıq ləqəblərindən istifadə

Cari kontekst və ad məkanını dəyişdirmək üçün ayrıca alətlərə ehtiyacınız yoxdur, çünki kubectl bunun üçün əmrlər də təmin edir. Bəli, komanda kubectl config kubeconfig fayllarını redaktə etmək üçün alt əmrlər təqdim edir.

Bəziləri bunlardır:

  • kubectl config get-contexts: bütün kontekstləri göstərmək;
  • kubectl config current-context: cari kontekst əldə etmək;
  • kubectl config use-context: cari konteksti dəyişdirin;
  • kubectl config set-context: Kontekst elementini dəyişdirin.

Lakin bu əmrləri birbaşa istifadə etmək çox rahat deyil, çünki onlar uzundur. Onlar üçün icrası asan olan qabıq ləqəbləri yarada bilərsiniz.

Mən kubectx-ə bənzər funksionallığı təmin edən bu əmrlər əsasında bir sıra ləqəblər yaratdım. Burada onları hərəkətdə görə bilərsiniz:

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
Qeyd edək ki, ləqəblər interaktiv pulsuz axtarış interfeysi təmin etmək üçün fzf-dən istifadə edir (məsələn, kubectx-in interaktiv rejimi). Bu o deməkdir ki, ehtiyacınız var fzf quraşdırınbu ləqəblərdən istifadə etmək.

Budur ləqəblərin tərifləri:

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

Bu ləqəbləri təyin etmək üçün yuxarıdakı tərifləri faylınıza əlavə etməlisiniz ~/.bashrc və ya ~/.zshrc və qabığını yenidən başladın.

Pluginlərdən istifadə

Kubectl sizə əsas əmrlərlə eyni şəkildə icra olunan plaginləri yükləməyə imkan verir. Siz, məsələn, kubectl-foo plaginini quraşdıra və əmri yerinə yetirərək onu işə sala bilərsiniz kubectl foo.

Kontekst və ad sahəsini bu şəkildə, məsələn, qaçış yolu ilə dəyişdirmək rahat olardı kubectl ctx konteksti dəyişdirmək və kubectl ns ad sahəsini dəyişdirmək üçün.

Bunu edən iki plagin yazdım:

Pluginlərin işi əvvəlki bölmədəki ləqəblərə əsaslanır.

Onlar necə işləyirlər:

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
Qeyd edək ki, plaginlər interaktiv pulsuz axtarış interfeysi təmin etmək üçün fzf-dən istifadə edir (məsələn, kubectx-in interaktiv rejimi). Bu o deməkdir ki, ehtiyacınız var fzf quraşdırınbu ləqəblərdən istifadə etmək.

Pluginləri quraşdırmaq üçün adlanan qabıq skriptlərini yükləməlisiniz kubectl-ctx и kubectl-ns PATH dəyişəninizdəki hər hansı qovluğa köçürün və onları məsələn, icra edilə bilən hala gətirin. chmod +x. Bundan dərhal sonra istifadə edə biləcəksiniz kubectl ctx и kubectl ns.

5. Avtoaliazlarla daxiletməni azaldın

Shell ləqəbləri daxiletməni sürətləndirmək üçün yaxşı bir yoldur. Layihə kubectl-ləqəblər əsas kubectl əmrləri üçün təxminən 800 qısayol ehtiva edir.

Sizi maraqlandıra bilərsiniz - 800 ləqəbi necə xatırlayırsınız? Ancaq bunların hamısını xatırlamağa ehtiyac yoxdur, çünki onlar aşağıda verilmiş sadə bir sxemə əsasən qurulur:

Kubectl-dən necə daha səmərəli istifadə etmək olar: ətraflı bələdçi
Misal üçün:

  1. kgpooyaml - kubectl pods oyaml almaq
  2. ksysgsvcw — kubectl -n kube sistemi svc w əldə edin
  3. ksysrmcm -kubectl -n kube-sistemi rm sm
  4. kgdepallls - kubectl bütün sl yerləşdirilməsi almaq

Gördüyünüz kimi, ləqəblər hər biri kubectl əmrinin xüsusi elementini təmsil edən komponentlərdən ibarətdir. Hər bir ləqəb əsas əmr, əməliyyat və resurs üçün bir komponentə və parametrlər üçün çoxlu komponentə malik ola bilər. Siz sadəcə yuxarıdakı diaqrama uyğun olaraq bu komponentləri soldan sağa "doldurursunuz".

Cari ətraflı diaqram bu ünvandadır Github. Orada da tapa bilərsiniz ləqəblərin tam siyahısı.

Məsələn, kgpooyamlall ləqəbi əmrə bərabərdir kubectl get pods -o yaml --all-namespaces.

Seçimlərin nisbi sırası vacib deyil: əmr kgpooyamlall əmrinə bərabərdir kgpoalloyaml.

Bütün komponentləri ləqəb kimi istifadə etmək lazım deyil. Misal üçün k, kg, klo, ksys, kgpo də istifadə oluna bilər. Bundan əlavə, əmr satırında ləqəbləri və müntəzəm əmrləri və ya seçimləri birləşdirə bilərsiniz:

Misal üçün:

  1. Əvəzinə kubectl proxy yaza bilir k proxy.
  2. Əvəzinə kubectl get roles yaza bilir kg roles (hal-hazırda Rollar resursu üçün heç bir ləqəb yoxdur).
  3. Müəyyən bir pod üçün məlumat əldə etmək üçün əmrdən istifadə edə bilərsiniz kgpo my-pod — kubectl get pod my-pod.

Nəzərə alın ki, bəzi ləqəblər komanda xətti arqumenti tələb edir. Məsələn, ləqəb kgpol vasitə kubectl get pods -l. Seçim -l bir arqument tələb edir - etiket spesifikasiyası. Bir ləqəb istifadə etsəniz, belə görünəcək kgpol app=ui.

Bəzi ləqəblər arqument tələb etdiyi üçün a, f və l ləqəbləri ən son istifadə edilməlidir.

Ümumiyyətlə, bu sxemi mənimsədikdən sonra yerinə yetirmək istədiyiniz əmrlərdən intuitiv olaraq ləqəblər əldə edə və çoxlu yazmağa vaxta qənaət edə bilərsiniz.

Quraşdırma

kubectl-ləqəbləri quraşdırmaq üçün faylı yükləməlisiniz .kubectl_takma adlar GitHub-dan və fayla daxil edin ~/.bashrc və ya ~/.zshrc:

source ~/.kubectl_aliases

Avtomatik tamamlama

Daha əvvəl dediyimiz kimi, siz tez-tez əmr satırında ləqəblərə əlavə sözlər əlavə edirsiniz. Misal üçün:

$ kgpooyaml test-pod-d4b77b989

kubectl komanda tamamlamasından istifadə edirsinizsə, ehtimal ki, resurs adları kimi şeylər üçün avtomatik tamamlamadan istifadə etmisiniz. Ancaq ləqəblərdən istifadə edildikdə bunu etmək olarmı?

Bu çox vacib sualdır, çünki avtomatik tamamlama işləməsə, ləqəblərin bəzi üstünlüklərini itirəcəksiniz.

Cavab istifadə etdiyiniz qabıqdan asılıdır:

  1. Zsh üçün ləqəb tamamlama qutudan kənar işləyir.
  2. Bash üçün, təəssüf ki, avtomatik tamamlamanın işləməsi üçün bəzi iş tələb olunur.

Bash-da ləqəblər üçün avtomatik tamamlamanın aktivləşdirilməsi

Bash ilə problem ondadır ki, o, ləqəbin istinad etdiyi əmri deyil (məsələn, Zsh kimi) ləqəbi tamamlamağa çalışır (hər dəfə Tab düyməsini basdığınız zaman). Bütün 800 ləqəb üçün tamamlama skriptləriniz olmadığı üçün avtomatik tamamlama işləmir.

Layihə tam ləqəb bu problemin ümumi həllini təqdim edir. O, ləqəblər üçün tamamlama mexanizminə qoşulur, ləqəbi daxildən əmrə genişləndirir və tamamlanmış komanda üçün tamamlama seçimlərini qaytarır. Bu o deməkdir ki, ləqəb üçün doldurulma tam əmr üçün olduğu kimi davranır.

Aşağıda, mən əvvəlcə tam ləqəbin necə qurulacağını və sonra bütün kubectl ləqəbləri üçün tamamlamağı təmin etmək üçün onu necə konfiqurasiya edəcəyimi izah edəcəyəm.

Tam ləqəb quraşdırılması

İlk növbədə, tam ləqəbdən asılıdır bash-tamamlama. Buna görə də, tam ləqəb quraşdırmadan əvvəl, bash-tamamlamanın quraşdırıldığından əmin olmalısınız. Quraşdırma təlimatları əvvəllər Linux və MacOS üçün verilmişdir.

MacOS İstifadəçiləri üçün Vacib Qeyd: kubectl avtomatik tamamlama skripti kimi, tam ləqəb MacOS-da defolt olan Bash 3.2 ilə işləmir. Xüsusilə, tam ləqəb bash tamamlama v2-dən asılıdır (brew install bash-completion@2), ən azı Bash 4.1 tələb edir. Bu o deməkdir ki, MacOS-da tam ləqəbdən istifadə etmək üçün Bash-ın daha yeni versiyasını quraşdırmalısınız.

Skripti yükləmək lazımdır bash_completion.sh haqqında GitHub deposu və faylınıza daxil edin ~/.bashrc:

source ~/bash_completion.sh

Qabığı yenidən yüklədikdən sonra tam ləqəb tam quraşdırılacaq.

kubectl ləqəbləri üçün avtomatik tamamlama aktiv edilir

Texniki cəhətdən tam ləqəb sarma funksiyasını təmin edir _complete_alias. Bu funksiya ləqəbi yoxlayır və ləqəb əmri üçün tamamlama göstərişlərini qaytarır.

Funksiyanı xüsusi ləqəblə əlaqələndirmək üçün daxili Bash mexanizmindən istifadə etməlisiniz tam, quraşdırmaq üçün _complete_alias ləqəb tamamlama funksiyası kimi.

Nümunə olaraq kubectl əmrini ifadə edən k ləqəbini götürək. quraşdırmaq _complete_alias Bu ləqəb üçün tamamlayıcı funksiya olaraq aşağıdakı əmri yerinə yetirməlisiniz:

$ complete -F _complete_alias k

Bunun nəticəsidir ki, siz k ləqəbini avtomatik tamamladığınız zaman funksiya çağırılır _complete_alias, bu, ləqəbi yoxlayır və əmr üçün tamamlama göstərişlərini qaytarır kubectl.

İkinci misal olaraq ləqəbi götürək kg, ifadə edir kubectl get:

$ complete -F _complete_alias kg

Əvvəlki misalda olduğu kimi, kq-ı avtomatik tamamladığınız zaman, əldə edəcəyiniz eyni tamamlama göstərişlərini alırsınız. kubectl get.

Qeyd edək ki, sisteminizdə istənilən ləqəb üçün tam ləqəbdən istifadə edə bilərsiniz.

Buna görə də, bütün kubectl ləqəbləri üçün avtomatik tamamlamağı aktivləşdirmək üçün onların hər biri üçün yuxarıdakı əmri yerinə yetirməlisiniz. Kubectl-ləqəbləri təyin etmisinizsə, aşağıdakı fraqment məhz bunu edir ~/.kubectl-aliases:

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

Bu kod parçası sizin içərinizdə yerləşdirilməlidir ~/.bashrc, əmr qabığını yenidən başladın və avtomatik tamamlama bütün 800 kubectl ləqəbləri üçün əlçatan olacaq.

6. Plaginlərlə kubectl-in genişləndirilməsi

-Dən başlayır versiya 1.12, kubectl dəstəkləyir plagin mexanizmi, onun funksiyalarını əlavə əmrlərlə genişləndirməyə imkan verir.

Əgər tanışsınızsa Git plagin mexanizmləri, sonra kubectl plaginləri eyni prinsip üzərində qurulur.

Bu fəsildə biz plaginləri necə quraşdırmaq, onları harada tapmaq və öz plaginlərinizi necə yaratmaq barədə danışacağıq.

Pluginlərin quraşdırılması

Kubectl plaginləri kimi adı ilə sadə icra edilə bilən fayllar kimi paylanır kubectl-x. Prefiks kubectl- tələb olunur, ardınca plaginə zəng etməyə imkan verən yeni kubectl alt əmri.

Məsələn, salam plagini adlı fayl kimi paylanacaq kubectl-hello.

Plugini quraşdırmaq üçün faylı kopyalamalısınız kubectl-x PATH-dəki hər hansı bir kataloqa daxil edin və onu icra edilə bilən hala gətirin, məsələn chmod +x. Bundan dərhal sonra plagini ilə zəng edə bilərsiniz kubectl x.

Hazırda sisteminizdə quraşdırılmış bütün plaginləri siyahıya almaq üçün aşağıdakı əmrdən istifadə edə bilərsiniz:

$ kubectl plugin list

Eyni adlı birdən çox plagininiz varsa və ya icra edilə bilməyən plaginlər faylı varsa, bu əmr xəbərdarlıqları da göstərəcək.

Krew istifadə edərək plaginlərin tapılması və quraşdırılması

Kubectl plaginləri proqram paketləri kimi paylaşıla və ya təkrar istifadə edilə bilər. Bəs başqalarının paylaşdığı plaginləri haradan tapa bilərsiniz?

Layihə Krew kubectl plaginlərini paylaşmaq, axtarmaq, quraşdırmaq və idarə etmək üçün vahid həll təmin etmək məqsədi daşıyır. Layihə özünü "kubectl plaginləri üçün paket meneceri" adlandırır (Krew dəm).

Krew seçib quraşdıra biləcəyiniz kubectl plaginlərinin siyahısıdır. Eyni zamanda, Krew kubectl üçün bir plagindir.

Bu o deməkdir ki, Krew-u quraşdırmaq hər hansı digər kubectl plaginini quraşdırmaq kimi işləyir. Ətraflı təlimatları burada tapa bilərsiniz GitHub səhifəsi.

Ən vacib Krew əmrləri bunlardır:

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

Nəzərə alın ki, Krew istifadə edərək plaginlərin quraşdırılması yuxarıda təsvir edilən standart metoddan istifadə edərək plaginlərin quraşdırılmasına mane olmur.

Qeyd edək ki, əmr kubectl krew list yalnız Krew istifadə edərək quraşdırılmış plaginləri göstərir, halbuki əmr kubectl plugin list bütün plaginləri, yəni Krew istifadə edərək quraşdırılanları və digər üsullarla quraşdırılanları sadalayır.

Pluginləri başqa yerdə tapmaq

Krew gənc layihədir, hazırda fəaliyyətdədir siyahı cəmi 30-a yaxın plagin. Lazım olanı tapa bilmirsinizsə, GitHub kimi plaginləri başqa yerlərdə tapa bilərsiniz.

GitHub bölməsinə baxmağı məsləhət görürəm kubectl-pluginlər. Orada yoxlamağa dəyər onlarla mövcud plaginləri tapa bilərsiniz.

Öz plaginlərinizi yazmaq

özünüz edə bilərsiniz plaginlər yaradın - Çətin deyil. Sizə lazım olanı yerinə yetirən icraedici fayl yaratmalısınız, ona bənzər adlandırın kubectl-x və yuxarıda göstərildiyi kimi quraşdırın.

Fayl bash skripti, python skripti və ya tərtib edilmiş GO proqramı ola bilər - fərqi yoxdur. Yeganə şərt əməliyyat sistemində birbaşa icra oluna bilməsidir.

İndi nümunə plagin yaradaq. Əvvəlki bölmədə siz kubectl əmrindən istifadə edərək hər bir pod üçün konteynerləri sadaladınız. Bu əmri zəng edə biləcəyiniz bir plaginə çevirmək asandır, məsələn. kubectl img.

Fayl yaradın kubectl-img aşağıdakı məzmun:

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

İndi faylı icra edilə bilən hala gətirin chmod +x kubectl-img və onu PATH-dəki istənilən qovluğa köçürün. Bundan dərhal sonra plaqindən istifadə edə bilərsiniz kubectl img.

Qeyd edildiyi kimi, kubectl plaginləri istənilən proqramlaşdırma və ya skript dilində yazıla bilər. Əgər qabıq skriptlərindən istifadə edirsinizsə, plagin daxilində kubectl-ə asanlıqla zəng edə bilmənin üstünlüyü. Bununla belə, istifadə edərək real proqramlaşdırma dillərində daha mürəkkəb plaginlər yaza bilərsiniz Kubernetes müştəri kitabxanası. Əgər Go istifadə edirsinizsə, siz də istifadə edə bilərsiniz cli-iş vaxtı kitabxanası, xüsusi olaraq kubectl plaginlərinin yazılması üçün mövcuddur.

Pluginlərinizi necə paylaşmaq olar

Pluginlərinizin başqaları üçün faydalı ola biləcəyini düşünürsünüzsə, onu GitHub-da paylaşmaqdan çekinmeyin. Onları mövzuya əlavə etməyinizə əmin olun kubectl-pluginlər.

Siz həmçinin plagininizin əlavə edilməsini tələb edə bilərsiniz Krew siyahısı. Bunun necə ediləcəyi ilə bağlı təlimatlar var GitHub depoları.

Komandanın tamamlanması

Pluginlər hazırda avtomatik tamamlamağı dəstəkləmir. Yəni, siz plaqinin tam adını və arqumentlərin tam adlarını daxil etməlisiniz.

Bu funksiya üçün GitHub kubectl deposu var açıq sorğu. Odur ki, bu funksiyanın gələcəkdə nə vaxtsa tətbiq olunması mümkündür.

Udachi !!!

Mövzuda başqa nə oxumaq olar:

  1. Kubernetes-də avtomatik ölçmənin üç səviyyəsi və onlardan necə səmərəli istifadə etmək olar.
  2. Piratlıq ruhunda Kubernetes həyata keçirmək üçün şablon ilə.
  3. Telegram-da Kubernetes ətrafında kanalımız.

Mənbə: www.habr.com

Добавить комментарий