ѕодпишитесь на наш Telegram-канал Ѕудьте в курсе последних новостей 👇 😉 ѕодписатьс€
ѕоддержим в трудное врем€ —пециальное предложение на техническую поддержку вашей »“ - инфраструктуры силами наших экспертов ѕодобрать тариф
ѕоставка оборудовани€ √аранти€ и помощь с настройкой. —кидка дл€ наших читателей по промокоду WIKIMERIONET  упить
»нтерфейс статистики Merion Mertics показывает ключевые диаграммы и графики по звонкам, а также историю звонков в формате, который легко поймет менеджер ѕопробовать бесплатно
¬недрение
офисной телефонии
Ўаг на пути к созданию доступных унифицированных коммуникаций в вашей компании ¬недрить
»нтеграци€ с CRM ѕомогаем навести пор€док с данными
и хранить их в единой экосистеме
ѕодключить
»“ Ѕезопастность ”мна€ информационна€ безопасность дл€ вашего бизнеса «аказать
ћерион Ќетворкс

7 минут чтени€

—егодн€ в статье рассказываем про плагин kubectl, который использует tmux, чтобы быстрее устранить неполадки Kubernetes.

”странение неполадок Kubernetes при помощи tmux и kubectl

Kubernetes - это процветающа€ платформа дл€ взаимодействи€ контейнеров с открытым исходным кодом, котора€ обеспечивает масштабируемость, высокую доступность, надежность и отказоустойчивость приложений. ќдной из его многочисленных функций €вл€етс€ поддержка запуска пользовательских сценариев или двоичных файлов через основной двоичный файл клиента, kubectl. Kubectl очень мощный, и позвол€ет пользовател€м делать с ним все, что они могли бы сделать непосредственно в кластере Kubernetes.


”странение неполадок с псевдонимами Kubernetes

 аждый, кто использует Kubernetes дл€ управлени€ контейнерами, знает о его особенност€х - а также о сложности, причиной которого €вл€етс€ его дизайн. Ќапример, существует остра€ необходимость упростить поиск и устранение неисправностей в Kubernetes с помощью чего-то более быстрого и практически не требующего ручного вмешательства (за исключением критических ситуаций).

—уществует много сценариев, которые следует учитывать при устранении неполадок. ¬ одном сценарии вы знаете, что нужно запускать, но синтаксис команды - даже если она может выполн€тьс€ как одна команда - чрезмерно сложен, или дл€ работы может потребоватьс€ один-два входа.

Ќапример, если часто требуетс€ перейти в запущенный контейнер в пространстве имен System, вы можете неоднократно писать:

kubectl --namespace=kube-system exec -i -t <your-pod-name>

ƒл€ упрощени€ поиска и устранени€ неисправностей можно использовать псевдонимы этих команд в командной строке. Ќапример, можно добавить следующие файлы dotfiles (.bashrc или .zshrc):

alias ksysex='kubectl --namespace=kube-system exec -i -t'

Ёто один из многих примеров из хранилища общих псевдонимов Kubernetes, который показывает один из способов упрощени€ функций в kubectl. ƒл€ чего-то простого, подобного этому сценарию, достаточно псевдонима.


ѕереключение на подключаемый модуль kubectl

Ѕолее сложный сценарий устранени€ неполадок включает в себ€ выполнение множества команд, одной за другой, дл€ исследовани€ среды и выведени€ заключени€. ќдних псевдонимов недостаточно дл€ этого варианта использовани€; необходима воспроизведение логического узла и коррел€ци€ между многими част€ми развертывани€ Kubernetes. Ќа самом деле вам нужна автоматизаци€ дл€ получени€ нужного результата за меньшее врем€.

–ассмотрим пространства имен от 10 до 20 или даже от 50 до 100, содержащие различные микросервисы в вашем кластере. „то поможет вам начать устранение неполадок в этом сценарии?

  • ¬ам потребуетс€ что-то, что может быстро определить, какой модуль в каком пространстве имен вызывает ошибки.
  • ¬ам понадобитс€ что-то, что сможет просматривать журналы всех модулей в пространстве имен.
  • “акже может потребоватьс€ просмотр журналов определенных модулей в определенном пространстве имен, в котором были обнаружены ошибки.

Ћюбое решение, охватывающее эти вопросы, было бы очень полезно при изучении производственных проблем, а также в ходе циклов разработки и тестировани€.

„тобы создать нечто более мощное, чем простой псевдоним, можно использовать плагины kubectl. ѕлагины подобны автономным сценари€м, написанным на любом €зыке сценариев, но предназначены дл€ расширени€ функциональных возможностей главной команды при работе в качестве администратора Kubernetes.

„тобы создать плагин, необходимо использовать правильный синтаксис kubectl- < им€-плагина > дл€ того, чтобы скопировать сценарий в один из экспортированных путей в $PATH и предоставить ему исполн€емые разрешени€ chmod+x.

ѕосле создани€ плагина и перемещени€ его в свой путь, вы можете немедленно запустить его. Ќапример, у мен€ на пути есть kubectl-krwl и kubectl-kmux:

$ kubectl plugin list
The following compatible plugins are available:

/usr/local/bin/kubectl-krawl
/usr/local/bin/kubectl-kmux

$ kubectl kmux

“еперь давайте изучим, как выгл€дит обеспечение работы Kubernetes с tmux.

»спользование силы tmux

Tmux - очень мощный инструмент, на который полагаютс€ многие команды дл€ устранени€ проблем, св€занных с упрощением работы - от разделени€ окон на панели дл€ выполнени€ параллельной отладки на нескольких машинах до мониторинга журналов. ќдним из основных его преимуществ €вл€етс€ то, что его можно использовать в командной строке или в сценари€х автоматизации.

я создал плагин kubectl, который использует tmux, чтобы сделать поиск и устранение неисправностей гораздо проще. я буду использовать аннотации, чтобы пройти через логику за плагином (и оставить его дл€ вас, чтобы пройти через полный код плагина):

#NAMESPACE is namespace to monitor.
#POD is pod name
#Containers is container names

# initialize a counter n to count the number of loop counts, later be used by tmux to split panes.
n=0;

# start a loop on a list of pod and containers
while IFS=' ' read -r POD CONTAINERS
do

           # tmux create the new window for each pod
            tmux neww $COMMAND -n $POD 2>/dev/null

           # start a loop for all containers inside a running pod
        for CONTAINER in ${CONTAINERS//,/ }
        do

        if [ x$POD = x -o x$CONTAINER = x ]; then
        # if any of the values is null, exit.
        warn "Looks like there is a problem getting pods data."
        break
        fi
           
            # set the command to execute
        COMMAND=Фkubectl logs -f $POD -c $CONTAINER -n $NAMESPACEФ
        # check tmux session
        if tmux has-session -t <session name> 2>/dev/null;
        then
        <set session exists>
        else
        <create session>
        fi

           # split planes in the current window for each containers
        tmux selectp -t $n \; \
        splitw $COMMAND \; \
        select-layout tiled \;

           # end loop for containers
        done

           # rename the window to identify by pod name
        tmux renamew $POD 2>/dev/null
       
            # increment the counter
        ((n+=1))

# end loop for pods
done< <(<fetch list of pod and containers from kubernetes cluster>)

# finally select the window and attach session
 tmux selectw -t <session name>:1 \; \
  attach-session -t <session name>\;

ѕосле запуска скрипта плагина он будет выдавать выходные данные, аналогичные изображению ниже.  аждый модуль имеет собственное окно, и каждый контейнер (если их несколько) раздел€етс€ панел€ми в окне модул€ в потоковые журналы по мере их поступлени€. ѕреимущество tmux можно увидеть ниже; ѕри правильной конфигурации можно даже увидеть, какое окно активно (см. белые вкладки).

јктивное окно

«аключение

ѕсевдонимы всегда полезны дл€ простого устранени€ неполадок в средах Kubernetes.  огда среда становитс€ более сложной, плагин kubectl €вл€етс€ мощным вариантом дл€ использовани€ более продвинутых сценариев. ќграничени€ в выборе €зыка программировани€, который можно использовать дл€ записи плагинов kubectl, нет. ≈динственное требование состоит в том, чтобы соглашение об именовании в пути €вл€лось исполн€емым и не имело того же имени, что и существующа€ команда kubectl.

ѕрочитать полный код или попробовать плагины можно тут