Controlling Container Placements


* By default a swarm service spreads its tasks out over Nodes.Try's to use the least-used Node for a task.
* Swarm has multiple ways to control which node a container runs on.
* Can be used togther for complex requirements.
1. Node Labels plus service contraints ( <key>=<value> )
2. Service Modes (replicated|global)
3. (new in 17.04+) Placement Preferences (spread)
4. Node Availability (active|pause|drain)
5. Resource Requirements (cpu|memory)


Service Constraints:


-bash-4.2$ docker service create --name app1 --constraint node.role==worker nginx
i342kxxhjqvp3js26v7a3ha4j
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

-bash-4.2$ docker service ps app1
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
29jycn7bjrib        app1.1              nginx:latest        worker2             Running             Running 38 seconds ago


-bash-4.2$ docker service update --constraint-rm node.role==worker --constraint-add node.role==manager app1
app1
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged
-bash-4.2$ docker service ps app1
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE             ERROR               PORTS
r9auvuykv2j2        app1.1              nginx:latest        manager             Running             Running 19 seconds ago
29jycn7bjrib         \_ app1.1          nginx:latest        worker2             Shutdown            Shutdown 20 seconds ago

-bash-4.2$ docker node update --label-add dmz=true worker2
worker2

-bash-4.2$ docker inspect worker2
[
    {
        "ID": "p5k4qztbwe92rmq1ygdu9vqkk",
        "Version": {
            "Index": 622
        },
        "CreatedAt": "2019-12-02T06:35:12.002886593Z",
        "UpdatedAt": "2019-12-09T04:02:06.979884066Z",
        "Spec": {
            "Labels": {
                "dmz": "true"
            },



-bash-4.2$ docker service create --name dmz-nginx --constraint node.labels.dmz==true --replicas 2 nginx
jkhos0jc8z6t55v4zzhik1fyq
overall progress: 2 out of 2 tasks
1/2: running   [==================================================>]
2/2: running   [==================================================>]
verify: Service converged

-bash-4.2$ docker service ps dmz-nginx
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
6bjm1tkdg5pl        dmz-nginx.1         nginx:latest        worker2             Running             Running 25 seconds ago
x8ljpqalykol        dmz-nginx.2         nginx:latest        worker2             Running             Running 25 seconds ago
-bash-4.2$


Built-in labels:


node.id (listed in docker node ls)
node.hostname (listed in docker node ls)
node.ip (eg. 172.19.17.0/24)
node.role (worker | manager)
node.platform.os (linux|windows|etc)
node.platform.arch (x86_64|arm64|386|etc)
node.labels (empty by default)

Cleaning up:


-bash-4.2$ docker service rm app1 dmz-nginx
app1
dmz-nginx
-bash-4.2$ docker service ls
ID                  NAME                 MODE                REPLICAS            IMAGE                             PORTS
j2nbudo31jhd        voteapp_visualizer   replicated          1/1                 dockersamples/visualizer:stable   *:8080->8080/tcp


-bash-4.2$ docker node update --label-rm dmz worker2
worker2
-bash-4.2$

2 comments:

  1. The information which you have provided in this blog is really useful to everyone. Thanks for sharing.
    Docker and Kubernetes Training
    Kubernetes Online Training
    Docker Online Training

    ReplyDelete
  2. Wonderful post! I appericiate you posting this kinds of relevent information to us.If Any one who want to learn linux core to advance call on 9311002620 or visit our further websites:- https://htsindia.com/Courses/modular-courses/redhat-linux-administration-training-course

    ReplyDelete

Installation of Jenkins on Linux and Deployment NGINX through Jenkins

Installation of Jenkins: [root@worker1 ~]# useradd -c "jenkins user" jenkins [root@worker1 ~]# passwd jenkins Changing passw...