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

Kube-applier



Сервис онлайн-хранилища 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 для всех подов кластера.



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

Комментарии (2)


  1. ld100
    05.06.2017 22:29

    Большое спасибо, даже не догадывался о существовании таких инструментов. С Kube-applier «хуяк-хуяк и в продакшен» должен стать намного проще :)


  1. badc0de
    05.06.2017 23:55
    +1

    Мы вот такую штуку для себя написали: https://github.com/Dalee/fuse
    Если очень кратко: по-сути это apply но с некоторыми плюшками, + возможность чистить registry (теперь уже distribution) от неиспользуемых тэгов.