no suitable node - Unable to match constraints services with docker swarm nodes

Viewed 376

I execute

sudo docker node ls

And this is my output

ID                            HOSTNAME          STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
smlsbj3r6qjq7s22cl9cgi1f1 *   ip-172-30-0-94    Ready     Active         Leader           20.10.2
b5e3w8nvrw3kw8q3sg1188439     ip-172-30-0-107   Ready     Active                          20.10.2
phjkfj09ydvgzztaib2zxcfv9     ip-172-30-0-131   Ready     Active                          20.10.2
m73z9ikte16klds06upruifji     ip-172-30-0-193   Ready     Active                          20.10.2

So far I get, I know I have one manager and 3 workers. So, if I have a service which has a constraint that match with node.role property of worker nodes, some of them will be elected by docker swarm to execute the containers related to the service itself. The info of my current service is this:

ID:     5p4hpxmvru9kbwz9y5oymoeq0
Name:       elasbit_relay1
Service Mode:   Replicated
 Replicas:  1
Placement:
 Constraints:   [node.role!=manager]
UpdateConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:     inputoutput/cardano-node:latest@sha256:02779484dc23731cdbea6388920acc6ddd8e40c03285bc4f9c7572a91fe2ee08
 Args:      run --topology /configuration/testnet-topology.json --database-path /db --socket-path /db/node.socket --host-addr 0.0.0.0 --port 3001 --config /configuration/testnet-config.json 
 Init:      false
Mounts:
 Target:    /configuration
  Source:   /home/ubuntu/cardano-docker-run/testnet
  ReadOnly: true
  Type:     bind
 Target:    /db
  Source:   db
  ReadOnly: false
  Type:     volume
Resources:
Endpoint Mode:  vip
Ports:
 PublishedPort = 12798
  Protocol = tcp
  TargetPort = 12798
  PublishMode = ingress 

The key part is [node.role!=manager]. It gives me no suitable node (unsupported platform on 3 nodes; scheduling constraints ….

I tried a lot of ways:

  • Use docker-compose format (yml) with a constraints list:
deploy:
  replicas: 1
  placement:
    constraints: [node.role==worker]
  restart_policy:
    condition: on-failure
  • Use label to nodes.

In all of them I failed. The funny part is, that if I point with some constraint to the node manager, it works! Do I have some typo? Well, I don't see it. Im using Docker version 20.10.2, build 20.10.2-0ubuntu1~18.04.2.

0 Answers
Related