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
PRO

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

    View Slide

  2. RINAT KHABIBIEV
    2
    https://github.com/renskiy https://www.facebook.com/rinat.khabibiev
    PostgreSQL

    View Slide

  3. Музыкальный сервис
    для массовой
    аудитории

    View Slide

  4. 4
    DOCKER: QUIZ

    View Slide

  5. 4
    DOCKER: QUIZ
    •Docker (dev, test, production)

    View Slide

  6. 4
    DOCKER: QUIZ
    •Docker (dev, test, production)
    •Docker in production

    View Slide

  7. 4
    DOCKER: QUIZ
    •Docker (dev, test, production)
    •Docker in production
    •Docker cluster (Swarm, Kubernetes, etc.)

    View Slide

  8. 5
    https://www.docker.com/company
    SOME DOCKER STATISTICS

    View Slide

  9. 6
    TRANSPORT CONTAINER

    View Slide

  10. 7
    DOCKER CONTAINER

    View Slide

  11. 8
    DOCKER IMAGE AND CONTAINERS

    View Slide

  12. 9
    DOCKER SWARM MODE
    Leader

    View Slide

  13. 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.

    View Slide

  14. 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

    View Slide

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

    View Slide

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

    View Slide

  17. 12
    DOCKER SWARM MODE: INGRESS LOAD BALANCING

    View Slide

  18. 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

    View Slide

  19. 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.

    View Slide

  20. 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.

    View Slide

  21. 14
    PROVISIONING, DEPLOY, ORCHESTRATION
    ORCHESTRATION
    PROVISIONING
    DEPLOY

    View Slide

  22. 15
    PROVISIONING, DEPLOY, ORCHESTRATION

    View Slide

  23. 15
    PROVISIONING, DEPLOY, ORCHESTRATION
    • orchestration - достижение и поддержание заданных
    настроек

    View Slide

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

    View Slide

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

    View Slide

  26. 16
    PROVISIONING TOOLS PROVIDE HELP WITH DEPLOY

    View Slide

  27. 16
    PROVISIONING TOOLS PROVIDE HELP WITH DEPLOY
    • built-in support: poor customisation and/or XML/YAML-hell

    View Slide

  28. 16
    PROVISIONING TOOLS PROVIDE HELP WITH DEPLOY
    • built-in support: poor customisation and/or XML/YAML-hell

    View Slide

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

    View Slide

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

    View Slide

  31. 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

    View Slide

  32. 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

    View Slide

  33. 17

    View Slide

  34. 17
    # fabfile.py

    from fabric import api as fab


    @fab.task

    def say_hello():

    """echo "hello" on a remote host"""

    fab.run('echo "hello"')

    View Slide

  35. 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

    View Slide

  36. 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.

    View Slide

  37. FABRICIO
    18
    https://github.com/renskiy/fabricio
    DOCKER DEPLOY AUTOMATION TOOL

    View Slide

  38. 19
    FABRICIO: DEPLOY & ROLLBACK
    DEPLOY

    View Slide

  39. 19
    FABRICIO: DEPLOY & ROLLBACK
    DEPLOY ROLLBACK

    View Slide

  40. 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]'],

    )

    View Slide

  41. 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)

    View Slide

  42. 21
    FABRICIO: INFRASTRUCTURES

    View Slide

  43. 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': [],

    }

    View Slide

  44. 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'
    ...

    View Slide

  45. 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'
    ...

    View Slide

  46. 23
    FABRICIO FEATURES

    View Slide

  47. 23
    FABRICIO FEATURES
    • поддержка Docker контейнеров и сервисов (swarm)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  54. 24
    DOCKER SWARM MODE

    View Slide

  55. • Балансировка запросов
    24
    DOCKER SWARM MODE

    View Slide

  56. • Балансировка запросов
    • Мониторинг состояния нод
    24
    DOCKER SWARM MODE

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  60. 25
    DOCKER SWARM MODE

    View Slide

  61. 25
    DOCKER SWARM MODE
    Вопросы?
    • Fabricio: github.com/renskiy/fabricio
    • Fabric: fabfile.org
    • Docker: docs.docker.com (вдруг кто не знал)

    View Slide