Membuat Daftar Semua Image Container yang Berjalan dalam Klaster

Laman ini menunjukkan cara menggunakan kubectl untuk membuat daftar semua image Container untuk Pod yang berjalan dalam sebuah klaster.

Sebelum kamu memulai

Kamu harus memiliki klaster Kubernetes, dan perangkat baris perintah kubectl juga harus dikonfigurasikan untuk berkomunikasi dengan klastermu. Jika kamu belum memiliki klaster, kamu dapat membuatnya dengan menggunakan minikube, atau kamu juga dapat menggunakan salah satu dari tempat mencoba Kubernetes berikut ini:

Untuk melihat versi, tekan kubectl version.

Dalam latihan ini kamu akan menggunakan kubectl untuk mengambil semua Pod yang berjalan dalam sebuah klaster, dan mengubah format keluarannya untuk melihat daftar Container untuk masing-masing Pod.

Membuat daftar semua image Container pada semua Namespace

  • Silakan ambil semua Pod dalam Namespace dengan menggunakan perintah kubectl get pods --all-namespaces
  • Silakan format keluarannya agar hanya menyertakan daftar nama image dari Container dengan menggunakan perintah -o jsonpath={.items[*].spec.containers[*].image}. Perintah ini akan mem-parsing field image dari keluaran json yang dihasilkan.
    • Silakan lihat referensi jsonpath untuk informasi lebih lanjut tentang cara menggunakan jsonpath.
  • Silakan format keluaran dengan menggunakan peralatan standar: tr, sort, uniq
    • Gunakan tr untuk mengganti spasi dengan garis baru
    • Gunakan sort untuk menyortir hasil
    • Gunakan uniq untuk mengumpulkan jumlah image
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c

Perintah di atas secara berulang akan mengembalikan semua field bernama image dari semua poin yang dikembalikan.

Sebagai pilihan, dimungkinkan juga untuk menggunakan jalur (path) absolut ke field image di dalam Pod. Hal ini memastikan field yang diambil benar bahkan ketika nama field tersebut diulangi, misalnya banyak field disebut dengan name dalam sebuah poin yang diberikan:

kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}"

Jsonpath dapat diartikan sebagai berikut:

  • .items[*]: untuk setiap nilai yang dihasilkan
  • .spec: untuk mendapatkan spesifikasi
  • .containers[*]: untuk setiap Container
  • .image: untuk mendapatkan image
Catatan: Pada saat mengambil sebuah Pod berdasarkan namanya, misalnya kubectl get pod nginx, bagian .items[*] dari jalur harus dihilangkan karena hanya akan menghasilkan sebuah Pod sebagai keluarannya, bukan daftar dari semua Pod.

Membuat daftar image Container berdasarkan Pod

Format dapat dikontrol lebih lanjut dengan menggunakan operasi range untuk melakukan iterasi untuk setiap elemen secara individual.

kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort

Membuat daftar image yang difilter berdasarkan label dari Pod

Untuk menargetkan hanya Pod yang cocok dengan label tertentu saja, gunakan tanda -l. Filter dibawah ini akan menghasilkan Pod dengan label yang cocok dengan app=nginx.

kubectl get pods --all-namespaces -o=jsonpath="{.items[*].spec.containers[*].image}" -l app=nginx

Membuat daftar image Container yang difilter berdasarkan Namespace Pod

Untuk hanya menargetkan Pod pada Namespace tertentu, gunakankan tanda Namespace. Filter dibawah ini hanya menyaring Pod pada Namespace kube-system.

kubectl get pods --namespace kube-system -o jsonpath="{.items[*].spec.containers[*].image}"

Membuat daftar image Container dengan menggunakan go-template sebagai alternatif dari jsonpath

Sebagai alternatif untuk jsonpath, kubectl mendukung penggunaan go-template untuk memformat keluaran seperti berikut:

kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"

Selanjutnya

Referensi

Last modified August 13, 2021 at 2:13 AM PST : [id] Fix list all uniq container images (74d7ad311)