- PVSM.RU - https://www.pvsm.ru -

Полезные утилиты при работе с Kubernetes

Полезные утилиты при работе с Kubernetes - 1

В статье кратко рассмотрены сторонние Open Source-утилиты для Kubernetes, реализующие разные возможности и призванные помочь в повседневной работе. 4 из них взяты из англоязычного материала и помогают в: автоматическом обновлении конфигураций, отслеживании нагрузки по контейнерам/подам/нодам, переключении контекстов, создании DIND-кластеров (Docker in Docker). Остальные — найдены на GitHub и представлены коротким списком.

Kube-applier

  • GitHub [1].
  • Лицензия: Apache License 2.0.
  • Требования: Go 1.7+, Docker 1.10+, Kubernetes 1.2.x—1.4.x (с поддержкой 1.5 и 1.6 есть временная проблема [2]).

Сервис онлайн-хранилища Box открывает исходный код некоторых инструментов, используемых у себя для деплоя с помощью Kubernetes. В апреле был представлен [3] один из таких проектов — kube-applier.

Kube-applier запускается как сервис в Kubernetes, берёт из Git-репозитория набор конфигурационных файлов для кластера Kubernetes и последовательно применяет их к подам в кластере. Когда бы эти изменения ни появились в файлах, они автоматически забираются из репозитория и применяются к соответствующим подам. (Пример конфигурации для kube-applier см. здесь [4].)

Изменения могут также применяться по расписанию или по запросу. Kube-applier логирует свои действия при каждом запуске и предлагает метрики для мониторинга с Prometheus.

Полезные утилиты при работе с Kubernetes - 2

Kubetop

  • GitHub [5].
  • Лицензия: MIT License.
  • Требования: Python, Pip / Pipsi.

Kubetop — консольная утилита для вывода списка всех запущенных нод, всех подов на этих нодах и всех контейнеров в этих подах, а также потребление ресурсов процессора и оперативной памяти для каждого из них — аналогично классической Unix-утилите top. Этот инструмент нельзя рекомендовать как полноценную замену детальному журналированию/отчётности, т.к. предоставляемая им информация весьма ограничена, но иногда именно такая краткость и быстрый взгляд на статус кластера Kubernetes могут оказаться очень полезны.

В действительности у kubectl в составе Kubernetes есть похожая функция, но у Kubetop более наглядный вывод:

kubetop - 13:02:57
Node 0 CPU%   9.80 MEM% 57.97 (   2 GiB/   4 GiB)  POD%  7.27 (  8/110) Ready
Node 1 CPU%  21.20 MEM% 59.36 (   2 GiB/   4 GiB)  POD%  3.64 (  4/110) Ready
Node 2 CPU%  99.90 MEM% 58.11 (   2 GiB/   4 GiB)  POD%  7.27 (  8/110) Ready
Pods:       20 total        0 running        0 terminating        0 pending
                 POD               (CONTAINER)        %CPU         MEM   %MEM
s4-infrastructure-3073578190-2k2vw                    75.5  782.05 MiB  20.76
                      (subscription-converger)        72.7  459.11 MiB
                                 (grid-router)         2.7   98.07 MiB
                                         (web)         0.1   67.61 MiB
                        (subscription-manager)         0.0   91.62 MiB
                       (foolscap-log-gatherer)         0.0   21.98 MiB
                                       (flapp)         0.0   21.46 MiB
                              (wormhole-relay)         0.0   22.19 MiB

Kubectx и K8senv

  • Kubectx: анонс в блоге [6]; GitHub [7]; лицензия: Apache License v2.
  • K8senv: GitHub [8]; лицензия: MIT License; требует Python (ставится через Pip).

Для обращения к кластерам с разными конфигурациями в Kubernetes используется концепция контекста (context). Переключение между ними родной консольной утилитой kubectl бывает не очень удобным, в результате чего появились сторонние методы решения этой задачи.

Kubectx — Bash-скрипт, позволяющий назначать короткие имена контекстам Kubernetes и переключаться между ними. А если передать в качестве аргумента дефис, то происходит переключение на предыдущий контекст. Скрипт также поддерживает автоматическое дополнение имён по нажатию на <Tab>.

$ kubectx minikube
Switched to context "minikube".
$ kubectx -
Switched to context "oregon".
$ kubectx -
Switched to context "minikube".
$ kubectx dublin=gke_ahmetb_europe-west1-b_dublin
Context "dublin" set.
Aliased "gke_ahmetb_europe-west1-b_dublin" as "dublin".

Другая утилита для переключения контекстов — k8senv — чуть менее функциональна.

kubeadm-dind-cluster

  • GitHub [9].
  • Лицензия: Apache License 2.0.
  • Требования: Docker 1.12+, Kubernetes 1.4.x, 1.5.x, 1.6.x.

Как известно, для тестового запуска локальной инсталляции Kubernetes с одной нодой есть хорошее готовое решение от самого проекта — Minikube [10]. А для тех, кто хочет развернуть для экспериментов или разработки самого Kubernetes кластеры из многих узлов, есть продукт от Mirantis — kubeadm-dind-cluster (KDC).

KDC использует kubeadm для запуска кластера, созданного из Docker-контейнеров вместо виртуальных машин (для этого применяется DIND, Docker in Docker — прим. перев.). Выбранная реализация позволяет быстрее перезапускать кластер, что особенно ценно, если необходимо быстро видеть результат изменений в коде при разработке самого Kubernetes. Также можно использовать KDC в окружениях непрерывной интеграции. Работает в GNU/Linux, Mac OS и Windows, не требует инсталляции Go, т.к. использует докеризированные сборки Kubernetes.

Пример работы с KDC на базе Kubernetes 1.6:

$ wget https://cdn.rawgit.com/Mirantis/kubeadm-dind-cluster/master/fixed/dind-cluster-v1.6.sh
$ chmod +x dind-cluster-v1.6.sh

$ # запуск кластера
$ ./dind-cluster-v1.6.sh up

$ # добавление директории с kubectl в PATH
$ export PATH="$HOME/.kubeadm-dind-cluster:$PATH"

$ kubectl get nodes
NAME          STATUS         AGE
kube-master   Ready,master   1m
kube-node-1   Ready          34s
kube-node-2   Ready          34s

$ # Kubernetes dashboard доступен на http://localhost:8080/ui

$ # перезапуск кластера, который произойдет намного быстрее первого старта
$ ./dind-cluster-v1.6.sh up

$ # остановка кластера
$ ./dind-cluster-v1.6.sh down

$ # удаление контейнеров и томов DIND
$ ./dind-cluster-v1.6.sh clean

Другие утилиты

Список прочих вспомогательных утилит для Kubernetes, доступных на GitHub и не упомянутых в оригинальной статье:

  • kube-monkey [11] — убивает поды случайным образом по аналогии с Chaos Monkey от Netflix (есть альтернатива chaoskube [12]);
  • Kubediff [13] — показывает разницу между конфигурациями Kubernetes: текущей запущенной и описанной в конфиге (может как работать как служба, периодически скачивающая последнюю конфигурацию из Git и сравнивающая её с текущей, поддерживает отправку уведомлений в Slack-чат, имеет веб-интерфейс);
  • ktmpl [14] — обрабатывает параметризированные шаблоны манифестов Kubernetes;
  • kube-lint [15] — валидирует конфигурации и ресурсы Kubernetes на соответствие правилам, определённым вами;
  • kenv [16] — вставляет переменные окружения в описание ресурсов;
  • konfd [17] — управляет конфигурациями приложений с помощью секретов Kubernetes, configmaps и шаблонов на Go;
  • kubernetes-secret-manager [18] — управляет секретами с помощью Vault от Hashicorp;
  • k8sec [19] — тоже помогает управлять секретами Kubernetes в консоли;
  • kube-ops-view [20] — наглядно показывает текущий статус всех подов и нод кластера с помощью dashboard, написанного на JavaScript;

Полезные утилиты при работе с Kubernetes - 3

  • kubewatch [21] — мониторит все события в кластере Kubernetes и сообщает о них в Slack-чат;
  • kube-slack [22] — сообщает в Slack об ошибках в работе подов;
  • k8stail [23] — реализует вывод логов как tail -f для всех подов кластера.

Полезные утилиты при работе с Kubernetes - 4

Делитесь своими находками в комментариях и подписывайтесь, чтобы не пропускать наши новые статьи! ;-)

Автор: Флант

Источник [24]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/sistemnoe-administrirovanie/257111

Ссылки в тексте:

[1] GitHub: https://github.com/box/kube-applier

[2] временная проблема: https://github.com/kubernetes/kubernetes/issues/7789#issuecomment-280568960

[3] был представлен: https://blog.box.com/blog/introducing-kube-applier-declarative-configuration-for-kubernetes/

[4] см. здесь: https://github.com/box/kube-applier/tree/master/demo

[5] GitHub: https://github.com/LeastAuthority/kubetop

[6] анонс в блоге: https://ahmet.im/blog/kubectx/

[7] GitHub: https://github.com/ahmetb/kubectx

[8] GitHub: https://github.com/philipn/k8senv

[9] GitHub: https://github.com/Mirantis/kubeadm-dind-cluster

[10] Minikube: https://github.com/kubernetes/minikube

[11] kube-monkey: https://github.com/asobti/kube-monkey

[12] chaoskube: https://github.com/linki/chaoskube

[13] Kubediff: https://github.com/weaveworks/kubediff

[14] ktmpl: https://github.com/InQuicker/ktmpl

[15] kube-lint: https://github.com/viglesiasce/kube-lint

[16] kenv: https://github.com/thisendout/kenv

[17] konfd: https://github.com/kelseyhightower/konfd

[18] kubernetes-secret-manager: https://github.com/upmc-enterprises/kubernetes-secret-manager

[19] k8sec: https://github.com/dtan4/k8sec

[20] kube-ops-view: https://github.com/hjacobs/kube-ops-view

[21] kubewatch: https://github.com/skippbox/kubewatch

[22] kube-slack: https://github.com/whs/kube-slack

[23] k8stail: https://github.com/dtan4/k8stail

[24] Источник: https://habrahabr.ru/post/330198/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best