В статье кратко рассмотрены сторонние Open Source-утилиты для Kubernetes, реализующие разные возможности и призванные помочь в повседневной работе. 4 из них взяты из англоязычного материала и помогают в: автоматическом обновлении конфигураций, отслеживании нагрузки по контейнерам/подам/нодам, переключении контекстов, создании DIND-кластеров (Docker in Docker). Остальные — найдены на GitHub и представлены коротким списком.
Kube-applier
- GitHub.
- Лицензия: Apache License 2.0.
- Требования: Go 1.7+, Docker 1.10+, Kubernetes 1.2.x—1.4.x (с поддержкой 1.5 и 1.6 есть временная проблема).
Сервис онлайн-хранилища Box открывает исходный код некоторых инструментов, используемых у себя для деплоя с помощью Kubernetes. В апреле был представлен один из таких проектов — kube-applier.
Kube-applier запускается как сервис в Kubernetes, берёт из Git-репозитория набор конфигурационных файлов для кластера Kubernetes и последовательно применяет их к подам в кластере. Когда бы эти изменения ни появились в файлах, они автоматически забираются из репозитория и применяются к соответствующим подам. (Пример конфигурации для kube-applier см. здесь.)
Изменения могут также применяться по расписанию или по запросу. Kube-applier логирует свои действия при каждом запуске и предлагает метрики для мониторинга с Prometheus.
Kubetop
- GitHub.
- Лицензия: 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: анонс в блоге; GitHub; лицензия: Apache License v2.
- K8senv: GitHub; лицензия: 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.
- Лицензия: Apache License 2.0.
- Требования: Docker 1.12+, Kubernetes 1.4.x, 1.5.x, 1.6.x.
Как известно, для тестового запуска локальной инсталляции Kubernetes с одной нодой есть хорошее готовое решение от самого проекта — Minikube. А для тех, кто хочет развернуть для экспериментов или разработки самого 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 — убивает поды случайным образом по аналогии с Chaos Monkey от Netflix (есть альтернатива chaoskube);
- Kubediff — показывает разницу между конфигурациями Kubernetes: текущей запущенной и описанной в конфиге (может как работать как служба, периодически скачивающая последнюю конфигурацию из Git и сравнивающая её с текущей, поддерживает отправку уведомлений в Slack-чат, имеет веб-интерфейс);
- ktmpl — обрабатывает параметризированные шаблоны манифестов Kubernetes;
- kube-lint — валидирует конфигурации и ресурсы Kubernetes на соответствие правилам, определённым вами;
- kenv — вставляет переменные окружения в описание ресурсов;
- konfd — управляет конфигурациями приложений с помощью секретов Kubernetes, configmaps и шаблонов на Go;
- kubernetes-secret-manager — управляет секретами с помощью Vault от Hashicorp;
- k8sec — тоже помогает управлять секретами Kubernetes в консоли;
- kube-ops-view — наглядно показывает текущий статус всех подов и нод кластера с помощью dashboard, написанного на JavaScript;
- kubewatch — мониторит все события в кластере Kubernetes и сообщает о них в Slack-чат;
- kube-slack — сообщает в Slack об ошибках в работе подов;
- k8stail — реализует вывод логов как
tail -f
для всех подов кластера.
Делитесь своими находками в комментариях и подписывайтесь, чтобы не пропускать наши новые статьи! ;-)
Автор: Флант