Контейнеры должны быть эфемерными и поэтому отлично масштабируются для приложений без сохранения состояния. Контейнеры с состоянием, такие как 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/ | sh
curl -sSL https://get.docker.com/ | sh
. Более подробные инструкции доступны на Get Docker для Ubuntu . - Включите доступ
sudo usermod -aG docker ubuntu
root для команды 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 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
Портворкс Контейнер
- Физическая структура хранилища каждого узла, все выделенные тома в кластере, а также их сопоставления контейнеров хранятся в кластере 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 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
Он показывает общую емкость, доступную и использованную.
Объем докера
- Давайте создадим том Docker:
1
docker volume create -d pxd -o size=10G -o fs=ext4 --name cbvol
Более подробную информацию об этой команде можно найти в разделе Создание томов с помощью Docker .
- Проверьте список доступных томов с помощью команды
docker volume ls
:1234DRIVER VOLUME NAME
local 70f7b9a356df4c1f0c08e13a4e813f1ef3e174a91001f277a63b62d683a27159
pxd cbvol
local f7bc5fa455a88638c106881f1bce98244b670e094d5fdc47917b53a88e46c073
Как показано,
cbvol
создается сpxd
драйвераpxd
.
Couchbase с объемом Portworx
- Создайте контейнер Couchbase, используя том Portworx:
1234567
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. - Войдите в Couchbase Web Console по адресу http: // <public-ip>: 8091, используйте имя
Administrator
иpassword
качестве пароля. - Перейдите в Data Buckets и создайте новый контейнер данных pwx:
- В экземпляре EC2 см. Список контейнеров:
12345
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
работают. - Убить контейнер
db
:1docker container rm -f db
- Перезапустите контейнер базы данных как:
1234567
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 в контейнерах?
Ссылка: | Контейнеры Stateful с использованием Portworx и Couchbase от нашего партнера по JCG Аруна Гупта в блоге Miles to go 3.0… . |