Имеется приложение, в Docker Swarm.
Окружение работает в MS Azure, четыре виртуальных машины/ноды — один Swarm-менеджер и три воркера.
После очередного деплоя — не появляется ни одной реплики:
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
7hcoo66khzzp jm_website_api_layer replicated 0/1 jm/jm-api-layer:v2.0.3 *:4004->4004/tcp
mlejgw5pgen9 jm_website_proxy replicated 0/1 jm/jm-website-proxy:latest *:80->80/tcp,*:443->443/tcp
jv9t1pk50ui3 jm_website_transform replicated 0/1 jm/jm-cms-transform-layer:v2.0.27 *:3003->3003/tcp
9f23oorf4ojq jm_website_transform_preview replicated 0/1 jm/jm-cms-transform-layer:v2.0.27 *:3004->3004/tcp
2rqz3bpsdu41 jm_website_web replicated 0/1 jm/jm-website:v2.2.0 *:8008->8008/tcp
jxfee8uyoiyt jm_website_web_preview replicated 0/1 jm/jm-website:v2.2.0 *:8080->8080/tcp
А все сервисы висят в статусе Pending:
docker service ps jm_website_api_layer
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
auoxxds9oqns jm_website_api_layer.1 jm/jm-api-layer:v2.0.3 Running Pending 16 minutes ago
Проверяем статус воркеров:
docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1tjrynfa1jl86e35clgd222s9 hzwzatr7dzxp4000000 Ready Drain
ai3040vw51jch7zikcx0mjy5c * hzwzatr7dzxp4000000 Ready Drain Leader
2m498rtdvl49enbz9luf96xfz hzwzatr7dzxp4000001 Ready Drain
sgd2si6637x14nemgrvoyhnlq hzwzatr7dzxp4000002 Ready Drain
Все в Drain — WTF? В Drain должен быть только менеджер, а workers — Active.
Решение
Проверяем одну ноду:
docker node inspect --pretty 1tjrynfa1jl86e35clgd222s9
ID: 1tjrynfa1jl86e35clgd222s9
Hostname: hzwzatr7dzxp4000000
Joined at: 2017-10-10 11:40:20.330284287 +0000 utc
Status:
State: Ready
Availability: Drain
Address: 192.168.0.4
Platform:
Operating System: linux
Architecture: x86_64
...
Обновляем её статус:
docker node update --availability active 1tjrynfa1jl86e35clgd222s9
1tjrynfa1jl86e35clgd222s9
Повторяем для оставшихся двух воркеров, проверяем ещё раз:
docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1tjrynfa1jl86e35clgd222s9 hzwzatr7dzxp4000000 Ready Active
ai3040vw51jch7zikcx0mjy5c * hzwzatr7dzxp4000000 Ready Drain Leader
2m498rtdvl49enbz9luf96xfz hzwzatr7dzxp4000001 Ready Active
sgd2si6637x14nemgrvoyhnlq hzwzatr7dzxp4000002 Ready Active
И сервисы:
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
7hcoo66khzzp jm_website_api_layer replicated 1/1 jm/jm-api-layer:v2.0.3 *:4004->4004/tcp
mlejgw5pgen9 jm_website_proxy replicated 1/1 jm/jm-website-proxy:latest *:80->80/tcp,*:443->443/tcp
jv9t1pk50ui3 jm_website_transform replicated 1/1 jm/jm-cms-transform-layer:v2.0.27 *:3003->3003/tcp
9f23oorf4ojq jm_website_transform_preview replicated 1/1 jm/jm-cms-transform-layer:v2.0.27 *:3004->3004/tcp
...
Поднялись.
Почему упали в Drain? Без понятия — в логах ничего. Скорее всего — была какая-то проблема с виртуальной машиной, на которой живёт Swarm-менеджер, а так как это QA окружение и менеджер там один (требуется минимум три для кворума) — то воркеры «выпали» в Drain.
Про Swarm Manager quorum — см