k9s — терминальный интерфейс к Kubernetes, который заменяет длинные команды kubectl быстрым обзором и горячими клавишами. Вместо набора get pods с фильтрами вы открываете список, находите нужный под и нажимаете l для логов или s для shell. Инструмент не скрывает API: под капотом те же права из kubeconfig и тот же RBAC. Ниже — установка, навигация, настройка и честные ограничения.

Что даёт k9s

Это текстовый интерфейс, а не веб-панель. Он работает по SSH, не требует браузера и открывается за секунду. Основные сценарии: посмотреть состояние подов, найти причину CrashLoopBackOff, зайти в контейнер, пробросить порт, разобрать YAML и сравнить объекты в разных namespace.

Есть и обратная сторона: k9s не подходит для сценариев, где нужен точный вывод в скрипте. Для автоматизации остаются kubectl с jsonpath и клиентские библиотеки, а интерфейс нужен человеку, который смотрит на кластер глазами.

k9s не хранит состояние и не устанавливает агентов в кластер: он читает те же данные, что kubectl, и подчиняется тем же правам. Если доступ к секретам закрыт через RBAC, интерфейс их не покажет. Отдельный плюс — связь владельцев: по поду видно, какой деплоймент или statefulset его создал, и не нужно искать это вручную по меткам.

Установка

Вариантов несколько: snap, бинарник с релизов, пакет из репозитория проекта или go install. В Linux Mint и Ubuntu проще snap, в Arch — пакет из AUR или репозитория.

snap install k9s --classic
k9s version
k9s info
k9s -n kube-system

k9s info показывает пути к конфигу, логам и скинам — это первое, что нужно при странном поведении. Для одного запуска можно указать контекст и kubeconfig флагами, не меняя глобальные настройки. Если snap недоступен, бинарник ставят в /usr/local/bin и проверяют версию; обновление в этом случае ручное, поэтому удобнее держать пакетный менеджер или закрепить версию в скрипте.

k9s --context staging
k9s --kubeconfig ~/.kube/prod.yaml
k9s --readonly
k9s --help

Навигация

Почти всё управляется двоеточием: наберите :pod, :svc, :deploy, :ns, :ctx. Это те же ресурсы, что в kubectl, включая короткие имена. Клавиша 0 переключает все namespace, escape возвращает на уровень назад, слэш включает фильтр по подстроке.

  • :pod — поды, :deploy — деплойменты, :svc — сервисы.
  • :no — узлы, :pv и :pvc — хранилище.
  • :ctx — контексты kubeconfig, :ns — namespace.
  • 0 — все namespace, / — фильтр, esc — сброс.
  • ? — подсказка по клавишам для текущего экрана.

Пользовательские ресурсы открываются по полному имени или через :crd — список CustomResourceDefinition. Операторы любят плодить десятки CRD, и без фильтра в них легко потеряться. Если ресурс не открывается, проверьте, установлен ли он вообще: kubectl api-resources показывает доступные типы.

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

Ежедневные клавиши

Запоминается десяток действий, остальное подсказывает справка.

l        логи выбранного пода
s        shell внутри контейнера
d        describe
y        YAML
shift-f  port-forward

shift-f открывает порт из контейнера на локальную машину — удобно для отладки сервиса без правки манифеста. Редактирование через e открывает объект в настроенном редакторе; правка применяется сразу, поэтому на проде это опасная операция. Сочетание ctrl-d удаляет объект, и k9s запрашивает подтверждение.

Логи и отладка

Экран логов умеет паузу, поиск и переключение контейнеров в поде. Для подов с несколькими контейнерами сначала выбирается нужный, иначе легко смотреть пустой поток sidecar.

kubectl get pods -A --field-selector status.phase!=Running
kubectl describe pod -n shop api-7d9f
kubectl logs -n shop api-7d9f --previous
kubectl auth can-i --list -n shop

Для сравнения окружений удобно держать два терминала: в одном staging, в другом prod, и явно подписывать окна. k9s показывает текущий контекст в шапке, но при быстрой работе его легко не заметить.

k9s показывает статус, но причину ищут в describe и событиях. Если под падает сразу, логи предыдущего запуска через —previous информативнее текущих. Проверка auth can-i полезна, когда интерфейс выглядит пустым: возможно, дело не в k9s, а в правах.

Настройка

Конфиг лежит в ~/.config/k9s/config.yaml. Полезно включить мышь, уменьшить частоту обновления на слабом канале и выбрать тему.

k9s:
  refreshRate: 2
  readOnly: false
  ui:
    skin: dracula
    enableMouse: true

Скины кладутся в ~/.config/k9s/skins и указываются по имени файла без расширения. Псевдонимы сокращают ввод: например, pp для подов и dp для деплойментов. В старых версиях они жили в отдельном файле, в новых — в том же config.yaml, поэтому сверяйтесь с документацией своей сборки.

mkdir -p ~/.config/k9s/skins
k9s info
kubectl config get-contexts
kubectl config use-context staging

Псевдонимы задаются в том же файле и ссылаются на полное имя ресурса.

aliases:
  pp: v1/pods
  dp: apps/v1/deployments

Ограничения

k9s — не GitOps и не замена манифестам. Правки через e живут до следующего применения Helm или CI и создают расхождение конфигурации. На общих кластерах включайте readOnly или используйте kubeconfig с правами только на чтение. Отдельно проверьте, не сохраняются ли в истории shell команды с токенами.

Исторических графиков в k9s нет: текущие CPU и память он показывает при наличии metrics-server, но не хранит ряды и не строит тренды. Терминальный интерфейс требует привычки: мышь работает не везде, а часть экранов зависит от версии. Для больших кластеров включайте фильтр по namespace, иначе список подов превращается в стену текста.

Чек-лист

  • k9s установлен, k9s info показывает ожидаемые пути.
  • Контексты и namespace переключаются без правки kubeconfig.
  • Понятны клавиши l, s, d, y, shift-f и ctrl-d.
  • Для прода используется readOnly или отдельный контекст.
  • Настроены skin, refreshRate и псевдонимы под задачи.
  • Логи и describe применяются вместо правки объектов наугад.

Итог

k9s ускоряет повседневную работу с Kubernetes и снижает число опечаток в командах kubectl. Он не отменяет понимания API и RBAC, зато делает диагностику наглядной: список, фильтр, логи, describe, port-forward. Начните с навигации и логов, затем добавьте readOnly для прода и аккуратные псевдонимы. Дальше инструмент становится привычкой, а не отдельной темой для изучения.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте