Статьи

Контейнеры с сохранением состояния с использованием Portworx и Couchbase

Контейнеры должны быть эфемерными и поэтому отлично масштабируются для приложений без сохранения состояния. Контейнеры с состоянием, такие как Couchbase, должны обрабатываться по-разному. Управление сохранением для контейнеров Docker дает отличный обзор того, как управлять сохранением для контейнеров с состоянием.

В этом блоге объясняется, как использовать подключаемые модули Docker Volume и Portworx для создания контейнера с состоянием.

Почему Портворкс?

Portworx — это простой в развертывании сервис контейнерных данных, который обеспечивает постоянство, репликацию, моментальные снимки, шифрование, безопасный RBAC и многое другое. Некоторые из преимуществ:

  1. Гранулированные тома контейнеров — Portworx может принимать несколько томов EBS на хост, объединять емкость и извлекать виртуальные (мягкие) тома контейнеров на контейнер.
  2. Зона перекрестной доступности HA — Portworx будет защищать данные на уровне блоков в нескольких экземплярах вычислений в зонах доступности. Поскольку контроллеры репликации перезапускают модули на разных узлах, данные по-прежнему будут в высокой степени доступны на этих узлах.
  3. Поддержка операций с корпоративными данными — Portworx реализует детализированные моментальные снимки контейнеров, класс обслуживания, размещаемый поверх доступных физических томов.
  4. Простота развертывания и предоставления — сам Portworx развертывается в виде контейнера и интегрируется с инструментами оркестровки. DevOps может программно предоставлять хранилище гранулированных контейнеров с любым свойством, таким как размер, класс обслуживания, ключ шифрования и т. Д.

Настройка экземпляра AWS EC2

Portworx работает только на Linux или CoreOS. Настройте экземпляр Ubuntu на AWS EC2:

  1. Запустите экземпляр Ubuntu 14.04 с m3.medium экземпляра m3.medium . Обязательно добавьте порт 8091 в правила безопасности входящего трафика. Это позволяет веб-консоли Couchbase быть доступной впоследствии.
  2. Войдите в экземпляр EC2 с помощью команды: ssh -i ~/.ssh/arun-cb-west1.pem ubuntu@<public-ip>
  3. Обновите экземпляр Ubuntu: sudo apt-get update
  4. Установите Docker: curl -sSL https://get.docker.com/ | sh curl -sSL https://get.docker.com/ | sh . Более подробные инструкции доступны на Get Docker для Ubuntu .
  5. Включите доступ sudo usermod -aG docker ubuntu root для команды docker: sudo usermod -aG docker ubuntu
  6. Выйдите из экземпляра EC2 и войдите снова

Создать том AWS EBS

  1. Создайте том EBS для 10 ГБ, используя консоль EC2, как описано в документации .
  2. Получить идентификатор экземпляра из консоли EC2. Присоедините этот том к экземпляру EC2, используя этот идентификатор экземпляра, используйте имя устройства по умолчанию /dev/sdf.

    /dev/sdf.

  3. Используйте команду lsblk в экземпляре EC2, чтобы убедиться, что том подключен к экземпляру:
    1
    2
    3
    4
    5
    NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0   8G  0 disk
    └─xvda1 202:1    0   8G  0 part /
    xvdb    202:16   0  30G  0 disk /mnt
    xvdf    202:80   0  10G  0 disk

Портворкс Контейнер

  1. Физическая структура хранилища каждого узла, все выделенные тома в кластере, а также их сопоставления контейнеров хранятся в кластере etcd. Запустите кластер etcd:
    1
    2
    3
    4
    5
    docker run -v \
      /data/varlib/etcd \
      -p 4001:4001 \
      -d \
      portworx/etcd:latest
  2. По умолчанию корневым томам запрещен общий доступ. Включите это с помощью команды:
    1
    sudo mount --make-shared /

    Это объясняется более подробно в разделе «Конфигурация Ubuntu и общие ресурсы» .

  3. Контейнер PX-Developer (px-dev) на сервере с Docker Engine превращает этот сервер в масштабируемый узел хранения. PX-Enterprise, с другой стороны, обеспечивает поддержку нескольких кластеров и нескольких облаков, когда управление хранилищем может быть локальным или в общедоступном облаке, например AWS.
    Для этого блога мы запустим контейнер px-dev:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    docker run --restart=always --name px -d --net=host \
      --privileged=true                             \
      -v /run/docker/plugins:/run/docker/plugins    \
      -v /var/lib/osd:/var/lib/osd:shared           \
      -v /dev:/dev                                  \
      -v /etc/pwx:/etc/pwx                          \
      -v /opt/pwx/bin:/export_bin:shared            \
      -v /var/run/docker.sock:/var/run/docker.sock  \
      -v /var/cores:/var/cores                      \
      -v /usr/src:/usr/src                           \
      --ipc=host                                    \
      portworx/px-dev -daemon -k etcd://localhost:4001 -c cluster1 -s /dev/xvdf

    Полная информация об этой команде доступна в Run PX с Docker .

  4. Найдите журналы, используя журналы docker container logs -f px и следите за следующими утверждениями:
    1
    2
    3
    4
    time="2017-02-16T05:33:26Z" level=info msg="Initialize the scheduler client and the scheduler watch"
    time="2017-02-16T05:33:26Z" level=info msg="Started a kvdb watch on key : scheduler/containers"
    time="2017-02-16T05:33:26Z" level=info msg="Started a kvdb watch on key : scheduler/volumes"
    time="2017-02-16T05:33:26Z" level=info msg="Started a kvdb watch on key : scheduler/nodes/list"
  5. Проверьте состояние подключенных томов, доступных для Portworx, используя статус sudo /opt/pwx/bin/pxctl status чтобы увидеть вывод:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    Status: PX is operational
    Node ID: 679b79b1-f4c3-413e-a8e0-c527348647c9
        IP: 172.31.25.21
         Local Storage Pool: 1 pool
        Pool    IO_Priority    Size    Used    Status    Zone    Region
        0    LOW        10 GiB    266 MiB    Online    a    us-west-1
        Local Storage Devices: 1 device
        Device    Path        Media Type        Size        Last-Scan
        0:1    /dev/xvdf    STORAGE_MEDIUM_SSD    10 GiB        16 Feb 17 05:33 UTC
        total            -            10 GiB
    Cluster Summary
        Cluster ID: cluster1
        Node IP: 172.31.25.21 - Capacity: 266 MiB/10 GiB Online (This node)
    Global Storage Pool
        Total Used        :  266 MiB
        Total Capacity    :  10 GiB

    Он показывает общую емкость, доступную и использованную.

Объем докера

  1. Давайте создадим том Docker:
    1
    docker volume create -d pxd -o size=10G -o fs=ext4 --name cbvol

    Более подробную информацию об этой команде можно найти в разделе Создание томов с помощью Docker .

  2. Проверьте список доступных томов с помощью команды docker volume ls :
    1
    2
    3
    4
    DRIVER              VOLUME NAME
    local               70f7b9a356df4c1f0c08e13a4e813f1ef3e174a91001f277a63b62d683a27159
    pxd                 cbvol
    local               f7bc5fa455a88638c106881f1bce98244b670e094d5fdc47917b53a88e46c073

    Как показано, cbvol создается с pxd драйвера pxd .

Couchbase с объемом Portworx

  1. Создайте контейнер Couchbase, используя том Portworx:
    1
    2
    3
    4
    5
    6
    7
    docker container run \
      -d \
      --name db \
      -v cbvol:/opt/couchbase/var \
      -p 8091-8094:8091-8094 \
      -p 11210:11210 \
      arungupta/couchbase

    Обратите внимание, как /opt/couchbase/var где все данные Couchbase хранятся в контейнере, сопоставляется с томом cbvol на хосте. Этот том сопоставлен с Portworx.

  2. Войдите в Couchbase Web Console по адресу http: // <public-ip>: 8091, используйте имя Administrator и password качестве пароля.
  3. Перейдите в Data Buckets и создайте новый контейнер данных pwx:
  4. В экземпляре EC2 см. Список контейнеров:
    1
    2
    3
    4
    5
    ubuntu@ip-172-31-25-21:~$ docker container ls
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                                                                               NAMES
    8ae763d9d53b        arungupta/couchbase    "/entrypoint.sh /o..."   5 minutes ago       Up 5 minutes        0.0.0.0:8091-8094->8091-8094/tcp, 11207/tcp, 11211/tcp, 0.0.0.0:11210->11210/tcp, 18091-18093/tcp   db
    5423bcd9b426        portworx/px-dev        "/docker-entry-poi..."   14 minutes ago      Up 14 minutes                                                                                                           px
    cf3c779a4459        portworx/etcd:latest   "/entrypoint.sh /b..."   21 minutes ago      Up 21 minutes       2379-2380/tcp, 7001/tcp, 0.0.0.0:4001->4001/tcp                                                     youthful_jepsen

    Контейнеры etcd , px-dev и db работают.

  5. Убить контейнер db :
    1
    docker container rm -f db
  6. Перезапустите контейнер базы данных как:
    1
    2
    3
    4
    5
    6
    7
    docker container run \
      -d \
      --name db \
      -v cbvol:/opt/couchbase/var \
      -p 8091-8094:8091-8094 \
      -p 11210:11210 \
      arungupta/couchbase

    Теперь, поскольку cbvol отображается в /opt/couchbase/var , данные сохраняются при перезапусках. Это можно проверить, открыв веб-консоль Couchbase и проверив созданную ранее pwx .

Еще одна интересная перспектива также в том, почему базы данных не для контейнеров? , То, что есть Docker, не означает, что все ваши потребности в базе данных должны быть Dockerized. Но если вам нужно, то существует множество вариантов, которые можно использовать в приложениях промышленного уровня.

Хотите узнать больше о запуске Couchbase в контейнерах?