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

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

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

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

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

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

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

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

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

Arch Linux:

[simterm]

$ yay -S krew

[/simterm]

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

[simterm]

$ kubectl krew update

[/simterm]

Ищем пакет:

[simterm]

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

[/simterm]

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

[simterm]

$ 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
/

[/simterm]

И проверяем:

[simterm]

$ 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.

[/simterm]

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

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

kubectl-topology

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

kubectl-resources

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

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

[simterm]

$ go get github.com/howardjohn/kubectl-resources

[/simterm]

kubectl-free

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

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

[simterm]

$ 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/

[/simterm]

И его работа:

kubecolor

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

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

[simterm]

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

[/simterm]

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

alias kk="kubecolor"

Результат:

kubectl-watch

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

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

[simterm]

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

[/simterm]

Проверяем:

[simterm]

$ kubectl plugin list
The following kubectl-compatible plugins are available:

/usr/local/bin/kubectl-watch
...

[/simterm]

И запускаем:

kubectl-clogs

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

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

[simterm]

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

[/simterm]

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

kubectl-who-can

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

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

[simterm]

$ kubectl krew install who-can

[/simterm]

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

kubectl-rolesum

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

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

[simterm]

$ kubectl krew install rolesum

[/simterm]

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

ketall

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

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

[simterm]

$ kubectl krew install get-all

[/simterm]

Пример kubectl get all:

И с ketallkubectl get-all:

kubectl-status

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

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

[simterm]

$ kubectl krew install status

[/simterm]

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

Pod-Dive

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

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

[simterm]

$ kubectl krew install pod-dive

[/simterm]

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

kubectl-janitor

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

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

[simterm]

$ kubectl krew install janitor

[/simterm]

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

kubectl-cf

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

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

[simterm]

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

[/simterm]

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

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

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

[simterm]

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

[/simterm]

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