Несмотря на то, что Kubernetes представляет мир, в котором SSH не так нужен в повседневном использовании для деплоя и управления приложениями, по-прежнему бывают случаи, когда SSH полезен для сбора статистики, отладки и исправления конфигураций. Пусть через несколько лет SSH и запуск разовых отладочных сессий может уже не понадобиться, описанные ниже инструменты могут пригодиться сейчас для быстрого SSH-подключения к машинам из кластера Kubernetes.


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).
Поделиться с друзьями
-->

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


  1. AgaFonOff
    16.05.2017 11:22
    +2

    Рискну спросить: у кого есть положительный «долгоиграющий» опыт использования fabric и чего-то типа fabtools?
    А то для простых задач поднимать что-то очень большое как-то не рационально выглядит.


    1. shurup
      17.05.2017 11:47

      У нас такого нет. Может, есть (был) у suguby или yaak?..

      А вот нагуглил, что якобы CERN использует Fabric для тестирования:

      Fabric provides the Virtual Machine Creator with a Python based SSH interface to a virtual machine so that any SSH tasks like installing and configuring software can be executed from a Python script. It also provides built-in functions to perform tasks like sudo commands and file transfers.


      1. AgaFonOff
        17.05.2017 16:29

        О, а в Церне тоже, я посмотрю, лентяи сидят :)
        (считаю fabric инструментом лентяев — вместо кнопок автоматизировать нехитрые операции)


    1. jarosite
      17.05.2017 12:29

      Начал было пользоваться но ansible оказался удобнее.