Cara menggunakan kubectl dengan lebih efektif: panduan terperinci

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Jika Anda bekerja dengan Kubernetes, maka kubectl mungkin merupakan salah satu utilitas yang paling sering Anda gunakan. Dan kapan pun Anda menghabiskan banyak waktu bekerja dengan alat tertentu, ada gunanya mempelajarinya dengan baik dan mempelajari cara menggunakannya secara efektif.

Tim Kubernetes aaS dari Mail.ru menerjemahkan artikel oleh Daniel Weibel di mana Anda akan menemukan tip dan trik untuk bekerja secara efektif dengan kubectl. Ini juga akan membantu Anda mendapatkan pemahaman yang lebih mendalam tentang Kubernetes.

Menurut penulisnya, tujuan artikel ini adalah membuat pekerjaan sehari-hari Anda dengan Kubernetes tidak hanya lebih efisien, tetapi juga lebih menyenangkan!

Pendahuluan: Apa itu kubectl

Sebelum kamu bisa belajar menggunakan kubectl dengan lebih efektif, kamu perlu mendapatkan pemahaman dasar tentang apa itu kubectl dan bagaimana cara kerjanya.

Dari sudut pandang pengguna, kubectl adalah panel kontrol yang memungkinkan Anda melakukan operasi Kubernetes.

Secara teknis, kubectl adalah klien API Kubernetes.

Kubernetes API adalah HTTP REST API. API ini adalah antarmuka pengguna Kubernetes yang sebenarnya, yang melaluinya API ini dikontrol sepenuhnya. Artinya, setiap operasi Kubernetes diekspos sebagai titik akhir API dan dapat dibuat dengan permintaan HTTP ke titik akhir tersebut.

Oleh karena itu, tugas utama kubectl adalah membuat permintaan HTTP ke API Kubernetes:

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Kubernetes adalah sistem yang sepenuhnya berorientasi pada sumber daya. Artinya, ia menjaga keadaan internal sumber daya dan semua operasi Kubernetes adalah operasi CRUD.

Anda memegang kendali penuh atas Kubernetes dengan mengelola sumber daya ini, dan Kubernetes menentukan apa yang harus dilakukan berdasarkan kondisi sumber daya saat ini. Oleh karena itu, referensi API Kubernetes disusun sebagai daftar jenis sumber daya dengan operasi terkaitnya.

Mari kita lihat sebuah contoh.

Katakanlah Anda ingin membuat sumber daya ReplicaSet. Untuk melakukan ini, jelaskan ReplicaSet dalam file berdasarkan nama replicaset.yaml, lalu jalankan perintah:

$ kubectl create -f replicaset.yaml

Ini akan membuat sumber daya ReplicaSet. Tapi apa yang terjadi di balik layar?

Kubernetes memiliki operasi pembuatan ReplicaSet. Seperti operasi lainnya, operasi ini diekspos sebagai titik akhir API. Titik akhir API spesifik untuk operasi ini terlihat seperti ini:

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

Titik akhir API untuk semua operasi Kubernetes dapat ditemukan di Referensi API (termasuk titik akhir di atas). Untuk membuat permintaan sebenarnya ke titik akhir, Anda harus terlebih dahulu menambahkan URL server API ke jalur titik akhir yang tercantum dalam referensi API.

Oleh karena itu, ketika Anda menjalankan perintah di atas, kubectl mengirimkan permintaan HTTP POST ke titik akhir API di atas. Definisi ReplicaSet yang Anda berikan dalam file replicaset.yaml, dikirim dalam isi permintaan.

Beginilah cara kerja kubectl untuk semua perintah yang berinteraksi dengan cluster Kubernetes. Dalam semua kasus ini, kubectl hanya membuat permintaan HTTP ke endpoint API Kubernetes yang sesuai.

Harap dicatat bahwa Anda dapat mengelola Kubernetes sepenuhnya menggunakan utilitas seperti curldengan mengirimkan permintaan HTTP secara manual ke API Kubernetes. Kubectl mempermudah penggunaan API Kubernetes.

Inilah dasar-dasar kubectl dan cara kerjanya. Namun ada hal lain tentang Kubernetes API yang harus diketahui oleh setiap pengguna kubectl. Mari kita melihat sekilas dunia batin Kubernetes.

Dunia batin Kubernetes

Kubernetes terdiri dari sekumpulan komponen independen yang dijalankan sebagai proses terpisah pada node cluster. Beberapa komponen berjalan pada node master, yang lainnya pada node pekerja, masing-masing komponen menjalankan tugas spesifiknya sendiri.

Berikut adalah komponen terpenting pada node utama:

  1. gudang - menyimpan definisi sumber daya (biasanya itu dll).
  2. server API β€” menyediakan API dan mengelola penyimpanan.
  3. Manajer Pengendali β€” Memastikan status sumber daya sesuai dengan spesifikasi.
  4. Penjadwal β€” menjadwalkan pod pada node pekerja.

Dan inilah salah satu komponen terpenting pada node pekerja:

  1. kubelet β€” mengelola peluncuran kontainer pada node yang berfungsi.

Untuk memahami bagaimana komponen-komponen ini bekerja sama, mari kita lihat sebuah contoh.

Anggaplah Anda baru saja menyelesaikannya kubectl create -f replicaset.yaml, setelah itu kubectl membuat permintaan HTTP POST ke Titik akhir API ReplicaSet (melewati definisi sumber daya ReplicaSet).

Apa yang terjadi di cluster?

  1. Setelah melakukan kubectl create -f replicaset.yaml Server API menyimpan definisi sumber daya ReplicaSet Anda di penyimpanan:

    Cara menggunakan kubectl dengan lebih efektif: panduan terperinci

  2. Selanjutnya, pengontrol ReplicaSet diluncurkan di manajer pengontrol, yang menangani pembuatan, modifikasi, dan penghapusan sumber daya ReplicaSet:

    Cara menggunakan kubectl dengan lebih efektif: panduan terperinci

  3. Pengontrol ReplicaSet membuat definisi pod untuk setiap replika ReplicaSet (sesuai dengan templat pod dalam definisi ReplicaSet) dan menyimpannya di penyimpanan:

    Cara menggunakan kubectl dengan lebih efektif: panduan terperinci

  4. Penjadwal diluncurkan, melacak pod yang belum ditetapkan ke node pekerja mana pun:

    Cara menggunakan kubectl dengan lebih efektif: panduan terperinci

  5. Penjadwal memilih node pekerja yang sesuai untuk setiap pod dan menambahkan informasi ini ke definisi pod di penyimpanan:

    Cara menggunakan kubectl dengan lebih efektif: panduan terperinci

  6. Pada node pekerja dimana pod ditugaskan, Kubelet diluncurkan, ia melacak pod yang ditugaskan ke node ini:

    Cara menggunakan kubectl dengan lebih efektif: panduan terperinci

  7. Kubelet membaca definisi pod dari penyimpanan dan menginstruksikan runtime container, seperti Docker, untuk meluncurkan container pada node:

    Cara menggunakan kubectl dengan lebih efektif: panduan terperinci

Di bawah ini adalah versi teks dari deskripsi ini.

Permintaan API ke titik akhir pembuatan ReplicaSet diproses oleh server API. Server API mengautentikasi permintaan dan menyimpan definisi sumber daya ReplicaSet di penyimpanan.

Peristiwa ini memulai pengontrol ReplicaSet, yang merupakan subproses dari manajer pengontrol. Pengontrol ReplicaSet memantau pembuatan, pembaruan, dan penghapusan sumber daya ReplicaSet di penyimpanan dan menerima pemberitahuan peristiwa ketika hal ini terjadi.

Tugas pengontrol ReplicaSet adalah memastikan bahwa jumlah pod ReplicaSet yang diperlukan ada. Dalam contoh kita, belum ada pod, sehingga pengontrol ReplicaSet membuat definisi pod ini (sesuai dengan templat pod dalam definisi ReplicaSet) dan menyimpannya di penyimpanan.

Pembuatan pod baru dipicu oleh penjadwal yang melacak definisi pod yang belum dijadwalkan untuk node pekerja. Penjadwal memilih node pekerja yang sesuai untuk setiap pod dan memperbarui definisi pod di repositori.

Perhatikan bahwa hingga saat ini, tidak ada kode beban kerja yang berjalan di mana pun di cluster. Segala sesuatu yang telah dilakukan sejauh ini - ini adalah pembuatan dan pembaruan sumber daya dalam repositori di node utama.

Peristiwa terakhir memicu Kubelets, yang memantau pod yang dijadwalkan untuk node pekerjanya. Kubelet dari node pekerja tempat pod ReplicaSet Anda diinstal harus menginstruksikan runtime container, seperti Docker, untuk mendownload image container yang diperlukan dan menjalankannya.

Sampai di sini, aplikasi ReplicaSet Anda akhirnya berjalan!

Peran API Kubernetes

Seperti yang kamu lihat pada contoh sebelumnya, komponen Kubernetes (kecuali server API dan penyimpanan) mengamati perubahan pada sumber daya di penyimpanan dan mengubah informasi tentang sumber daya di penyimpanan.

Tentu saja komponen-komponen tersebut tidak berinteraksi dengan penyimpanan secara langsung, tetapi hanya melalui API Kubernetes.

Perhatikan contoh berikut:

  1. Pengontrol ReplicaSet menggunakan titik akhir API daftar ReplicaSet dengan parameter watch untuk memantau perubahan pada sumber daya ReplicaSet.
  2. Pengontrol ReplicaSet menggunakan titik akhir API membuat Pod (buat pod) untuk membuat pod.
  3. Penjadwal menggunakan titik akhir API tambalan pod (edit pod) untuk memperbarui pod dengan informasi tentang node pekerja yang dipilih.

Seperti yang bisa kamu lihat, ini adalah API yang sama yang diakses kubectl. Penggunaan API yang sama untuk komponen internal dan pengguna eksternal merupakan konsep dasar dalam desain Kubernetes.

Sekarang kita dapat meringkas cara kerja Kubernetes:

  1. Penyimpanan tersebut menyatakan, yaitu sumber daya Kubernetes.
  2. Server API menyediakan antarmuka ke penyimpanan dalam bentuk API Kubernetes.
  3. Semua komponen dan pengguna Kubernetes lainnya membaca, mengamati, dan memanipulasi status (sumber daya) Kubernetes melalui API.

Mengetahui konsep-konsep ini akan membantu Anda memahami kubectl dengan lebih baik dan memaksimalkannya.

Sekarang mari kita lihat beberapa tip dan trik khusus yang akan membantu meningkatkan produktivitas Anda dengan kubectl.

1. Mempercepat input menggunakan penyelesaian perintah

Salah satu teknik yang paling berguna, namun sering diabaikan, untuk meningkatkan kinerja dengan kubectl adalah penyelesaian perintah.

Penyelesaian perintah memungkinkan Anda menyelesaikan sebagian perintah kubectl secara otomatis menggunakan tombol Tab. Ini berfungsi untuk subperintah, opsi, dan argumen, termasuk sesuatu yang rumit seperti nama sumber daya.

Lihat cara kerja penyelesaian perintah kubectl:

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Penyelesaian perintah berfungsi untuk shell Bash dan Zsh.

Panduan resmi berisi petunjuk rinci untuk menyiapkan pelengkapan otomatis, namun di bawah ini kami akan memberikan kutipan singkatnya.

Cara kerja penyelesaian perintah

Penyelesaian perintah adalah fitur shell yang bekerja menggunakan skrip penyelesaian. Skrip ekstensi adalah skrip shell yang mendefinisikan perilaku ekstensi untuk perintah tertentu.

Kubectl secara otomatis membuat dan mengeluarkan skrip ekstensi untuk Bash dan Zsh menggunakan perintah berikut:

$ kubectl completion bash

Или:

$ kubectl completion zsh

Secara teori, cukup menghubungkan output dari perintah-perintah ini ke shell perintah yang sesuai sehingga kubectl dapat melengkapi perintah-perintah tersebut.

Dalam praktiknya, metode koneksi berbeda untuk Bash (termasuk perbedaan antara Linux dan MacOS) dan Zsh. Di bawah ini kita akan melihat semua opsi ini.

Pesta di Linux

Skrip penyelesaian Bash bergantung pada paket penyelesaian bash, jadi Anda perlu menginstalnya terlebih dahulu:

$ sudo apt-get install bash-completion

Или:

$ yum install bash-completion

Anda dapat menguji apakah paket berhasil diinstal menggunakan perintah berikut:

$ type _init_completion

Jika ini menghasilkan kode fungsi shell, maka penyelesaian bash diinstal dengan benar. Jika perintah memberikan kesalahan "Tidak Ditemukan", Anda perlu menambahkan baris berikut ke file Anda ~ / .bashrc:

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

Apakah perlu menambahkan baris ini ke file ~ / .bashrc atau tidak tergantung pada manajer paket yang Anda gunakan untuk menginstal penyelesaian bash. Hal ini diperlukan untuk APT, tetapi tidak untuk YUM.

Setelah menginstal bash-completion, Anda perlu mengonfigurasi semuanya agar skrip penyelesaian kubectl diaktifkan di semua sesi shell.

Salah satu cara untuk melakukannya adalah dengan menambahkan baris berikut ke file ~ / .bashrc:

source <(kubectl completion bash)

Cara lainnya adalah dengan menambahkan skrip ekstensi kubectl ke direktori /etc/bash_completion.d (buat jika belum ada):

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

Semua skrip tambahan di katalog /etc/bash_completion.d secara otomatis disertakan dalam penyelesaian bash.

Kedua opsi tersebut dapat diterapkan secara setara.

Setelah memulai ulang shell, penyelesaian perintah kubectl akan berfungsi.

Pesta di MacOS

Di MacOS, pengaturannya sedikit lebih rumit. Faktanya adalah secara default, MacOS menggunakan Bash versi 3.2, dan skrip pelengkapan otomatis kubectl memerlukan versi Bash minimal 4.1 dan tidak berfungsi di Bash 3.2.

Ada masalah lisensi yang terkait dengan penggunaan versi Bash yang sudah ketinggalan zaman di MacOS. Bash versi 4 dilisensikan di bawah GPLv3, yang tidak didukung oleh Apple.

Untuk mengonfigurasi pelengkapan otomatis kubectl di MacOS, Anda perlu menginstal Bash versi terbaru. Anda juga dapat mengatur Bash yang diperbarui sebagai shell default Anda, yang akan menyelamatkan Anda dari banyak masalah di masa depan. Tidak sulit, detailnya diberikan di artikel β€œMemperbarui Bash di MacOS'.

Sebelum melanjutkan, pastikan Anda menggunakan Bash versi terbaru (periksa hasilnya bash --version).

Skrip penyelesaian Bash bervariasi berdasarkan proyek penyelesaian bash, jadi Anda perlu menginstalnya terlebih dahulu.

Anda dapat menginstal penyelesaian bash menggunakan Sesuatu yg sederhana:

$ brew install bash-completion@2

Di sini @2 singkatan dari bash-completion versi 2. kubectl autocompletion memerlukan bash-completion v2, dan bash-completion v2 memerlukan minimal Bash versi 4.1.

Keluaran perintah brew-install berisi bagian Peringatan, yang menentukan apa yang perlu ditambahkan ke file ~/.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"

Namun, saya sarankan untuk tidak menambahkan baris ini ~/.bash_profile, dan dalam ~/.bashrc. Dalam hal ini, pelengkapan otomatis akan tersedia tidak hanya di main, tetapi juga di shell perintah anak.

Setelah memulai ulang shell perintah, Anda dapat memverifikasi kebenaran instalasi menggunakan perintah berikut:

$ type _init_completion

Jika Anda melihat fungsi shell di output, maka semuanya sudah dikonfigurasi dengan benar.

Sekarang kita perlu memastikan bahwa pelengkapan otomatis kubectl diaktifkan di semua sesi.

Salah satu caranya adalah dengan menambahkan baris berikut ke file Anda ~/.bashrc:

source <(kubectl completion bash)

Cara kedua adalah dengan menambahkan script autocomplete pada folder tersebut /usr/local/etc/bash_completion.d:

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

Metode ini hanya akan berfungsi jika Anda menginstal penyelesaian bash menggunakan Homebrew. Dalam hal ini, penyelesaian bash memuat semua skrip dari direktori ini.

Jika Anda menginstal kubectl menggunakan Homebrew, maka tidak perlu melakukan langkah sebelumnya, karena skrip pelengkapan otomatis akan otomatis ditempatkan di folder tersebut /usr/local/etc/bash_completion.d selama instalasi. Dalam hal ini, pelengkapan otomatis kubectl akan mulai bekerja segera setelah Anda menginstal penyelesaian bash.

Hasilnya, semua opsi ini setara.

Zsh

Skrip pelengkapan otomatis untuk Zsh tidak memerlukan ketergantungan apa pun. Yang perlu Anda lakukan adalah mengaktifkannya saat Anda memuat shell perintah.

Anda dapat melakukan ini dengan menambahkan baris ke file Anda ~/.zshrc mengajukan:

source <(kubectl completion zsh)

Jika Anda menerima kesalahan not found: compdef setelah memulai ulang shell Anda, Anda harus mengaktifkan fungsi bawaan compdef. Anda dapat mengaktifkannya dengan menambahkannya ke awal file Anda ~/.zshrc berikut ini:

autoload -Uz compinit
compinit

2. Melihat spesifikasi sumber daya dengan cepat

Saat Anda membuat definisi sumber daya YAML, Anda perlu mengetahui bidang dan artinya untuk sumber daya tersebut. Salah satu tempat untuk mencari informasi ini adalah di referensi API, yang berisi spesifikasi lengkap untuk semua sumber daya.

Namun, beralih ke browser web setiap kali Anda perlu mencari sesuatu tidaklah nyaman. Oleh karena itu kubectl memberikan perintah kubectl explain, yang menampilkan spesifikasi semua sumber daya langsung di terminal Anda.

Format perintahnya adalah sebagai berikut:

$ kubectl explain resource[.field]...

Perintah ini akan menampilkan spesifikasi sumber daya atau bidang yang diminta. Informasi yang ditampilkan sama dengan yang terdapat dalam manual API.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ kubectl explain hanya menampilkan bidang bersarang tingkat pertama.

Lihat seperti apa bentuknya Anda kemudian dapat.

Anda dapat menampilkan keseluruhan pohon jika Anda menambahkan opsi --recursive:

$ kubectl explain deployment.spec --recursive

Jika Anda tidak tahu persis sumber daya mana yang dibutuhkan, Anda dapat menampilkan semuanya dengan perintah berikut:

$ kubectl api-resources

Perintah ini menampilkan nama sumber daya dalam bentuk jamak, mis. deployments daripada deployment. Ini juga menampilkan nama pendek, misalnya deploy, untuk sumber daya yang memilikinya. Jangan khawatir tentang perbedaan-perbedaan ini. Semua opsi penamaan ini setara untuk kubectl. Artinya, Anda dapat menggunakan salah satu dari mereka untuk kubectl explain.

Semua perintah berikut ini setara:

$ kubectl explain deployments.spec
# ΠΈΠ»ΠΈ
$ kubectl explain deployment.spec
# ΠΈΠ»ΠΈ        
$ kubectl explain deploy.spec

3. Gunakan format keluaran kolom khusus

Format keluaran perintah default 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

Format ini nyaman, tetapi berisi informasi dalam jumlah terbatas. Dibandingkan dengan format definisi sumber daya lengkap, hanya beberapa bidang yang ditampilkan di sini.

Dalam hal ini, Anda bisa menggunakan format keluaran kolom kustom. Ini memungkinkan Anda menentukan data apa yang akan dikeluarkan. Anda dapat menampilkan bidang sumber daya apa pun sebagai kolom terpisah.

Penggunaan format khusus ditentukan menggunakan opsi:

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

Anda dapat menentukan setiap kolom keluaran sebagai pasangan <header>:<jsonpath>Dimana <header> adalah nama kolom, dan <jsonpath> β€” ekspresi yang mendefinisikan bidang sumber daya.

Mari kita lihat contoh sederhana:

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

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

Outputnya berisi satu kolom dengan nama pod.

Ekspresi opsi memilih nama pod dari kolom tersebut metadata.name. Hal ini karena nama pod ditentukan di kolom nama anak metadata dalam deskripsi sumber daya pod. Detail lebih lanjut dapat ditemukan di Panduan API atau ketikkan perintah kubectl explain pod.metadata.name.

Sekarang katakanlah Anda ingin menambahkan kolom tambahan pada output, misalnya menampilkan node yang menjalankan setiap pod. Untuk melakukan ini, Anda cukup menambahkan spesifikasi kolom yang sesuai ke opsi kolom khusus:

$ 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

Ekspresi memilih nama simpul dari spec.nodeName β€” ketika sebuah pod ditugaskan ke sebuah node, namanya ditulis di kolom tersebut spec.nodeName spesifikasi sumber daya pod. Informasi lebih rinci dapat ditemukan di output kubectl explain pod.spec.nodeName.

Harap dicatat bahwa kolom sumber daya Kubernetes peka terhadap huruf besar-kecil.

Anda dapat melihat bidang sumber daya apa pun sebagai kolom. Cukup tinjau spesifikasi sumber daya dan cobalah dengan bidang apa pun yang Anda suka.

Namun pertama-tama, mari kita lihat lebih dekat ekspresi pemilihan bidang.

Ekspresi JSONPath

Ekspresi untuk memilih bidang sumber daya didasarkan pada Jalur JSON.

JSONPath adalah bahasa untuk mengambil data dari dokumen JSON. Memilih satu bidang adalah kasus penggunaan paling sederhana untuk JSONPath. Dia punya banyak lebih banyak kemungkinan, termasuk penyeleksi, filter, dan sebagainya.

Kubectl menjelaskan mendukung sejumlah fitur JSONPath. Kemungkinan dan contoh penggunaannya dijelaskan di bawah ini:

# Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всС элСмСнты списка
$ 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'

Operator [] sangat penting. Banyak kolom sumber daya Kubernetes yang berupa daftar, dan operator ini memungkinkan Anda memilih anggota dari daftar tersebut. Ini sering digunakan dengan wildcard seperti [*] untuk memilih semua elemen daftar.

Contoh aplikasi

Kemungkinan untuk menggunakan format keluaran kolom kustom tidak terbatas, karena Anda dapat menampilkan bidang atau kombinasi bidang sumber daya apa pun dalam keluaran. Berikut adalah beberapa contoh aplikasi, namun silakan jelajahi sendiri dan temukan aplikasi yang sesuai untuk Anda.

  1. Menampilkan gambar container untuk pod:
    $ 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

    Perintah ini menampilkan nama image container untuk setiap pod.

    Ingatlah bahwa satu pod dapat berisi beberapa container, kemudian nama gambar akan ditampilkan dalam satu baris, dipisahkan dengan koma.

  2. Menampilkan zona ketersediaan node:
    $ 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

    Perintah ini berguna jika klaster Anda dihosting di cloud publik. Ini menampilkan zona ketersediaan untuk setiap node.

    Availability zone adalah konsep cloud yang membatasi zona replikasi pada suatu wilayah geografis.

    Zona ketersediaan untuk setiap node diperoleh melalui label khusus - failure-domain.beta.kubernetes.io/zone. Jika klaster berjalan di cloud publik, label ini dibuat secara otomatis dan diisi dengan nama zona ketersediaan untuk setiap node.

    Label bukan bagian dari spesifikasi sumber daya Kubernetes, jadi Anda tidak akan menemukan informasi tentang label tersebut Panduan API. Namun, label tersebut dapat dilihat (seperti label lainnya) jika Anda meminta informasi tentang node dalam format YAML atau JSON:

    $ kubectl get nodes -o yaml
    # ΠΈΠ»ΠΈ
    $ kubectl get nodes -o json

    Ini adalah cara terbaik untuk mempelajari lebih lanjut tentang sumber daya, selain spesifikasi sumber daya pembelajaran.

4. Beralih dengan mudah antara cluster dan namespace

Saat kubectl membuat permintaan ke API Kubernetes, kubectl membaca file kubeconfig terlebih dahulu untuk mendapatkan semua parameter yang diperlukan untuk koneksi.

Secara default file kubeconfig adalah ~/.kube/config. Biasanya file ini dibuat atau diperbarui dengan perintah khusus.

Saat kamu bekerja dengan beberapa cluster, file kubeconfig kamu berisi pengaturan untuk menghubungkan ke semua cluster tersebut. Anda memerlukan cara untuk memberi tahu perintah kubectl cluster mana yang sedang Anda kerjakan.

Dalam sebuah klaster, Anda dapat membuat beberapa namespaceβ€”sejenis klaster virtual dalam klaster fisik. Kubectl juga menentukan namespace mana yang akan digunakan berdasarkan file kubeconfig. Ini berarti kamu juga memerlukan cara untuk memberi tahu perintah kubectl namespace mana yang akan digunakan.

Dalam bab ini kami akan menjelaskan cara kerjanya dan cara membuatnya bekerja secara efektif.

Perhatikan bahwa Anda mungkin memiliki beberapa file kubeconfig yang terdaftar di variabel lingkungan KUBECONFIG. Dalam hal ini, semua file ini akan digabungkan menjadi satu konfigurasi umum saat runtime. Anda juga dapat mengubah file kubeconfig default dengan menjalankan kubectl dengan parameter --kubeconfig. Melihat dokumentasi resmi.

file kubeconfig

Mari kita lihat apa sebenarnya isi file kubeconfig:

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Seperti yang bisa kamu lihat, file kubeconfig berisi sekumpulan konteks. Konteks terdiri dari tiga elemen:

  • Cluster β€” URL API server cluster.
  • Pengguna - kredensial autentikasi pengguna di cluster.
  • Namespace - namespace yang digunakan saat bergabung dengan cluster.

Dalam praktiknya, mereka sering menggunakan satu konteks per cluster di kubeconfig mereka. Namun, Anda dapat memiliki beberapa konteks per klaster, yang dibedakan berdasarkan pengguna atau namespace. Namun, konfigurasi multikonteks ini jarang terjadi, sehingga biasanya terdapat pemetaan satu-ke-satu antara klaster dan konteks.

Pada waktu tertentu, salah satu konteksnya adalah yang terkini:

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Saat kubectl membaca file konfigurasi, ia selalu mengambil informasi dari konteks saat ini. Pada contoh di atas, kubectl akan terhubung ke cluster Hare.

Oleh karena itu, untuk beralih ke cluster lain, Anda perlu mengubah konteks saat ini di file kubeconfig:

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Sekarang kubectl akan terhubung ke cluster Fox.

Untuk beralih ke namespace berbeda di klaster yang sama, Anda perlu mengubah nilai elemen namespace untuk konteks saat ini:

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Pada contoh di atas, kubectl akan menggunakan namespace Prod cluster Fox (sebelumnya namespace Test telah ditetapkan).

Perhatikan bahwa kubectl juga menyediakan opsi --cluster, --user, --namespace ΠΈ --context, yang memungkinkan Anda untuk menimpa elemen individual dan konteks saat ini, terlepas dari apa yang diatur dalam kubeconfig. Lihat kubectl options.

Secara teori, Anda dapat mengubah pengaturan di kubeconfig secara manual. Tapi itu merepotkan. Untuk menyederhanakan operasi ini, terdapat berbagai utilitas yang memungkinkan Anda mengubah parameter secara otomatis.

Gunakan kubectx

Utilitas yang sangat populer untuk beralih antara cluster dan namespace.

Utilitas menyediakan perintah kubectx ΠΈ kubens untuk mengubah masing-masing konteks dan namespace saat ini.

Seperti disebutkan, mengubah konteks saat ini berarti mengubah klaster jika Anda hanya memiliki satu konteks per klaster.

Berikut adalah contoh menjalankan perintah ini:

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Pada dasarnya, perintah-perintah ini hanya mengedit file kubeconfig seperti dijelaskan di atas.

untuk memasang kubectx, ikuti petunjuk di Github.

Kedua perintah tersebut mendukung pelengkapan otomatis nama konteks dan namespace, sehingga menghilangkan kebutuhan untuk mengetikkannya sepenuhnya. Petunjuk untuk menyiapkan pelengkapan otomatis di sini.

Fitur berguna lainnya kubectx adalah mode interaktif. Ia bekerja sama dengan utilitas fzf, yang harus diinstal secara terpisah. Menginstal fzf secara otomatis membuat mode interaktif tersedia kubectx. Secara interaktif, Anda dapat memilih konteks dan namespace melalui antarmuka pencarian gratis interaktif yang disediakan oleh fzf.

Menggunakan alias shell

Anda tidak memerlukan alat terpisah untuk mengubah konteks dan namespace saat ini karena kubectl juga menyediakan perintah untuk ini. Ya, tim kubectl config menyediakan subperintah untuk mengedit file kubeconfig.

Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:

  • kubectl config get-contexts: menampilkan semua konteks;
  • kubectl config current-context: dapatkan konteks saat ini;
  • kubectl config use-context: mengubah konteks saat ini;
  • kubectl config set-context: Mengubah elemen konteks.

Namun, menggunakan perintah ini secara langsung sangat tidak nyaman karena panjangnya. Anda dapat membuat alias shell yang mudah dijalankan.

Saya membuat satu set alias berdasarkan perintah ini yang menyediakan fungsionalitas yang mirip dengan kubectx. Di sini Anda dapat melihatnya beraksi:

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Perhatikan bahwa alias menggunakan fzf untuk menyediakan antarmuka pencarian gratis yang interaktif (seperti mode interaktif kubectx). Ini berarti Anda membutuhkannya instal fzfuntuk menggunakan alias ini.

Berikut adalah definisi dari alias itu sendiri:

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ контСкст
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/^..//")"'

Untuk menyetel alias ini, Anda perlu menambahkan definisi di atas ke file Anda ~/.bashrc ΠΈΠ»ΠΈ ~/.zshrc dan reboot shell Anda.

Menggunakan plugin

Kubectl memungkinkan Anda memuat plugin yang dijalankan dengan cara yang sama seperti perintah dasar. Misalnya, Anda dapat menginstal plugin kubectl-foo dan menjalankannya dengan menjalankan perintah kubectl foo.

Akan lebih mudah untuk mengubah konteks dan namespace dengan cara ini, misalnya dengan menjalankan kubectl ctx untuk mengubah konteks dan kubectl ns untuk mengubah ruang nama.

Saya telah menulis dua plugin yang melakukan ini:

Pengoperasian plugin didasarkan pada alias dari bagian sebelumnya.

Berikut cara kerjanya:

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Perhatikan bahwa plugin menggunakan fzf untuk menyediakan antarmuka pencarian gratis yang interaktif (seperti mode interaktif kubectx). Ini berarti Anda membutuhkannya instal fzfuntuk menggunakan alias ini.

Untuk menginstal plugin, Anda perlu mengunduh skrip shell bernama kubectl-ctx ΠΈ kubectl-ns ke direktori mana pun di variabel PATH Anda dan membuatnya dapat dieksekusi dengan mis. chmod +x. Segera setelah ini Anda akan dapat menggunakannya kubectl ctx ΠΈ kubectl ns.

5. Kurangi input dengan autoaliase

Alias ​​​​Shell adalah cara yang baik untuk mempercepat input. Proyek kubectl-alias berisi sekitar 800 pintasan untuk perintah dasar kubectl.

Anda mungkin bertanya-tanya - bagaimana Anda mengingat 800 alias? Namun Anda tidak perlu mengingat semuanya, karena semuanya dibuat menurut skema sederhana, yang diberikan di bawah ini:

Cara menggunakan kubectl dengan lebih efektif: panduan terperinci
Sebagai contoh:

  1. kgpooyaml - kubectl dapatkan pod oyaml
  2. ksysgsvcw β€” kubectl -n kube-system dapatkan svc w
  3. ksysrmcm -kubectl -n kube-system rm cm
  4. kgdepallsl - kubectl dapatkan penerapan semua sl

Seperti yang bisa kamu lihat, alias terdiri dari komponen-komponen, yang masing-masing mewakili elemen tertentu dari perintah kubectl. Setiap alias dapat memiliki satu komponen untuk perintah dasar, operasi, dan sumber daya, serta beberapa komponen untuk parameter. Anda cukup β€œmengisi” komponen-komponen tersebut dari kiri ke kanan sesuai diagram di atas.

Diagram detail saat ini ada di GitHub. Di sana Anda juga dapat menemukannya daftar lengkap alias.

Misalnya, alias kgpooyamlall setara dengan perintah kubectl get pods -o yaml --all-namespaces.

Urutan relatif dari pilihan tidak penting: perintah kgpooyamlall setara dengan perintah kgpoalloyaml.

Anda tidak harus menggunakan semua komponen sebagai alias. Misalnya k, kg, klo, ksys, kgpo juga dapat digunakan. Selain itu, Anda dapat menggabungkan alias dan perintah atau opsi biasa pada baris perintah:

Sebagai contoh:

  1. Alih-alih kubectl proxy kamu bisa menulis k proxy.
  2. Alih-alih kubectl get roles kamu bisa menulis kg roles (saat ini tidak ada alias untuk sumber daya Peran).
  3. Untuk mendapatkan data untuk pod tertentu, Anda dapat menggunakan perintah kgpo my-pod β€” kubectl get pod my-pod.

Harap dicatat bahwa beberapa alias memerlukan argumen baris perintah. Misalnya alias kgpol sarana kubectl get pods -l. Pilihan -l memerlukan argumen - spesifikasi label. Kalau pakai alias akan terlihat seperti ini kgpol app=ui.

Karena beberapa alias memerlukan argumen, alias a, f, dan l harus digunakan terakhir.

Secara umum, setelah Anda memahami skema ini, Anda dapat secara intuitif mendapatkan alias dari perintah yang ingin Anda jalankan dan menghemat banyak waktu mengetik.

Instalasi

Untuk menginstal kubectl-alias, Anda perlu mengunduh filenya .kubectl_aliases dari GitHub dan sertakan dalam file ~/.bashrc ΠΈΠ»ΠΈ ~/.zshrc:

source ~/.kubectl_aliases

Pelengkapan otomatis

Seperti yang kami katakan sebelumnya, Anda sering menambahkan kata tambahan ke alias di baris perintah. Misalnya:

$ kgpooyaml test-pod-d4b77b989

Jika Anda menggunakan penyelesaian perintah kubectl, Anda mungkin menggunakan pelengkapan otomatis untuk hal-hal seperti nama sumber daya. Namun bisakah hal ini dilakukan bila alias digunakan?

Ini adalah pertanyaan yang sangat penting karena jika pelengkapan otomatis tidak berfungsi, Anda akan kehilangan sebagian manfaat alias.

Jawabannya tergantung pada shell yang Anda gunakan:

  1. Untuk Zsh, penyelesaian alias berhasil di luar kotak.
  2. Sayangnya, untuk Bash, beberapa pekerjaan diperlukan agar pelengkapan otomatis berfungsi.

Mengaktifkan pelengkapan otomatis untuk alias di Bash

Masalah dengan Bash adalah ia mencoba menyelesaikan (setiap kali Anda menekan Tab) alias, bukan perintah yang dirujuk oleh alias tersebut (seperti yang dilakukan Zsh, misalnya). Karena Anda tidak memiliki skrip penyelesaian untuk 800 alias semuanya, pelengkapan otomatis tidak berfungsi.

Proyek alias lengkap memberikan solusi umum untuk masalah ini. Ini terhubung ke mekanisme penyelesaian untuk alias, secara internal memperluas alias ke sebuah perintah, dan mengembalikan opsi penyelesaian untuk perintah yang telah diselesaikan. Ini berarti padding untuk alias berperilaku sama persis dengan perintah lengkap.

Berikut ini, pertama-tama saya akan menjelaskan cara menginstal alias lengkap dan kemudian cara mengkonfigurasinya untuk mengaktifkan penyelesaian semua alias kubectl.

Menginstal alias lengkap

Pertama-tama, alias lengkap bergantung pada penyelesaian bash. Oleh karena itu, sebelum menginstal alias lengkap, Anda perlu memastikan bahwa penyelesaian bash telah diinstal. Petunjuk instalasi telah disediakan sebelumnya untuk Linux dan MacOS.

Catatan Penting untuk Pengguna MacOS: Seperti skrip pelengkapan otomatis kubectl, alias lengkap tidak berfungsi dengan Bash 3.2, yang merupakan default di MacOS. Secara khusus, alias lengkap bergantung pada bash-completion v2 (brew install bash-completion@2), yang membutuhkan setidaknya Bash 4.1. Artinya, untuk menggunakan alias lengkap di MacOS, Anda perlu menginstal Bash versi terbaru.

Anda perlu mengunduh skripnya bash_completion.sh dari Repositori GitHub dan sertakan dalam file Anda ~/.bashrc:

source ~/bash_completion.sh

Setelah me-reboot shell, alias lengkap akan terinstal sepenuhnya.

Mengaktifkan pelengkapan otomatis untuk alias kubectl

Alias ​​​​lengkap secara teknis menyediakan fungsi pembungkus _complete_alias. Fungsi ini memeriksa alias dan mengembalikan petunjuk penyelesaian untuk perintah alias.

Untuk mengaitkan suatu fungsi dengan alias tertentu, Anda perlu menggunakan mekanisme Bash bawaan lengkap, untuk memasang _complete_alias sebagai fungsi penyelesaian alias.

Sebagai contoh, mari kita ambil alias k, yang merupakan singkatan dari perintah kubectl. untuk memasang _complete_alias Sebagai fungsi pelengkap alias ini, Anda harus menjalankan perintah berikut:

$ complete -F _complete_alias k

Hasilnya adalah setiap kali Anda melengkapi alias k secara otomatis, fungsinya akan dipanggil _complete_alias, yang memeriksa alias dan mengembalikan petunjuk penyelesaian untuk perintah tersebut kubectl.

Sebagai contoh kedua, mari kita ambil aliasnya kg, yang menunjukkan kubectl get:

$ complete -F _complete_alias kg

Sama seperti contoh sebelumnya, saat Anda melengkapi kg secara otomatis, Anda mendapatkan petunjuk penyelesaian yang sama seperti yang Anda dapatkan kubectl get.

Perhatikan bahwa Anda dapat menggunakan alias lengkap untuk alias apa pun di sistem Anda.

Oleh karena itu, untuk mengaktifkan pelengkapan otomatis untuk semua alias kubectl, Anda perlu menjalankan perintah di atas untuk masing-masing alias. Cuplikan berikut melakukan hal ini, asalkan Anda telah menyetel kubectl-aliases ke ~/.kubectl-aliases:

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

Potongan kode ini perlu ditempatkan di file ~/.bashrc, mulai ulang shell perintah dan pelengkapan otomatis akan tersedia untuk 800 alias kubectl.

6. Memperluas kubectl dengan plugin

Mulai dari versi 1.12, kubectl mendukung mekanisme plugin, yang memungkinkan Anda memperluas fungsinya dengan perintah tambahan.

Jika Anda akrab dengan Mekanisme plugin Git, maka plugin kubectl dibuat dengan prinsip yang sama.

Dalam bab ini, kita akan membahas cara memasang plugin, di mana menemukannya, dan cara membuat plugin Anda sendiri.

Menginstal plugin

Plugin Kubectl didistribusikan sebagai file sederhana yang dapat dieksekusi dengan nama like kubectl-x. Awalan kubectl- diperlukan, diikuti dengan subperintah kubectl baru yang memungkinkan Anda memanggil plugin.

Misalnya, plugin hello akan didistribusikan sebagai file bernama kubectl-hello.

Untuk menginstal plugin, Anda perlu menyalin file kubectl-x ke direktori mana pun di PATH Anda dan membuatnya dapat dieksekusi, misalnya dengan chmod +x. Segera setelah ini Anda dapat memanggil plugin dengan kubectl x.

Anda dapat menggunakan perintah berikut untuk mencantumkan semua plugin yang saat ini terinstal di sistem Anda:

$ kubectl plugin list

Perintah ini juga akan menampilkan peringatan jika Anda memiliki beberapa plugin dengan nama yang sama, atau jika ada file plugin yang tidak dapat dieksekusi.

Menemukan dan menginstal plugin menggunakan Krew

Plugin Kubectl dapat dibagikan atau digunakan kembali seperti paket perangkat lunak. Namun di mana Anda dapat menemukan plugin yang telah dibagikan orang lain?

Kru Proyek bertujuan untuk memberikan solusi terpadu untuk berbagi, mencari, menginstal dan mengelola plugin kubectl. Proyek ini menyebut dirinya sebagai "manajer paket untuk plugin kubectl" (Krew mirip dengan Buatan).

Krew adalah daftar plugin kubectl yang dapat Anda pilih dan instal. Pada saat yang sama, Krew juga merupakan plugin untuk kubectl.

Ini berarti menginstal Krew pada dasarnya berfungsi seperti menginstal plugin kubectl lainnya. Anda dapat menemukan petunjuk rinci di halaman GitHub.

Perintah Krew yang paling penting adalah:

# Поиск в спискС плагинов
$ kubectl krew search [<query>]
# ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π΅
$ kubectl krew info <plugin>
# Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½
$ kubectl krew install <plugin>
# ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ Π΄ΠΎ послСднСй вСрсии
$ kubectl krew upgrade
# ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹, установлСнныС Ρ‡Π΅Ρ€Π΅Π· Krew
$ kubectl krew list
# Π”Π΅ΠΈΠ½ΡΡ‚Π°Π»Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½
$ kubectl krew remove <plugin>

Perlu diketahui bahwa menginstal plugin menggunakan Krew tidak mengganggu instalasi plugin menggunakan metode standar yang dijelaskan di atas.

Harap dicatat bahwa perintahnya kubectl krew list hanya menampilkan plugin yang diinstal menggunakan Krew, sedangkan perintahnya kubectl plugin list mencantumkan semua plugin, yaitu yang diinstal menggunakan Krew dan yang diinstal dengan metode lain.

Menemukan Plugin di Tempat Lain

Krew adalah proyek muda, yang saat ini sedang dalam tahap pengembangan Daftar hanya sekitar 30 plugin. Jika Anda tidak dapat menemukan yang Anda perlukan, Anda dapat menemukan plugin di tempat lain, seperti GitHub.

Saya sarankan melihat bagian GitHub kubectl-plugin. Di sana Anda akan menemukan lusinan plugin yang layak untuk dicoba.

Menulis plugin Anda sendiri

kamu sendiri bisa membuat plugin - Ini tidak sulit. Anda perlu membuat executable yang melakukan apa yang Anda butuhkan, beri nama sesuai keinginan kubectl-x dan instal seperti dijelaskan di atas.

File tersebut bisa berupa skrip bash, skrip python, atau aplikasi GO yang dikompilasi - tidak masalah. Syaratnya hanya bisa langsung dijalankan di sistem operasi.

Mari kita buat contoh plugin sekarang. Di bagian sebelumnya, Anda menggunakan perintah kubectl untuk membuat daftar container untuk setiap pod. Sangat mudah untuk mengubah perintah ini menjadi plugin yang dapat Anda panggil misalnya. kubectl img.

Buat berkas kubectl-img konten berikut:

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

Sekarang buat file tersebut dapat dieksekusi dengan chmod +x kubectl-img dan pindahkan ke direktori mana pun di PATH Anda. Segera setelah ini Anda dapat menggunakan plugin tersebut kubectl img.

Seperti disebutkan, plugin kubectl dapat ditulis dalam bahasa pemrograman atau skrip apa pun. Jika Anda menggunakan skrip shell, keuntungannya adalah dapat memanggil kubectl dengan mudah dari dalam plugin. Namun, Anda dapat menulis plugin yang lebih kompleks dalam bahasa pemrograman nyata menggunakan Perpustakaan klien Kubernetes. Jika Anda menggunakan Go, Anda juga bisa menggunakan perpustakaan waktu proses klien, yang khusus dibuat untuk menulis plugin kubectl.

Cara membagikan plugin Anda

Jika menurut Anda plugin Anda dapat bermanfaat bagi orang lain, silakan bagikan di GitHub. Pastikan untuk menambahkannya ke topik kubectl-plugin.

Anda juga dapat meminta agar plugin Anda ditambahkan Daftar kru. Petunjuk tentang cara melakukan ini ada di Repositori GitHub.

Penyelesaian perintah

Plugin saat ini tidak mendukung pelengkapan otomatis. Artinya, Anda harus memasukkan nama lengkap plugin dan nama lengkap argumennya.

Ada kubectl di repositori GitHub untuk fungsi ini permintaan terbuka. Jadi kemungkinan besar fitur ini akan diimplementasikan suatu saat nanti.

Good luck!

Apa lagi yang harus dibaca tentang topik tersebut:

  1. Tiga tingkat penskalaan otomatis di Kubernetes dan cara menggunakannya secara efektif.
  2. Kubernetes dalam semangat pembajakan dengan template untuk implementasi.
  3. Saluran kami Seputar Kubernetes di Telegram.

Sumber: www.habr.com

Tambah komentar