Несмотря на то, что Kubernetes представляет мир, в котором SSH не так нужен в повседневном использовании для деплоя и управления приложениями, по-прежнему бывают случаи, когда SSH полезен для сбора статистики, отладки и исправления конфигураций. Пусть через несколько лет SSH и запуск разовых отладочных сессий может уже не понадобиться, описанные ниже инструменты могут пригодиться сейчас для быстрого SSH-подключения к машинам из кластера Kubernetes.
Kubernetes хранит базу данных нод кластера, просмотреть которую можно командой
Установите SSH-утилиту Fabric и проверьте её наличие:
Склонируйте этот Git-репозиторий (с наработками по интеграции от CoreOS — прим. перев.) и перейдите в каталог с ним:
Fabric будет использовать
Многие конфигурации Kubernetes, такие как CoreOS Tectonic, не включают прямой SSH-доступ к машинам в кластере — вместо этого пользователям необходимо сначала подключиться к шлюзу или узлу-бастиону (bastion host). Если кластер Kubernetes настроен таким образом, добавьте к команде флаг
По умолчанию fabfile будет использовать внешние IP (
Больше информации об интеграции Fabric с Kubernetes можно почерпнуть из репозитория GitHub.
Послесловие переводчика: в репозитории на самом деле просто продублирован этот tutorial, так что дополнительных сведений вы не найдёте (по крайней мере — по состоянию на сейчас). Зато можно изучить очень лаконичный fabfile.py, который легко расширить под свои нужды (тем более, что распространяется он на условиях свободной Apache License 2.0).
Kubernetes хранит базу данных нод кластера, просмотреть которую можно командой
kubectl get nodes
. Это мощный фундамент для автоматизации и интеграции с существующими инструментами. Одним из таких инструментов является SSH-утилита Fabric, известная ещё как fabfile.py
.Прим. перев.: Fabric — написанная на Python библиотека и командная утилита, упрощающая SSH-доступ при деплое приложений и системном администрировании. Она обеспечивает как простейшее выполнение shell-команд, так и более сложные операции: загрузку/скачивание файлов, запрос пользовательского ввода, прерывание исполнения процесса. Типичное использование fabfile — создание модуля на Python, реализующего одну или несколько функций, после чего они вызываются посредством консольной утилиты fab
. Подробнее о возможностях Fabric можно прочитать в официальной документации.
Начало работы
Установите SSH-утилиту Fabric и проверьте её наличие:
$ fab --version
Fabric 1.13.1
Прим. перев.: В случае Ubuntu достаточно установить пакет fabric
, который доступен в основных репозиториях.
Склонируйте этот Git-репозиторий (с наработками по интеграции от CoreOS — прим. перев.) и перейдите в каталог с ним:
git clone https://github.com/coreos/fabric-kubernetes-nodes
cd fabric-kubernetes-nodes
Fabric будет использовать
fabfile.py
из корня этой директории. Поэтому теперь узлы и лейблы Kubernetes доступны в Fabric. Вот пример сессии, использующей эту интеграцию:$ kubectl get nodes
NAME STATUS AGE
ip-10-0-0-50.us-west-2.compute.internal Ready 22d
ip-10-0-60-201.us-west-2.compute.internal Ready 22d
ip-10-0-95-156.us-west-2.compute.internal Ready 22d
$ kubectl label node ip-10-0-0-50.us-west-2.compute.internal fab-admin=true
node "ip-10-0-0-50.us-west-2.compute.internal" labeled
$ fab -u core -R fab-admin=true -- date
[52.26.54.211] Executing task '<remainder>'
[52.26.54.211] run: date
[52.26.54.211] out: Wed Feb 15 22:42:47 UTC 2017
[52.26.54.211] out:
Done.
Disconnecting from 52.26.54.211... done.
Узел-бастион или шлюз
Многие конфигурации Kubernetes, такие как CoreOS Tectonic, не включают прямой SSH-доступ к машинам в кластере — вместо этого пользователям необходимо сначала подключиться к шлюзу или узлу-бастиону (bastion host). Если кластер Kubernetes настроен таким образом, добавьте к команде флаг
--gateway
и измените тип адреса на InternalIP
.$ export FAB_KUBE_NODE_ADDRESS_TYPE=InternalIP
$ fab --gateway=W.X.Y.Z -u core -R failure-domain.beta.kubernetes.io/zone=us-west-2a -- date
[10.0.3.24] Executing task '<remainder>'
[10.0.3.24] run: date
[10.0.3.24] out: Mon May 1 02:50:13 UTC 2017
[10.0.3.24] out:</remainder>
[10.0.60.15] Executing task '<remainder>'
[10.0.60.15] run: date
[10.0.60.15] out: Mon May 1 02:50:16 UTC 2017
[10.0.60.15] out:</remainder>
Done.
Disconnect
По умолчанию fabfile будет использовать внешние IP (
ExternalIP
) нод. Однако его можно настроить на любые IP-адреса, которые есть у ноды. Пример выше использует общее поле InternalIP
, а чтобы изменить его на произвольный SpecialIP
, экспортируйте переменную окружению соответствующим образом (FAB_KUBE_NODE_ADDRESS_TYPE=SpecialIP
).Больше информации об интеграции Fabric с Kubernetes можно почерпнуть из репозитория GitHub.
Послесловие переводчика: в репозитории на самом деле просто продублирован этот tutorial, так что дополнительных сведений вы не найдёте (по крайней мере — по состоянию на сейчас). Зато можно изучить очень лаконичный fabfile.py, который легко расширить под свои нужды (тем более, что распространяется он на условиях свободной Apache License 2.0).
Поделиться с друзьями
AgaFonOff
Рискну спросить: у кого есть положительный «долгоиграющий» опыт использования fabric и чего-то типа fabtools?
А то для простых задач поднимать что-то очень большое как-то не рационально выглядит.
shurup
У нас такого нет. Может, есть (был) у suguby или yaak?..
А вот нагуглил, что якобы CERN использует Fabric для тестирования:
AgaFonOff
О, а в Церне тоже, я посмотрю, лентяи сидят :)
(считаю fabric инструментом лентяев — вместо кнопок автоматизировать нехитрые операции)
jarosite
Начал было пользоваться но ansible оказался удобнее.