Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker swarm mode — как с этим жить

Docker swarm mode — как с этим жить

Ринат Хабибиев (Zvooq.com) @ MoscowPython 43

"Версия 1.12 подарила адептам Docker возможность разрабатывать автоматически масштабируемые и отказоустойчивые сервисы. Давайте разберём, как это работает, и научимся при помощи Fabricio быстро разворачивать сервисы Docker на произвольной инфраструктуре".

Видео: http://www.moscowpython.ru/meetup/43/docker-swarm-mode-kak-s-etim-zhit/

Moscow Python Meetup

February 22, 2017
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Docker swarm mode - как с этим жить AUTHOR: Rinat

    Khabibiev, 2017 MOSCOW, October 2016 $ fab
  2. 10 DOCKER SWARM MODE INIT $ docker swarm init Swarm

    initialized: current node (ggb0suhodetmzleo9b8c53poz) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-55vqojlc1688irxxak3l6ziijv9wh9vplh9a-5r5db3vtt27c98rzlz77kf2qu \ 192.168.65.2:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
  3. 10 DOCKER SWARM MODE INIT $ docker swarm init Swarm

    initialized: current node (ggb0suhodetmzleo9b8c53poz) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-55vqojlc1688irxxak3l6ziijv9wh9vplh9a-5r5db3vtt27c98rzlz77kf2qu \ 192.168.65.2:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ggb0suhodetmzleo9b8c53poz * moby Ready Active Leader
  4. 11 DOCKER SWARM MODE: SERVICE CREATE $ docker service create

    --replicas 3 --name my-service --network my-network my-image
  5. 11 DOCKER SWARM MODE: SERVICE CREATE $ docker service create

    --replicas 3 --name my-service --network my-network my-image
  6. 13 DOCKER SWARM MODE: SERVICE SCALING $ docker service ps

    my-service ID NAME IMAGE NODE DESIRED STATE CURRENT STATE 0qihejybwf1x my-service.1 my-image worker3 Running Running 8 seconds bk658fpbex0d my-service.2 my-image worker2 Running Running 9 seconds 5ls5s5fldaqg my-service.3 my-image worker1 Running Running 9 seconds
  7. 13 DOCKER SWARM MODE: SERVICE SCALING $ docker service ps

    my-service ID NAME IMAGE NODE DESIRED STATE CURRENT STATE 0qihejybwf1x my-service.1 my-image worker3 Running Running 8 seconds bk658fpbex0d my-service.2 my-image worker2 Running Running 9 seconds 5ls5s5fldaqg my-service.3 my-image worker1 Running Running 9 seconds $ docker service ps my-service Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager.
  8. 13 DOCKER SWARM MODE: SERVICE SCALING $ docker service ps

    my-service ID NAME IMAGE NODE DESIRED STATE CURRENT STATE 0qihejybwf1x my-service.1 my-image worker3 Running Running 8 seconds bk658fpbex0d my-service.2 my-image worker2 Running Running 9 seconds 5ls5s5fldaqg my-service.3 my-image worker1 Running Running 9 seconds $ docker service update --replicas 4 my-service $ docker service ps my-service Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager.
  9. 15 PROVISIONING, DEPLOY, ORCHESTRATION • orchestration - достижение и поддержание

    заданных настроек • provisioning - подготовка инфраструктуры к работе
  10. 15 PROVISIONING, DEPLOY, ORCHESTRATION • orchestration - достижение и поддержание

    заданных настроек • provisioning - подготовка инфраструктуры к работе • deploy - выкладка новой версии приложения
  11. 16 PROVISIONING TOOLS PROVIDE HELP WITH DEPLOY • built-in support:

    poor customisation and/or XML/YAML-hell • external scripts: breaking conventions
  12. 16 PROVISIONING TOOLS PROVIDE HELP WITH DEPLOY • built-in support:

    poor customisation and/or XML/YAML-hell • external scripts: breaking conventions
  13. 16 PROVISIONING TOOLS PROVIDE HELP WITH DEPLOY • built-in support:

    poor customisation and/or XML/YAML-hell • external scripts: breaking conventions • custom extensions: difficulty, versions compatibility
  14. 16 PROVISIONING TOOLS PROVIDE HELP WITH DEPLOY • built-in support:

    poor customisation and/or XML/YAML-hell • external scripts: breaking conventions • custom extensions: difficulty, versions compatibility
  15. 17

  16. 17 # fabfile.py
 from fabric import api as fab
 


    @fab.task
 def say_hello():
 """echo "hello" on a remote host"""
 fab.run('echo "hello"')
  17. 17 # fabfile.py
 from fabric import api as fab
 


    @fab.task
 def say_hello():
 """echo "hello" on a remote host"""
 fab.run('echo "hello"') $ fab --list Available commands: say_hello echo "hello" on a remote host
  18. 17 # fabfile.py
 from fabric import api as fab
 


    @fab.task
 def say_hello():
 """echo "hello" on a remote host"""
 fab.run('echo "hello"') $ fab --list Available commands: say_hello echo "hello" on a remote host $ fab say_hello [example.com] Executing task 'say_hello' [example.com] run: echo "hello" [example.com] out: hello [example.com] out: Done. Disconnecting from example.com... done.
  19. 20 # fabfile.py
 from fabricio import docker, tasks
 
 nginx

    = tasks.DockerTasks(
 service=docker.Service(
 name='nginx',
 image='nginx:stable-alpine',
 options={
 'publish': '80:80',
 'replicas': 2,
 },
 ),
 hosts=['[email protected]'],
 )
  20. 20 # fabfile.py
 from fabricio import docker, tasks
 
 nginx

    = tasks.DockerTasks(
 service=docker.Service(
 name='nginx',
 image='nginx:stable-alpine',
 options={
 'publish': '80:80',
 'replicas': 2,
 },
 ),
 hosts=['[email protected]'],
 ) $ fab --list Available commands: nginx full service deploy (prepare -> push -> upgrade) nginx.deploy full service deploy (prepare -> push -> upgrade) nginx.rollback rollback service to a previous version (migrate-back -> revert) nginx.upgrade upgrade service to a new version (backup -> pull -> migrate -> update)
  21. 21 FABRICIO: INFRASTRUCTURES from fabric import api as fab
 from

    fabricio import tasks
 
 @tasks.infrastructure
 def production():
 fab.env.roledefs = {
 'api': [
 '1.example.com',
 '2.example.com',
 '3.example.com',
 ],
 'cron': [
 'cron.example.com',
 ],
 }
 
 @tasks.infrastructure
 def stage():
 fab.env.roledefs = {
 'api': [
 'test.example.com',
 ],
 'cron': [],
 }
  22. 22 FABRICIO: INFRASTRUCTURES $ fab stage deploy Are you sure

    you want to select test infrastructure to run task(s) on? [y/N] y [[email protected]] Executing task ‘pull' ...
  23. 22 FABRICIO: INFRASTRUCTURES $ fab stage deploy Are you sure

    you want to select test infrastructure to run task(s) on? [y/N] y [[email protected]] Executing task ‘pull' ... $ fab stage.confirm deploy [[email protected]] Executing task ‘pull' ...
  24. 23 FABRICIO FEATURES • поддержка Docker контейнеров и сервисов (swarm)

    • неограниченное количество инфраструктур
  25. 23 FABRICIO FEATURES • поддержка Docker контейнеров и сервисов (swarm)

    • неограниченное количество инфраструктур • сборка образов
  26. 23 FABRICIO FEATURES • поддержка Docker контейнеров и сервисов (swarm)

    • неограниченное количество инфраструктур • сборка образов • работа с Docker registry, в т.ч. через SSH-туннель
  27. 23 FABRICIO FEATURES • поддержка Docker контейнеров и сервисов (swarm)

    • неограниченное количество инфраструктур • сборка образов • работа с Docker registry, в т.ч. через SSH-туннель • применение и откат миграций Django
  28. 23 FABRICIO FEATURES • поддержка Docker контейнеров и сервисов (swarm)

    • неограниченное количество инфраструктур • сборка образов • работа с Docker registry, в т.ч. через SSH-туннель • применение и откат миграций Django • разворачивание кластера PostgreSQL
  29. 23 FABRICIO FEATURES • поддержка Docker контейнеров и сервисов (swarm)

    • неограниченное количество инфраструктур • сборка образов • работа с Docker registry, в т.ч. через SSH-туннель • применение и откат миграций Django • разворачивание кластера PostgreSQL • отказоустойчивый deploy
  30. • Балансировка запросов • Мониторинг состояния нод • Автоматический перенос

    контейнеров с упавшей ноды • Прозрачные масштабирование и обновление 24 DOCKER SWARM MODE
  31. • Балансировка запросов • Мониторинг состояния нод • Автоматический перенос

    контейнеров с упавшей ноды • Прозрачные масштабирование и обновление • Отказоустойчивость 24 DOCKER SWARM MODE
  32. 25 DOCKER SWARM MODE Вопросы? • Fabricio: github.com/renskiy/fabricio • Fabric:

    fabfile.org • Docker: docs.docker.com (вдруг кто не знал)