Плагин для kubectl, который позволяет работать с ресурсами Kubernetes в духе утилиты UNIX find.
Искать ресурсы можно по:
-
регулярному выражению в имени
-
возрасту
-
меткам (labels)
-
статусу
-
имени узла (только для подов)
-
количеству перезапусков (только для подов)
-
имени образа (только для подов)
-
jq-фильтру — произвольному условию
После поиска найденные ресурсы можно вывести, изменить (patch), аннотировать или удалить.
Использование
kubectl fd [тип ресурса | pods] [флаги]
Флаги:
-r, --name string Регулярное выражение для фильтрации ресурсов по имени; если не указано — возвращаются все ресурсы заданного типа.
-n, --namespace string Пространство имён для данного запроса.
-A, --all-namespaces Поиск во всех пространствах имён; если не указано — поиск только в текущем.
--status string Фильтрация подов по статусу (фазе): 'Running', 'Pending', 'Succeeded', 'Failed', 'Unknown'.
--image string Регулярное выражение для фильтрации по именам образов контейнеров.
-j, --jq string jq-выражение для фильтрации ресурсов; использует библиотеку gojq.
--restarted Найти поды, перезапускавшиеся хотя бы один раз.
-l, --selector string Селектор меток для фильтрации ресурсов.
--max-age string Фильтрация по максимальному возрасту; например, '2d' — 2 дня, '3h' — 3 часа.
--min-age string Фильтрация по минимальному возрасту; например, '2d' — 2 дня, '3h' — 3 часа.
--node string Фильтрация подов по регулярному выражению для имени узла; использует pod.Spec.NodeName или pod.Status.NominatedNodeName, если первое пустое.
-L, --labels strings Список меток через запятую для отображения в выводе.
-T, --annotations strings Список аннотаций через запятую для отображения в выводе.
-N, --node-labels strings Список меток узла через запятую для отображения в выводе.
--natural-sort Сортировать имена ресурсов в естественном порядке.
-h, --help Справка по kubectl find.
-p, --patch string Применить указанный JSON-патч ко всем найденным ресурсам.
-e, --exec string Выполнить команду на всех найденных подах.
--annotate string Аннотировать все найденные ресурсы; формат: k=v[,k2=v2] для добавления/обновления или k- для удаления аннотаций.
--delete Удалить все совпавшие ресурсы.
-y, --skip-confirm Не запрашивать подтверждение перед выполнением действий над ресурсами.
--force Немедленно удалить ресурсы через API, минуя мягкое удаление. Работает только вместе с флагом --delete.
Установка
Через krew
krew install fd
Скачать бинарный файл
Скачайте последний релиз для вашей платформы и операционной системы и сохраните файл под именем kubectl-fd в одной из директорий $PATH.
Примеры
Фильтрация через jq
Использует реализацию jq на основе gojq.
Структуру ресурсов можно изучить на kubespec.dev.
Найти поды с пустым nodeSelector
kubectl fd pods -j '.spec.nodeSelector == null' -A
Найти поды с неопределёнными ресурсами
kubectl fd pods -j 'any( .spec.containers[]; .resources == {} )' -A
Фильтрация по регулярному выражению
Вместо
kubectl get pods -o name | grep test
используйте
kubectl fd -r test
Фильтрация по возрасту ресурса
kubectl fd cm --min-age 1d -A --name spark
Выполнение команды на нескольких подах
kubectl fd pods -l app=nginx --exec 'nginx -s reload'
Найти все упавшие поды и удалить их
kubectl fd pods --status failed -A --delete
Аннотирование ресурсов
Добавить аннотации к найденным подам
kubectl fd pods -r nginx --annotate 'team=backend,env=production'
Удалить аннотацию у всех совпавших подов
kubectl fd pods --status Running --annotate 'deprecated-'
Одновременное добавление и удаление аннотаций
kubectl fd pods -l app=nginx --annotate 'owner=team-a,old-owner-'
Найти перезапускавшиеся поды
kubectl fd --restarted
Расширенный вывод
Показать метки ресурсов
k fd -L app.kubernetes.io/component
NAME READY STATUS RESTARTS AGE COMPONENT
admin-backend-server-6fb6bbb8f6-2xntp 1/1 Running 0 7h4m deployments-server
admin-frontend-nginx-b8c88b7b4-pxx2x 1/1 Running 0 3h7m deployments-nginx
top-react-ok-app-develop-nginx-586c65496f-h4b9p 1/1 Running 0 11h deployments-nginx
top-react-ok-app-stage-nginx-8595cbfb6c-qzt2z 1/1 Running 0 11h deployments-nginx
nginx 1/1 Running 0 18d <none>
redis-redis-ha-server-0 1/1 Running 0 11h <none>
super-admin-server-65d57f8787-5c9sd 1/1 Running 0 11h deployments-server
ok-web-app-nginx-5c78887cbf-2n8fw 1/1 Running 0 11h deployments-nginx
Показать метки узлов для подов
k fd -N topology.kubernetes.io/zone
NAME READY STATUS RESTARTS AGE NODE ZONE
admin-backend-server-6fb6bbb8f6-2xntp 1/1 Running 0 7h5m nodeee-short-2 eu-central1-b
admin-frontend-nginx-b8c88b7b4-pxx2x 1/1 Running 0 3h8m nodeee-short-2 eu-central1-b
top-react-ok-app-develop-nginx-586c65496f-h4b9p 1/1 Running 0 11h nodeee-short-2 eu-central1-b
top-react-ok-app-stage-nginx-8595cbfb6c-qzt2z 1/1 Running 0 11h nodeee-short-2 eu-central1-b
nginx 1/1 Running 0 18d nodeee-long-3 eu-central1-b
redis-redis-ha-server-0 1/1 Running 0 11h nodeee-short-2 eu-central1-b
super-admin-server-65d57f8787-5c9sd 1/1 Running 0 11h nodeee-short-2 eu-central1-b
ok-web-app-nginx-5c78887cbf-2n8fw 1/1 Running 0 11h nodeee-short-2 eu-central1-b
zipkin-ok-shop-zipkin-5d94fcdc67-r8pcx 1/1 Running 0 10d nodeee-long-1 eu-central1-b
Показать аннотации ресурсов
k fd -T example.com/owner
NAME READY STATUS RESTARTS AGE OWNER
admin-backend-server-6fb6bbb8f6-2xntp 1/1 Running 0 7h4m team-a
admin-frontend-nginx-b8c88b7b4-pxx2x 1/1 Running 0 3h7m team-b
top-react-ok-app-develop-nginx-586c65496f-h4b9p 1/1 Running 0 11h team-a
nginx 1/1 Running 0 18d <none>
Естественная сортировка (natural sort)
Обычная сортировка:
kubectl fd
NAME READY STATUS RESTARTS AGE
nginx-0 1/1 Running 0 5m14s
nginx-1 1/1 Running 0 5m12s
nginx-10 1/1 Running 0 4m53s
nginx-11 1/1 Running 0 4m50s
nginx-12 1/1 Running 0 4m48s
nginx-13 1/1 Running 0 4m46s
nginx-14 1/1 Running 0 4m44s
nginx-2 1/1 Running 0 5m10s
nginx-3 1/1 Running 0 5m7s
nginx-4 1/1 Running 0 5m5s
nginx-5 1/1 Running 0 5m3s
nginx-6 1/1 Running 0 5m1s
nginx-7 1/1 Running 0 4m59s
nginx-8 1/1 Running 0 4m57s
nginx-9 1/1 Running 0 4m55s
Естественная сортировка:
kubectl fd --natural-sort
NAME READY STATUS RESTARTS AGE
nginx-0 1/1 Running 0 6m6s
nginx-1 1/1 Running 0 6m4s
nginx-2 1/1 Running 0 6m2s
nginx-3 1/1 Running 0 5m59s
nginx-4 1/1 Running 0 5m57s
nginx-5 1/1 Running 0 5m55s
nginx-6 1/1 Running 0 5m53s
nginx-7 1/1 Running 0 5m51s
nginx-8 1/1 Running 0 5m49s
nginx-9 1/1 Running 0 5m47s
nginx-10 1/1 Running 0 5m45s
nginx-11 1/1 Running 0 5m42s
nginx-12 1/1 Running 0 5m40s
nginx-13 1/1 Running 0 5m38s
nginx-14 1/1 Running 0 5m36s
Автодополнение
Скопируйте скрипт kubectl_complete-fd в любую директорию, входящую в PATH.