ssh-key-forwarding
на ваших docker nodesdocker node ls
должны быть доступны по их именам через ssh, т.е. определить их в:/etc/hosts or
.ssh/config
dockernodeps
- возвращает docker node-id
и container-id
в формате NODE-ID:CONTAINER-ID
Примеры команд:
Docker5:~$ dockernodeps wikijs_db
Docker5:c36bbfcd0a67
или
manager1# dockernodeps -a base_dnsmasq
manager1:b83fa2105cbf
worker1:29ff6539d824
worker2:489d1cb42f1e
dockerserviceexec
- запуск задачи в работающем сервисе docker swarm. (uses dockernodeps in PATH as a dependency)
Примеры команд где wikijs_db
имя сервиса в стеке:
Docker5:~$ dockerserviceexec wikijs_db date
+ ssh -t Docker5 docker exec -it c36bbfcd0a67 date
Mon Jul 25 01:50:42 EEST 2022
Connection to docker5 closed.
или
Docker5:~$ dockerserviceexec wikijs_db ls
+ ssh -t Docker5 docker exec -it c36bbfcd0a67 ls
bin docker-entrypoint-initdb.d lib libx32 opt run sys usr
boot etc lib32 media proc sbin test var
dev home lib64 mnt root srv tmp
Connection to docker5 closed.
Services including the given in their names will also be displayed with dockernodeps. This is due to the fact that
docker service ps --filter "name="
works like that.
Only tested for containers with status
'Running'
.
Данный проэкт взят от сюда
Клонируем проэкт:
git clone https://github.com/rdxmb/docker_swarm_helpers.git
Кластер состоял из 6-и нод. docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
k0k4jel9viu6bddcnvpuslda1 Docker1 Ready Active 20.10.16
cgb294gjp02w9bqumzrzzga1d Docker2 Ready Active 20.10.16
nm8ykjji2ej5mux73um72h69t Docker3 Ready Active 20.10.16
xfu4prs6auptuv392zqou90rt Docker4 Ready Active Reachable 20.10.16
f6n6yd6gnx60rzpdoyqqvelg8 * Docker5 Ready Active Leader 20.10.16
itw8nvgwraiqccwepfewqtzk0 Docker6 Ready Active Reachable 20.10.16
Ноды должны быть доступны по имени
Пользователь от которого вы рабатаете с кластером нужно добавить в группу docker
sudo usermod -aG docker $USER
Генерируем ssh ключи на manager node (docker5) через которую будем подключатся
ssh-keygen -t rsa -b 4096
На предложение ввести парольную фразу вбиваем Enter
В результате в папке .ssh
пользователя получаем файлики
id_rsa
- приватный ключ
id_rsa.pub
- публичный ключ
Копируем id_rsa.pub
в authorized_keys
Переносим публичный ключ на все ноды (docker1-4,6) командой
ssh-copy-id -i ~/.ssh/id_rsa.pub you_user@docker1
На Docker5 создаем файл ~/.ssh/config
следующего содержимого
Host docker1
ForwardAgent yes
Host docker2
ForwardAgent yes
Host docker3
ForwardAgent yes
Host docker4
ForwardAgent yes
Host docker6
ForwardAgent yes
Host docker5
ForwardAgent yes
Копируем файлики dockerserviceexec
, dockernodeps
из склонированного проэкта в /usr/local/bin
, даем права на выполнение chmod+x
, а также создаем
симлинки.
sudo ln -s /usr/local/bin/dockernodeps /usr/bin/dockernodeps`
sudo ln -s /usr/local/bin/dockerserviceexec /usr/bin/dockerserviceexec
Запуск ssh-agent
в фоне
eval "$(ssh-agent -s)"
Добавляем SSH key
в ssh-agent
ssh-add ~/.ssh/id_rsa
После чего можем использовать команды dockerserviceexec
, dockernodeps
.
Команды будут работать в текущей сессии
ssh
Пример выполнения команды в скрипте:
#!/usr/bin/bash
# start the ssh-agent in the background
eval "$(ssh-agent -s)"
#Add the SSH key to the ssh-agent
ssh-add ~/.ssh/id_rsa
#Search container
#/usr/local/bin/dockernodeps wikijs_db
#Dump database in container
/usr/local/bin/dockerserviceexec wikijs_db ./docker-entrypoint-initdb.d/dump.sh