Отримання переліку всіх образів контейнерів, що працюють у кластері
Ця сторінка показує, як використовувати kubectl для отримання переліку всіх образів контейнерів для Podʼів, що працюють у кластері.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введітьkubectl version
.У цьому завданні ви використовуватимете kubectl для отримання всіх Podʼів, що працюють у кластері, і форматування виводу для отримання списку контейнерів для кожного з них.
Перелік всіх образів контейнерів у всіх просторах імен
- Отримайте всі Podʼи у всіх просторах імен за допомогою
kubectl get pods --all-namespaces
. - Форматуйте вивід для включення лише списку імен образів контейнерів, використовуючи
-o jsonpath={.items[*].spec['initContainers', 'containers'][*].image}
. Це рекурсивно розбирає полеimage
з отриманого JSON.- Ознайомтеся з довідником по jsonpath для додаткової інформації про використання jsonpath.
- Форматуйте вивід за допомогою стандартних інструментів:
tr
,sort
,uniq
.- Використовуйте
tr
для заміни пробілів на нові рядки. - Використовуйте
sort
для сортування результатів. - Використовуйте
uniq
для агрегування кількості образів.
- Використовуйте
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
Jsonpath інтерпретується наступним чином:
.items[*]
: для кожного отриманого значення..spec
: отримати spec.['initContainers', 'containers'][*]
: для кожного контейнера..image
: отримати образ.
Примітка:
При отриманні одного Podʼа за іменем, наприклад,kubectl get pod nginx
, частину шляху .items[*]
слід опустити, оскільки повертається один Pod, а не список елементів.Отримання переліку образів контейнерів в розрізі Podʼів
Форматування може бути додатково налаштоване за допомогою операції range
для ітерації по елементах індивідуально.
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
Отримання переліку образів контейнерів за мітками Podʼів
Щоб опрацьовувати лише Podʼи, які відповідають конкретній мітці, використовуйте прапорець -l. Наступне відповідає збігам лише для Podʼів з мітками, що відповідають app=nginx
.
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" -l app=nginx
Отримання переліку образів контейнерів в розрізі просторів імен Podʼів
Щоб опрацьовувати лише Podʼи в конкретному просторі імен, використовуйте прапорець namespace. Наступне відповідає збігам лише для Podʼів у просторі імен kube-system
.
kubectl get pods --namespace kube-system -o jsonpath="{.items[*].spec.containers[*].image}"
Отримання переліку образів контейнерів з використанням go-template замість jsonpath
Як альтернативу jsonpath, Kubectl підтримує використання go-templates для форматування виходу:
kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"