Имеется приложение, в Docker Swarm.
Окружение работает в MS Azure, четыре виртуальных машины/ноды – один Swarm-менеджер и три воркера.
После очередного деплоя – не появляется ни одной реплики:
[simterm]
$ 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
[/simterm]
А все сервисы висят в статусе Pending:
[simterm]
$ 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
[/simterm]
Проверяем статус воркеров:
[simterm]
$ 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
[/simterm]
Все в Drain – WTF? В Drain должен быть только менеджер, а workers – Active.
Решение
Проверяем одну ноду:
[simterm]
$ 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 ...
[/simterm]
Обновляем её статус:
[simterm]
$ docker node update --availability active 1tjrynfa1jl86e35clgd222s9 1tjrynfa1jl86e35clgd222s9
[/simterm]
Повторяем для оставшихся двух воркеров, проверяем ещё раз:
[simterm]
$ 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
[/simterm]
И сервисы:
[simterm]
$ 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 ...
[/simterm]
Поднялись.
Почему упали в Drain? Без понятия – в логах ничего. Скорее всего – была какая-то проблема с виртуальной машиной, на которой живёт Swarm-менеджер, а так как это QA окружение и менеджер там один (требуется минимум три для кворума) – то воркеры “выпали” в Drain.
Про Swarm Manager quorum – см тут>>>.