Kubernetes: менеджер плагинов Krew и полезные плагины для kubectl

Автор: | 10/01/2021
 

Одна из наиболее приятных возможностей kubectl — это его расширяемость за счёт плагинов.

Конечно, есть Lens, который прям отлично заходит разработчикам, которые не очень любят консоль, или есть k9s, но плагины kubectl — отдельная тема.

В этом посте установим Krew для управления плагинами, и рассмотрим несколько наиболее интересных, с моей личной точки зрения, плагинов.

Krew — менеджер плагинов kubectl

Сравнительно недавно для kubectl появился даже свой менеджер плагинов — krew.

У него есть свой репозиторий плагинов, из которого можно установить новый плагин, он же позволяет выполнять их обновление и удаление.

На Arch Linux можно установить из AUR:

Arch Linux:

yay -S krew

Обновляем список пакетов:

kubectl krew update

Ищем пакет:

kubectl krew search topology
NAME      DESCRIPTION                                INSTALLED
topology  Explore region topology for nodes or pods  no

Устанавливаем его:

kubectl krew install topology
Updated the local copy of plugin index.
Upgrades available for installed plugins:
* rbac-tool v1.2.1 -> v1.3.0
Installing plugin: topology
Installed plugin: topology
\
| Use this plugin:
|      kubectl topology
| Documentation:
|      https://github.com/bmcustodio/kubectl-topology
/

И проверяем:

kubectl topology help
Provides insight into the topology of a Kubernetes cluster.
Usage:
kubectl-topology [command]
Available Commands:
help        Help about any command
node        Provides insight into the distribution of nodes per region or zone.
pod         Provides insight into the distribution of pods per region or zone.

Полезные плагины

В конце поста будет несколько ссылок на другие подобные коллекции плагинов, а ниже — те, которые я использую для работы.

kubectl-topology

Начнём с плагина kubectl-topology, который позволяет вывести список всех WorkerNodes, их регионов и подов на каждой ноде:

kubectl-resources

Плагин kubectl-resources позволяет вывести информацию о лимитах и используемых ресурсах.

Устанавливаем с помощью Go:

go get github.com/howardjohn/kubectl-resources

kubectl-free

Плагин kubectl-free работает аналогично утилите free в Linux — выводит информацию о свободных и занятых ресурсах на нодах.

Устанавливаем — загружаем последний архив со страницы релизов, распаковываем, копируем в /usr/local/bin:

cd /tmp/
wget https://github.com/makocchi-git/kubectl-free/releases/download/v0.2.0/kubectl-free_0.2.0_Linux_x86_64.zip
unzip kubectl-free_0.2.0_Linux_x86_64.zip
sudo cp kubectl-free_0.2.0_Linux_x86_64/kubectl-free /usr/local/bin/

И его работа:

kubecolor

Плагин kubecolor улучшает читабельность в консоли — добавляет цвета в вывод kubectl.

Устанавливаем с Go:

go install github.com/dty1er/kubecolor/cmd/kubecolor@latest

В ~/.bashrc добавляем алиас:

alias kk="kubecolor"

Результат:

kubectl-watch

Улучшенный вариант kubectl --watch. Страница проекта тут>>>.

Устанавливаем:

git clone https://github.com/lee0c/kubectl-watch.git
cd kubectl-watch
chmod +x kubectl-watch
sudo mv  kubectl-watch /usr/local/bin/

Проверяем:

kubectl plugin list
The following kubectl-compatible plugins are available:
/usr/local/bin/kubectl-watch
...

И запускаем:

kubectl-clogs

Продвинутый просмотр логов. Аналогичен работе kubectl logs -f, но можно получать логи всех подов в конкретном нейспспейсе. Страница проекта тут>>>.

Устанавливаем:

go install github.com/ivkalita/kubectl-clogs/cmd/kubectl-clogs@latest

Смотрим логи всех подов в неймспейсе istio-system:

kubectl-who-can

kubectl-who-can позволяет проверить RBAC-роли и доступы.

Устанавливаем с Krew:

kubectl krew install who-can

Проверяем — кто может удалять поды в неймспейсе default:

kubectl-rolesum

kubectl-rolesum также используется для работы с Kubernetes RBAC — проверка прав доступов.

Устанавливаем:

kubectl krew install rolesum

И проверим доступы для ServiceAccount kiali-service-account в неймспейсе istio-system:

ketall

ketall выводит действительно все ресурсы, включая Secrets, ServiceAccount, роли, биндинги и т.д., а не только Pod, Service, Daemonset, Deployment и ReplicaSet, как это делает дефолтный kubectl get all.

Устанавливаем:

kubectl krew install get-all

Пример kubectl get all:

И с ketallkubectl get-all:

kubectl-status

kubectl-status выводит расширенную информацию о статусах подов, нод, деплойментов, сервисов и так далее.

Устанавливаем:

kubectl krew install status

И проверим статус Kubernetes WorkerNode, у которых задана лейбла role: data-workers:

Pod-Dive

Pod-Dive выводит расширенную информацию о поде — нода, неймспейс, контейнеры и поды, работающие на той же WorkerNode.

Устанавливаем:

kubectl krew install pod-dive

И проверим под:

kubectl-janitor

kubectl-janitor — «дворник» для кластера. Позволяет находить проблемные ресурсы, такие как незашедуленные поды, джобы и диски.

Устанавливаем:

kubectl krew install janitor

И находим все поды, которым не нашлось WorkerNode:

kubectl-cf

И последний на сегодня плагин — kubectl-cf.

Вообще, очень много плагинов для работы с контекстами и неймспейсами, но лично я пользуюсь отдельными файлами для различных кластеров, а не контекстами в ~/.kube/config:

ls -1 ~/.kube/ | grep kubeconfig
dev-1-18.kubeconfig
prod-1-18.kubeconfig
stage-1-18.kubeconfig
test-1-18.kubeconfig

Для быстрого переключения между ними можно использовать kubectl-cf, который через создание симлинков с ~/.kube/config переключает файлы.

Для его работы всем файлам требуется расширение .kubeconfig.

Устанавливаем — качаем репозиторий, собираем из исходника, копируем в /usr/local/bin:

git clone https://github.com/spongeprojects/kubectl-cf.git
cd kubectl-cf/
go build -o kubectl-cf
sudo cp kubectl-cf /usr/local/bin/

Ссылки по теме