Docker: Swarm – REPLICAS 0/1

Автор: | 28/12/2017
 

Имеется приложение, в 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 – см тут>>>.