doc: new readme
This commit is contained in:
parent
518919196d
commit
1235af7b9d
2 changed files with 119 additions and 26 deletions
144
README.md
144
README.md
|
@ -13,26 +13,58 @@ Install and configure docker with swarm
|
||||||
|
|
||||||
## Role variables
|
## Role variables
|
||||||
|
|
||||||
- `swarm_init` - init the cluster, run once with the ansible option `-e swarm_init=true` (default: `false`)
|
| Name | Type | Required | Default | Comment |
|
||||||
- `swarm_manager` - set the cluster role (default: `false`)
|
| ------------------------ | --------- | -------- | ------- | ----------------------------------------------------------------------- |
|
||||||
- `swarm_advertise_addr` - listen address
|
| swarm_init | bool | no | false | init the cluster, run once with the ansible option `-e swarm_init=true` |
|
||||||
- `swarm_join_token_manager` - join token for manager (use `docker swarm join-token manager` after init to set this variable)
|
| swarm_manager | bool | no | false | set the cluster role |
|
||||||
- `swarm_join_token_worker` - join token for worker (use `docker swarm join-token worker` after init to set this variable)
|
| swarm_advertise_addr | str | no | | listen address |
|
||||||
- `swarm_remote_addrs` - manager addresses for slave node
|
| swarm_join_token_manager | str | no | | join token for manager |
|
||||||
- `swarm_networks` - array with the docker networks
|
| swarm_join_token_worker | str | no | | join token for worker |
|
||||||
|
| swarm_remote_addrs | str | no | | manager addresses for slave node |
|
||||||
|
| swarm_networks | dict | no | | array with the docker networks |
|
||||||
|
| swarm_services | dict | no | | hash with the service to manage |
|
||||||
|
| swarm_registry_logins | dict | no | | hash with the registry logins |
|
||||||
|
| swarm_proxy_url | str | no | | set a proxy url for http and https requests |
|
||||||
|
| swarm_proxy_ignore | list(str) | no | | array with ignore host or subnet |
|
||||||
|
|
||||||
```
|
### swarm_networks
|
||||||
|
|
||||||
|
| Name | Type | Required | Default | Comment |
|
||||||
|
| ------ | ---- | -------- | ------- | ---------------------------------------------- |
|
||||||
|
| key | str | yes | | network name |
|
||||||
|
| driver | str | no | overlay | docker drive to use |
|
||||||
|
| state | str | no | present | create network if present, or delete if absent |
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```yaml
|
||||||
proxy:
|
proxy:
|
||||||
state: present
|
state: present
|
||||||
```
|
```
|
||||||
|
|
||||||
- `swarm_services` - hash with the service to manage
|
### swarm_services
|
||||||
|
|
||||||
```
|
| Name | Type | Required | Default | Comment |
|
||||||
|
| ---------------- | ---------- | -------- | ------- | ----------------------------------------------------------- |
|
||||||
|
| key | str | yes | | Service name |
|
||||||
|
| image | str | yes | | Service image path and tag |
|
||||||
|
| args | list(str) | no | | List arguments to be passed to the container |
|
||||||
|
| mounts | list(dict) | no | | List of dictionaries describing the service mounts |
|
||||||
|
| networks | list(str) | no | | List of the service networks name |
|
||||||
|
| publish | list(dict) | no | | List of dictionaries describing the service published ports |
|
||||||
|
| replicas | int | no | 1 | Number of containers instantiated in the service |
|
||||||
|
| limits | dict | no | | Configures service resource limits |
|
||||||
|
| env | dict | no | | List or dictionary of the service environment variables |
|
||||||
|
| container_labels | dict | no | | Dictionary of key value pairs. |
|
||||||
|
| state | str | no | present | |
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```yaml
|
||||||
wordpress:
|
wordpress:
|
||||||
image: wordpress:latest
|
image: wordpress:latest
|
||||||
args:
|
args:
|
||||||
- '--api'
|
- "--api"
|
||||||
mounts:
|
mounts:
|
||||||
- source: /opt/data
|
- source: /opt/data
|
||||||
target: /usr/local/data
|
target: /usr/local/data
|
||||||
|
@ -52,13 +84,48 @@ wordpress:
|
||||||
WORDPRESS_DB_PASSWORD: wordpress
|
WORDPRESS_DB_PASSWORD: wordpress
|
||||||
container_labels:
|
container_labels:
|
||||||
region: FR
|
region: FR
|
||||||
init: false
|
|
||||||
state: present
|
state: present
|
||||||
```
|
```
|
||||||
|
|
||||||
- `swarm_registry_logins` - hash with the registry logins
|
#### swarm_services -> mounts
|
||||||
|
|
||||||
```
|
See all options [documentation](https://docs.ansible.com/ansible/2.9/modules/docker_swarm_service_module.html#parameter-mounts)
|
||||||
|
|
||||||
|
| Name | Type | Required | Default | Comment |
|
||||||
|
| ------ | ---- | -------- | ------- | ------------------------------------------------------ |
|
||||||
|
| source | str | no | | Mount source, must be specified if type is not `tmpfs` |
|
||||||
|
| target | str | yes | | Container path |
|
||||||
|
| type | str | no | bind | The mount type |
|
||||||
|
|
||||||
|
#### swarm_services -> publish
|
||||||
|
|
||||||
|
| Name | Type | Required | Default | Comment |
|
||||||
|
| -------------- | ---- | -------- | ------- | --------------------------------------------- |
|
||||||
|
| mode | str | yes | | What publish mode to use. `ingress` or `host` |
|
||||||
|
| protocol | str | no | tcp | What protocol to use. `tcp` or `udp` |
|
||||||
|
| published_port | int | yes | | The port to make externally available |
|
||||||
|
| target_port | int | yes | | The port inside the container to expose |
|
||||||
|
|
||||||
|
#### swarm_services -> limits
|
||||||
|
|
||||||
|
| Name | Type | Required | Default | Comment |
|
||||||
|
| ------ | ----- | -------- | ------- | ------------------------------------------------- |
|
||||||
|
| cpus | float | no | | Service CPU limit |
|
||||||
|
| memory | str | no | | Service memory limit in format `<number>[<unit>]` |
|
||||||
|
|
||||||
|
### swarm_registry_logins
|
||||||
|
|
||||||
|
| Name | Type | Required | Default | Comment |
|
||||||
|
| ----------------- | ---- | -------- | --------------- | -------------------------------------- |
|
||||||
|
| key | str | yes | | registry name |
|
||||||
|
| registry_url | str | yes | | registry url |
|
||||||
|
| registry_username | str | yes | | registry username for authentification |
|
||||||
|
| registry_password | str | yes | | registry password |
|
||||||
|
| user | str | no | ansible_user_id | |
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```yaml
|
||||||
gitlab:
|
gitlab:
|
||||||
registry_url: registry.gitlab.com
|
registry_url: registry.gitlab.com
|
||||||
registry_username: myaccount
|
registry_username: myaccount
|
||||||
|
@ -66,22 +133,49 @@ gitlab:
|
||||||
user: www-data
|
user: www-data
|
||||||
```
|
```
|
||||||
|
|
||||||
- `swarm_proxy_url` - set a proxy url for http and https requests
|
|
||||||
- `swarm_proxy_ignore` - array with ignore host or subnet
|
|
||||||
|
|
||||||
```
|
|
||||||
- localhost
|
|
||||||
- 10.0.0.0/8
|
|
||||||
```
|
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
|
|
||||||
- Install:
|
- On the first machine, init cluster `ansible-playbook swarm.yml -e swarm_init=true`
|
||||||
|
- Get docker manager and worker join token and set variable `docker_swarm_join_token_manager` and `dockerèswarm_joint_token_worker`
|
||||||
|
|
||||||
```
|
```sh
|
||||||
|
docker swarm join-token manager -q
|
||||||
|
docker swarm join-token worker -q
|
||||||
|
```
|
||||||
|
|
||||||
|
- Run playbook normally on other machine
|
||||||
|
|
||||||
|
```yaml
|
||||||
- hosts: server
|
- hosts: server
|
||||||
roles:
|
roles:
|
||||||
- docker
|
- swarm
|
||||||
|
swarm_manager: true
|
||||||
|
swarm_remote_addrs:
|
||||||
|
- 192.168.0.1
|
||||||
|
- 192.168.0.2
|
||||||
|
- 192.168.0.3
|
||||||
|
swarm_init: true
|
||||||
|
swarm_join_token_worker: SWMTKN-1-2z1gzk9jdbpfw1paskodk6zc1fm5g0n5c293oz1taqii310a8u-1mjm55313up7tiksb0s3nr9lr
|
||||||
|
swarm_join_token_manager: SWMTKN-1-2z1gzk9jdbpfw1paskodk6zc1fm5g0n5c293oz1taqii310a8u-5644pyqmiexexfke6e1ycn11z
|
||||||
|
swarm_networks:
|
||||||
|
proxy:
|
||||||
|
driver: overlay
|
||||||
|
scope: swarm
|
||||||
|
swarm_services:
|
||||||
|
traefik:
|
||||||
|
image: traefik:3.0
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
args:
|
||||||
|
- "--providers.swarm=true"
|
||||||
|
- "--providers.swarm.network=proxy"
|
||||||
|
- "--entrypoints.http.address=:80"
|
||||||
|
publish:
|
||||||
|
- published_port: 80
|
||||||
|
target_port: 80
|
||||||
|
mounts:
|
||||||
|
- source: /var/run/docker.sock
|
||||||
|
target: /var/run/docker.sock
|
||||||
```
|
```
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
|
@ -39,7 +39,6 @@
|
||||||
env: '{{ item.value.env | default({}) }}'
|
env: '{{ item.value.env | default({}) }}'
|
||||||
labels: '{{ item.value.labels | default(omit) }}'
|
labels: '{{ item.value.labels | default(omit) }}'
|
||||||
container_labels: '{{ item.value.container_labels | default(omit) }}'
|
container_labels: '{{ item.value.container_labels | default(omit) }}'
|
||||||
init: '{{ item.value.init | default(omit) }}'
|
|
||||||
state: '{{ item.value.state | default("present") }}'
|
state: '{{ item.value.state | default("present") }}'
|
||||||
loop: '{{ swarm_services | dict2items }}'
|
loop: '{{ swarm_services | dict2items }}'
|
||||||
loop_control:
|
loop_control:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue