-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
316 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,299 @@ | ||
|
||
# Docker Swarm справочник # | ||
|
||
## Терминология: ## | ||
- Service - описание того, какие контейнеры будут создаваться. Кроме стандартных полей docker в режиме swarm поддерживает ряд дополнительных, большинство из которых находятся внутри секции deploy. Один service запускает определенное количество tasks. | ||
|
||
- Stack - это набор сервисов, которые логически связаны между собой. По сути это набор сервисов, которые мы описываем в обычном compose файле. Части stack (services) могут располагаться как на одной ноде, так и на разных. | ||
|
||
- Task — это атомарная запланированная единица Docker Swarm, которая содержит информацию о контейнере и команду, которая должна запущена внутри контейнера. | ||
|
||
- Реплика – каждый контейнер, который запускается на ноде. Количество реплик — это ожидаемое число всех контейнеров для данной service | ||
|
||
### Режимы деплоя сервисов: ### | ||
|
||
- replicated service - указанное количество реплицируемых контейнеров распределяются между узлами на основе стратегии планированния | ||
- global service - один контейнер запускается на каждом доступном узле в кластере | ||
|
||
### Порты ### | ||
Для manager нод: | ||
``` | ||
firewall-cmd --add-port=2376/tcp --permanent; | ||
firewall-cmd --add-port=2377/tcp --permanent; | ||
firewall-cmd --add-port=7946/tcp --permanent; | ||
firewall-cmd --add-port=7946/udp --permanent; | ||
firewall-cmd --add-port=4789/udp --permanent; | ||
firewall-cmd --reload; | ||
``` | ||
|
||
Для worker нод: | ||
``` | ||
firewall-cmd --add-port=2376/tcp --permanent; | ||
firewall-cmd --add-port=7946/tcp --permanent; | ||
firewall-cmd --add-port=7946/udp --permanent; | ||
firewall-cmd --add-port=4789/udp --permanent; | ||
firewall-cmd --reload; | ||
``` | ||
|
||
## Инициализация и управление Swarm-кластером ## | ||
|
||
- Инициализация Docker Swarm, превращая текущий узел в менеджер кластера. | ||
``` | ||
docker swarm init --advertise-addr <manager_ip> | ||
# <manager_ip> - IP-адрес менеджера (указание необходимо в случае с несколькими интерфейсами) | ||
``` | ||
|
||
- Выводит токен для присоединения к кластеру как рабочий узел или менеджер. | ||
|
||
``` | ||
docker swarm join-token worker # Токен для рабочих узлов | ||
docker swarm join-token manager # Токен для менеджеров | ||
``` | ||
|
||
- Присоединение узла к существующему кластеру. | ||
|
||
``` | ||
docker swarm join --token <join_token> <manager_ip>:2377 | ||
# <join_token> - токен для добавления в кластер | ||
# <manager_ip>:2377 - IP-адрес и порт менеджера | ||
``` | ||
|
||
- Отключение узла от кластера. | ||
``` | ||
docker swarm leave --force | ||
``` | ||
|
||
## Управление нодами ## | ||
- Выводит список узлов в Swarm-кластере. | ||
|
||
``` | ||
docker node ls | ||
``` | ||
|
||
- Выводит список тасок на ноде в Swarm-кластере. | ||
``` | ||
docker node ps | ||
``` | ||
|
||
|
||
- Посмотреть параметры ноды: | ||
``` | ||
docker node inspect <node_id> --pretty | ||
# <node_id> - идентификатор узла | ||
``` | ||
|
||
- Обновление настроек узла (например, понижение или повышение до менеджера или временное выключение-включение (drain-active)). | ||
``` | ||
docker node update --role manager <node_id> | ||
docker node update --availability drain | ||
docker node update <node_id> --availability active | ||
docker node update --label-add foo --label-add bar=baz <node_id> | ||
# foo,bar=baz - добавляемые ярлыки на ноду | ||
``` | ||
|
||
- Повысить до менеджера (promote) или понизить до воркера (demote) ноду | ||
``` | ||
docker node promote <node_id> | ||
docker node demote <node_id> | ||
``` | ||
|
||
- Удаление узла из кластера. | ||
``` | ||
docker node rm <node_id> | ||
``` | ||
|
||
## Работа со стеками ## | ||
|
||
- Развертывание стека из docker-compose.yml в Swarm-кластере. | ||
``` | ||
docker stack deploy --with-registry-auth -c <compose_file> <stack_name> | ||
# --with-registry-auth - позволяет передать авторизационные данные на worker ноды, для того чтобы использовался один и тот же образ из регистра (Опционально) | ||
# <compose_file> - путь к файлу docker-compose.yml | ||
# <stack_name> - имя стека | ||
``` | ||
|
||
- список всех стеков в кластере | ||
``` | ||
docker stack ls | ||
``` | ||
|
||
- Список тасок стека | ||
``` | ||
docker stack ps stack_name | ||
``` | ||
|
||
- Удаление стека и его сервисов. | ||
``` | ||
docker stack rm <stack_name> | ||
``` | ||
|
||
- Список всех сервисов, работающих в стеке. | ||
``` | ||
docker stack services <stack_name> | ||
``` | ||
|
||
## Управление сервисами ## | ||
|
||
- Создание нового сервиса. | ||
``` | ||
docker service create --name <service_name> <image> | ||
# <service_name> - имя сервиса | ||
# <image> - образ для запуска | ||
``` | ||
|
||
- Вывод списка всех сервисов. | ||
``` | ||
docker service ls | ||
``` | ||
|
||
- Обновление сервиса (например, изменение числа реплик). | ||
``` | ||
docker service update --replicas <number> <service_name> | ||
# <number> - число реплик | ||
# <service_name> - имя сервиса | ||
docker service update --image user/container:1.2 userserv | ||
docker service update --force --update-parallelism 1 --update-delay 30s nginx | ||
docker service update --update-parallelism 5--update-delay 2s --image user/container:1.2 userserv | ||
docker service update --limit-cpu 2 nginx | ||
docker service update --replicas=5 nginx | ||
``` | ||
|
||
- Просмотр журнала для конкретного сервиса: | ||
``` | ||
docker service logs <service_name> | ||
``` | ||
|
||
- Удаление сервиса. | ||
``` | ||
docker service rm <service_name> | ||
# <service_name> - имя сервиса | ||
``` | ||
|
||
- Масштабирование сервиса до указанного числа реплик. | ||
``` | ||
docker service scale <service_name>=<replicas> | ||
# <replicas> - количество реплик | ||
``` | ||
|
||
## Работа с секретами ### | ||
|
||
Swarm предоставляет хранилище для приватных данных (secrets), которые необходимы контейнерам. Как правило эта функциональность используется для хранения логинов, паролей, ключей шифрования и токенов доступа от внешних систем, БД и т.д. | ||
|
||
- Создание секрета: | ||
``` | ||
docker secret create main_config <example.yaml> | ||
# | ||
# example.yaml | ||
# token: sfsjksajflsf_secret | ||
# | ||
``` | ||
|
||
- Посмотреть список секретов: | ||
``` | ||
docker secret ls | ||
``` | ||
|
||
## Работа с сетью ## | ||
|
||
- Создание сети в режиме overlay (для использования в Swarm). | ||
``` | ||
docker network create --driver overlay <network_name> | ||
# <network_name> - имя сети | ||
``` | ||
|
||
- Список сетей, доступных в кластере. | ||
``` | ||
docker network ls | ||
``` | ||
|
||
- Удаление сети. | ||
``` | ||
docker network rm <network_name> | ||
# <network_name> - имя сети | ||
``` | ||
|
||
## Работа с томами ## | ||
|
||
- Создание нового тома. | ||
``` | ||
docker volume create <volume_name> | ||
# <volume_name> - имя тома | ||
``` | ||
|
||
- Вывод списка томов. | ||
``` | ||
docker volume ls | ||
``` | ||
|
||
- Удаление тома | ||
``` | ||
docker volume rm <volume_name> | ||
# <volume_name> - имя тома | ||
``` | ||
|
||
## stack-шаблон ## | ||
``` | ||
version: "3" | ||
services: | ||
some-db: | ||
image: my-db:latest | ||
volumes: | ||
- db-data:/data | ||
networks: | ||
my-net: | ||
aliases: | ||
- db | ||
deploy: | ||
placement: | ||
constraints: [node.role == manager] | ||
some-app: | ||
image: some-app:latest | ||
networks: | ||
- my-net | ||
depends_on: | ||
- some-db | ||
deploy: | ||
mode: replicated | ||
replicas: 2 | ||
labels: [APP=SOME-APP] | ||
resources: | ||
limits: | ||
cpus: '0.25' | ||
memory: 512M | ||
reservations: | ||
cpus: '0.25' | ||
memory: 256M | ||
restart_policy: | ||
condition: on-failure | ||
delay: 5s | ||
max_attempts: 3 | ||
window: 120s | ||
update_config: | ||
parallelism: 1 | ||
delay: 10s | ||
failure_action: continue | ||
monitor: 60s | ||
max_failure_ratio: 0.3 | ||
placement: | ||
constraints: [node.role == worker] | ||
networks: | ||
my-app: | ||
volumes: | ||
db-data: | ||
``` | ||
|
||
--- | ||
* [https://docs.docker.com/engine/swarm/](https://docs.docker.com/engine/swarm/) |