docs: service create: document os/arch constraints and more examples

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit f26e9a3a61)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2020-02-10 11:37:38 +01:00
parent 27f0612665
commit 7fac7eb1af
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
1 changed files with 44 additions and 7 deletions

View File

@ -672,13 +672,15 @@ or _exclude_ (`!=`) rule. Multiple constraints find nodes that satisfy every
expression (AND match). Constraints can match node or Docker Engine labels as expression (AND match). Constraints can match node or Docker Engine labels as
follows: follows:
node attribute | matches | example node attribute | matches | example
-------------------|--------------------------|----------------------------------------------- ---------------------|--------------------------------|-----------------------------------------------
`node.id` | Node ID | `node.id==2ivku8v2gvtg4` `node.id` | Node ID | `node.id==2ivku8v2gvtg4`
`node.hostname` | Node hostname | `node.hostname!=node-2` `node.hostname` | Node hostname | `node.hostname!=node-2`
`node.role` | Node role | `node.role==manager` `node.role` | Node role (`manager`/`worker`) | `node.role==manager`
`node.labels` | User-defined node labels | `node.labels.security==high` `node.platform.os` | Node operating system | `node.platform.os==windows`
`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04` `node.platform.arch` | Node architecture | `node.platform.arch==x86_64`
`node.labels` | User-defined node labels | `node.labels.security==high`
`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04`
`engine.labels` apply to Docker Engine labels like operating system, drivers, `engine.labels` apply to Docker Engine labels like operating system, drivers,
@ -691,10 +693,45 @@ node type label equals queue:
```bash ```bash
$ docker service create \ $ docker service create \
--name redis_2 \ --name redis_2 \
--constraint node.platform.os==linux \
--constraint node.labels.type==queue \ --constraint node.labels.type==queue \
redis:3.0.6 redis:3.0.6
``` ```
If the service constraints exclude all nodes in the cluster, a message is printed
that no suitable node is found, but the scheduler will start a reconciliation
loop and deploy the service once a suitable node becomes available.
In the example below, no node satisfying the constraint was found, causing the
service to not reconcile with the desired state:
```bash
$ docker service create \
--name web \
--constraint node.labels.region==east \
nginx:alpine
lx1wrhhpmbbu0wuk0ybws30bc
overall progress: 0 out of 1 tasks
1/1: no suitable node (scheduling constraints not satisfied on 5 nodes)
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
b6lww17hrr4e web replicated 0/1 nginx:alpine
```
After adding the `region=east` label to a node in the cluster, the service
reconciles, and the desired number of replicas are deployed:
```bash
$ docker node update --label-add region=east yswe2dm4c5fdgtsrli1e8ya5l
yswe2dm4c5fdgtsrli1e8ya5l
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
b6lww17hrr4e web replicated 1/1 nginx:alpine
```
### Specify service placement preferences (--placement-pref) ### Specify service placement preferences (--placement-pref)
You can set up the service to divide tasks evenly over different categories of You can set up the service to divide tasks evenly over different categories of