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

Thank you for reading this post, don't forget to subscribe!

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

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

https://krew.sigs.k8s.io/docs/user-guide/setup/install/

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

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

kubectl krew update

Ищем пакет:

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

И про­ве­ря­ем:

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

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

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:

И с ketall — kubectl 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/