29 сентября

Четыре простые настройки терминала Kubernetes, которые повысят вашу продуктивность

Блог компании ДомКликDevOpsKubernetes
Перевод
Автор оригинала: Komal Venkatesh Ganesan

Я управлял эксплуатацией больших Kubernetes-кластеров более трёх лет, и хочу поделиться своим минималистичным подходом к настройке терминала kubectl terminal, которая доказала свою высокую эффективность в повседневной работе. Хорошо настроенный терминал с командной строкой может значительно повысить вашу продуктивность. Это как хлеб и масло — волшебное сочетание.

Но в отличие от популярных модификаций и функциональных добавлений я верю в простую конфигурацию, не требующую установки новых бинарников, обёрток или модификаций. Особенно в случае с kubectl — нативным, достаточно хорошо спроектированным инструментом, у которого совсем мало недостатков.

Вот четыре мои простых дополнения к терминалу kubectl. С этой конфигурацией я каждый день управляю 20 большими Kubernetes-кластерами на 400 машин.

Использование kubetail для отслеживания журналов многочисленных подов


Первое, что сразу замечаешь при использовании kubectl, это сложность отслеживания журналов в многочисленных подах. Это один из самых востребованных сценариев, который до сих пор не реализован в kubectl.

Если вам нужно отслеживать в kubectl журнал одного пода, это выглядит так:

kubectl logs -f <POD_NAME> -n <NAMESPACE>

Для отслеживания нескольких подов в kubetail достаточно написать:

kubetail <POD_NAME_REGEX> -n <NAMESPACE>

Вы начнёте отслеживать все поды, имя которых соответствует регулярному выражению. Поскольку журналирование одновременно ведётся по нескольким подам, kubetail помечает их разными цветами, чтобы помочь вам ориентироваться.


kubetail — простая обёртка поверх kubectl. Она легко устанавливливается, вы можете найти инструкции здесь.

2. Динамическое изменение неймспейса по умолчанию


В конце концов вам надоест раз за разом выставлять флаг неймспейса для каждой операции kubectl. Нужно придумать, как динамически менять заданные по умолчанию неймспейсы.

Для этого я написал простую функцию-алиас ksn (название подразумевает set namespace).

# Add the following to .zshrc/.bashrc...etc
# Allows setting default namespace while working with kubectl #

alias k='kubectl'
alias ksn='_f(){k get namespace $1 > /dev/null; if [ $? -eq 1 ]; then return $?; fi;  k config set-context $(k config current-context) --namespace=$1; echo "Namespace: $1"};_f'

#Usage:
#➜  ~ ksn dev1                                                       (dev-context/dev1)
#     Context "dev-context" modified.
#     Namespace: dev1

#➜  ~ ksn ff                                                         (dev-context/dev1)
#     Error from server (NotFound): namespaces "ff" not found



Обычно мы работаем с массивом неймспейсов в зависимости от текущей задачи. А поскольку с неймспейсами Kafka связано 80 % проблем, эта функция давно является моим инструментом по умолчанию. Она сэкономит вам много времени, особенно при работе над сложными задачами, требующими ввода в kubectl многочисленных инструкций.

3. Отображение kube-context и namespace в shell prompt


При использовании kubectl-команд всегда нужно обращать внимание на текущие kube-context и namespace. Это не так легко, когда одновременно управляешь кластерами в 20 разных контекстах и 50 неймспейсах. Возникает риск использовать в окружении неверную команду, особенно при одновременной работе над несколькими задачами в разных кластерах и контекстах.

Для решения этой проблемы крайне полезно постоянно отображать в соседнем окне активный неймспейс и контекст.

В примере ниже мой контекст — dev2–1, а неймспейс — test. Мне достаточно просто взглянуть на эту информацию, когда я выполняю разные команды в кластере.


Инструкции по установке и настройке вы найдёте здесь.

4. Важнейшие алиасы kubectl


Алиасы — самый быстрый способ настройки и ускорения вашей работы в терминале. Вот мои самые часто используемые алиасы, которые почти превратились в часть моей натуры:

alias k='kubectl '
alias kcc='kubectl config current-context'
alias kdp='kubectl delete po'
alias kgc='kubectl config get-contexts'
alias kge='kubectl get events --sort-by='\''{.lastTimestamp}'\'
alias kgp='kubectl get po'
alias kl='kubectl logs '
alias kpf='kubectl port-forward'
alias ksc='kubectl config use-context'

Лучше меньше, да лучше: не перегрузите свой терминал


Мы рассмотрели четыре основных улучшения терминала для пользователей kubectl:

  1. Использование kubetail для отслеживания логовов нескольких подов.
  2. Динамическое изменение неймспейсов по умолчанию ради значительного уменьшения длины инструкций kubectl.
  3. Отображение контекста и неймспейсов рядом с вашим терминалом ради избежания случайных ошибок.
  4. Список важных алиасов kubectl.

В отличие от этого минималистского набора, популярные апгрейды терминала (вроде K9s) часто перегружены, наполнены функциями и фантиками, но при этом работают медленно, отвлекают внимание и, что куда важнее, они не нужны. Чем больше функций (блёсток и бантиков) вы добавляете, тем больше времени тратите на то, чтобы продраться через всю эту дополнительную информацию на экране.

Элегантная конфигурация терминала поможет вам сосредоточиться как ничто другое.

Простая конфигурация на основе командной строки позволит разрабатывать быстро и эффективно, используя нативные бинарники и инструменты. Это очень важно, особенно когда работаешь с большой инфраструктурой, входя и выходя из различных профилей на виртуальных машинах.

Конфигурация вашего терминала должна обогащать вас как разработчика, а не вызывать ощущения, что без неё вы как без рук.
Теги:kubernetesdevops
Хабы: Блог компании ДомКлик DevOps Kubernetes
+57
7,3k 87
Комментарии 7
Лучшие публикации за сутки