Контейнеры должны быть эфемерными и поэтому отлично масштабируются для приложений без сохранения состояния. Контейнеры с состоянием, такие как Couchbase, должны обрабатываться по-разному. Управление сохранением для контейнеров Docker дает отличный обзор того, как управлять сохранением для контейнеров с состоянием.
В этом блоге объясняется, как использовать подключаемые модули Docker Volume и Portworx для создания контейнера с состоянием.
Почему Портворкс?
Portworx — это простой в развертывании сервис контейнерных данных, который обеспечивает постоянство, репликацию, моментальные снимки, шифрование, безопасный RBAC и многое другое. Некоторые из преимуществ:
- Гранулированные тома контейнеров — Portworx может принимать несколько томов EBS на хост, объединять емкость и извлекать виртуальные (мягкие) тома контейнеров на контейнер.
- Зона перекрестной доступности HA — Portworx будет защищать данные на уровне блоков в нескольких экземплярах вычислений в зонах доступности. Поскольку контроллеры репликации перезапускают модули на разных узлах, данные по-прежнему будут в высокой степени доступны на этих узлах.
- Поддержка операций с корпоративными данными — Portworx реализует детализированные моментальные снимки контейнеров, класс обслуживания, размещаемый поверх доступных физических томов.
- Простота развертывания и предоставления — сам Portworx развертывается в виде контейнера и интегрируется с инструментами оркестровки. DevOps может программно предоставлять хранилище гранулированных контейнеров с любым свойством, таким как размер, класс обслуживания, ключ шифрования и т. Д.
Настройка экземпляра AWS EC2
Portworx работает только на Linux или CoreOS. Настройте экземпляр Ubuntu на AWS EC2:
- Запустите экземпляр Ubuntu 14.04 с
m3.mediumэкземпляраm3.medium. Обязательно добавьте порт 8091 в правила безопасности входящего трафика. Это позволяет веб-консоли Couchbase быть доступной впоследствии. - Войдите в экземпляр EC2 с помощью команды:
ssh -i ~/.ssh/arun-cb-west1.pem ubuntu@<public-ip> - Обновите экземпляр Ubuntu:
sudo apt-get update - Установите Docker:
curl -sSL https://get.docker.com/ | shcurl -sSL https://get.docker.com/ | sh. Более подробные инструкции доступны на Get Docker для Ubuntu . - Включите доступ
sudo usermod -aG docker ubunturoot для команды docker:sudo usermod -aG docker ubuntu - Выйдите из экземпляра EC2 и войдите снова
Создать том AWS EBS
- Создайте том EBS для 10 ГБ, используя консоль EC2, как описано в документации .
- Получить идентификатор экземпляра из консоли EC2. Присоедините этот том к экземпляру EC2, используя этот идентификатор экземпляра, используйте имя устройства по умолчанию
/dev/sdf.
/dev/sdf.
- Используйте команду
lsblkв экземпляре EC2, чтобы убедиться, что том подключен к экземпляру:12345NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 8G 0 disk└─xvda1 202:1 0 8G 0 part /xvdb 202:16 0 30G 0 disk/mntxvdf 202:80 0 10G 0 disk
Портворкс Контейнер
- Физическая структура хранилища каждого узла, все выделенные тома в кластере, а также их сопоставления контейнеров хранятся в кластере etcd. Запустите кластер etcd:
12345
docker run -v\/data/varlib/etcd\-p 4001:4001 \-d \portworx/etcd:latest - По умолчанию корневым томам запрещен общий доступ. Включите это с помощью команды:
1
sudo mount --make-shared /Это объясняется более подробно в разделе «Конфигурация Ubuntu и общие ресурсы» .
- Контейнер PX-Developer (px-dev) на сервере с Docker Engine превращает этот сервер в масштабируемый узел хранения. PX-Enterprise, с другой стороны, обеспечивает поддержку нескольких кластеров и нескольких облаков, когда управление хранилищем может быть локальным или в общедоступном облаке, например AWS.
Для этого блога мы запустим контейнер px-dev:010203040506070809101112docker 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 .
- Найдите журналы, используя журналы
docker container logs -f pxи следите за следующими утверждениями:1234time="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" - Проверьте состояние подключенных томов, доступных для Portworx, используя статус
sudo /opt/pwx/bin/pxctl statusчтобы увидеть вывод:01020304050607080910111213141516Status: PX is operationalNode ID: 679b79b1-f4c3-413e-a8e0-c527348647c9IP:172.31.25.21Local Storage Pool:1poolPool IO_Priority Size Used Status Zone Region0LOW10GiB266MiB Online a us-west-1Local Storage Devices:1deviceDevice Path Media Type Size Last-Scan0:1/dev/xvdf STORAGE_MEDIUM_SSD10GiB16Feb1705:33UTCtotal -10GiBCluster SummaryCluster ID: cluster1Node IP:172.31.25.21- Capacity:266MiB/10GiB Online (This node)Global Storage PoolTotal Used :266MiBTotal Capacity :10GiBОн показывает общую емкость, доступную и использованную.
Объем докера
- Давайте создадим том Docker:
1
docker volume create -d pxd -o size=10G -o fs=ext4 --name cbvolБолее подробную информацию об этой команде можно найти в разделе Создание томов с помощью Docker .
- Проверьте список доступных томов с помощью команды
docker volume ls:1234DRIVER VOLUME NAMElocal 70f7b9a356df4c1f0c08e13a4e813f1ef3e174a91001f277a63b62d683a27159pxd cbvollocal f7bc5fa455a88638c106881f1bce98244b670e094d5fdc47917b53a88e46c073Как показано,
cbvolсоздается сpxdдрайвераpxd.
Couchbase с объемом Portworx
- Создайте контейнер Couchbase, используя том Portworx:
1234567
docker container run \-d \--name db \-v cbvol:/opt/couchbase/var \-p8091-8094:8091-8094\-p11210:11210\arungupta/couchbaseОбратите внимание, как
/opt/couchbase/varгде все данные Couchbase хранятся в контейнере, сопоставляется с томомcbvolна хосте. Этот том сопоставлен с Portworx. - Войдите в Couchbase Web Console по адресу http: // <public-ip>: 8091, используйте имя
Administratorиpasswordкачестве пароля. - Перейдите в Data Buckets и создайте новый контейнер данных pwx:
- В экземпляре EC2 см. Список контейнеров:
12345
ubuntu@ip-172-31-25-21:~$ docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8ae763d9d53b arungupta/couchbase"/entrypoint.sh /o..."5minutes ago Up5minutes0.0.0.0:8091-8094->8091-8094/tcp,11207/tcp,11211/tcp,0.0.0.0:11210->11210/tcp,18091-18093/tcp db5423bcd9b426 portworx/px-dev"/docker-entry-poi..."14minutes ago Up14minutes pxcf3c779a4459 portworx/etcd:latest"/entrypoint.sh /b..."21minutes ago Up21minutes2379-2380/tcp,7001/tcp,0.0.0.0:4001->4001/tcp youthful_jepsenКонтейнеры
etcd,px-devиdbработают. - Убить контейнер
db:1docker container rm -f db - Перезапустите контейнер базы данных как:
1234567
docker container run \-d \--name db \-v cbvol:/opt/couchbase/var \-p8091-8094:8091-8094\-p11210:11210\arungupta/couchbaseТеперь, поскольку
cbvolотображается в/opt/couchbase/var, данные сохраняются при перезапусках. Это можно проверить, открыв веб-консоль Couchbase и проверив созданную ранееpwx.
Еще одна интересная перспектива также в том, почему базы данных не для контейнеров? , То, что есть Docker, не означает, что все ваши потребности в базе данных должны быть Dockerized. Но если вам нужно, то существует множество вариантов, которые можно использовать в приложениях промышленного уровня.
Хотите узнать больше о запуске Couchbase в контейнерах?
| Ссылка: | Контейнеры Stateful с использованием Portworx и Couchbase от нашего партнера по JCG Аруна Гупта в блоге Miles to go 3.0… . |

