Los contenedores están pensados para ser efímeros, por lo que escalan bastante bien para aplicaciones sin estado. Los contenedores con estado, como Couchbase, necesitan un tratamiento diferente. Gestión de la persistencia para contenedores Docker proporcionan una gran visión general de cómo gestionar la persistencia de los contenedores con estado.
Este blog explicará cómo utilizar Plugins de volumen Docker y Portworx para crear un contenedor con estado.
¿Por qué Portworx?
Portworx es un contenedor de servicios de datos fácil de desplegar que proporciona persistencia, replicación, instantáneas, cifrado, RBAC seguro y mucho más. Algunas de sus ventajas son:
- Volúmenes granulares de contenedores - Portworx puede tomar múltiples volúmenes EBS por host y agregar la capacidad y derivar volúmenes virtuales granulares (soft) por contenedor.
- Zona de disponibilidad cruzada HA - Portworx protegerá los datos, a nivel de bloque, a través de múltiples instancias de computación a través de zonas de disponibilidad. A medida que los controladores de replicación reinicien los pods en diferentes nodos, los datos seguirán estando altamente disponibles en esos nodos.
- Apoyo a las operaciones de datos de la empresa - Portworx implementa instantáneas granulares de contenedor, clase de servicio, escalonamiento sobre los volúmenes físicos disponibles.
- Facilidad de despliegue y aprovisionamiento - El propio Portworx se despliega como un contenedor y se integra con las herramientas de orquestación. DevOps puede aprovisionar mediante programación almacenamiento granular de contenedores con cualquier propiedad, como tamaño, clase de servicio, clave de cifrado, etc.
Configurar instancia AWS EC2
Portworx sólo funciona en Linux o CoreOS. Configure una instancia de Ubuntu en AWS EC2:
- Inicie la instancia de Ubuntu 14.04 con
m3.medio
tipo de instancia. Asegúrese de añadir el puerto 8091 a las reglas de seguridad de entrada. Esto permite Consola web de Couchbase ser accesible después. - Inicie sesión en la instancia EC2 utilizando el comando:
ssh -i ~/.ssh/arun-cb-west1.pem ubuntu@
- Actualice la instancia de Ubuntu:
sudo apt-get update
- Instala Docker:
curl -sSL https://get.docker.com/ | sh
. Encontrará instrucciones más detalladas en Obtener Docker para Ubuntu. - Habilitar el acceso no root para el comando docker:
sudo usermod -aG docker ubuntu
- Cierre la sesión de la instancia EC2 y vuelva a iniciarla
Crear volumen AWS EBS
- Crear un volumen EBS para 10GB usando la consola EC2 como se explica en docs.
- Obtenga el id de instancia de la consola EC2. Adjunte este volumen a la instancia EC2 utilizando este id de instancia, utilice el nombre de dispositivo por defecto
/dev/sdf.
- Utilice
lsblk
en la instancia EC2 para verificar que el volumen está conectado a la instancia:12345NOMBRE MAJ:MIN RM TALLA RO TIPO PUNTO MONTExvda 202:0 0 8G 0 disco└─xvda1 202:1 0 8G 0 pieza /xvdb 202:16 0 30G 0 disco /mntxvdf 202:80 0 10G 0 disco
Contenedor Portworx
- La composición del almacenamiento físico de cada nodo, todos los volúmenes aprovisionados en el clúster así como sus mapeos de contenedor se almacenan en un clúster etcd. Inicie un clúster etcd:
12345docker ejecute -v \/datos/varlib/etcd \-p 4001:4001 \-d \portworx/etcd:última - Por defecto, los volúmenes montados como root no pueden ser compartidos. Habilítelo mediante el comando
1sudo monte --escriba a-compartido /
Más información en Configuración de Ubuntu y montajes compartidos. - El contenedor PX-Developer (px-dev) en un servidor con Docker Engine convierte ese servidor en un nodo de almacenamiento escalable. PX-Enterprise, por su parte, ofrece soporte multiclúster y multicloud, donde el almacenamiento bajo gestión puede estar en las instalaciones o en una nube pública como AWS.
Para este blog, iniciaremos un contenedor px-dev:
123456789101112docker ejecute --reiniciar=siempre --nombre px -d --red=host \--privilegiado=verdadero \-v /ejecute/docker/plugins:/ejecute/docker/plugins \-v /var/lib/osd:/var/lib/osd:compartido \-v /dev:/dev \-v /etc/pwx:/etc/pwx \-v /op/pwx/papelera:/export_bin:compartido \-v /var/ejecute/docker.calcetín:/var/ejecute/docker.calcetín \-v /var/núcleos:/var/núcleos \-v /usr/src:/usr/src \--ipc=host \portworx/px-dev -demonio -k etcd://localhost:4001 -c cluster1 -s /dev/xvdf
Encontrará información detallada sobre este comando en Ejecutar PX con Docker. - Busque registros que utilicen
docker container logs -f px
y presta atención a las siguientes afirmaciones:
1234tiempo="2017-02-16T05:33:26Z" nivel=información msg="Inicializar el cliente programador y el reloj programador"tiempo="2017-02-16T05:33:26Z" nivel=información msg="Iniciado un reloj kvdb en clave : scheduler/containers"tiempo="2017-02-16T05:33:26Z" nivel=información msg="Iniciado un reloj kvdb en clave : scheduler/volumes"tiempo="2017-02-16T05:33:26Z" nivel=información msg="Iniciado un reloj kvdb en clave : scheduler/nodes/list" - Compruebe el estado de los volúmenes adjuntos que están disponibles para Portworx utilizando
sudo /opt/pwx/bin/pxctl status
para ver la salida:
12345678910111213141516Estado: PX es operativoNodo ID: 679b79b1-f4c3-413e-a8e0-c527348647c9IP: 172.31.25.21Local Almacenamiento Piscina: 1 piscinaPiscina Prioridad_IO Talla Usado Estado Zona Región0 BAJA 10 GiB 266 MiB En línea a us-oeste-1Local Almacenamiento Dispositivos: 1 dispositivoDispositivo Ruta Medios de comunicación Tipo Talla Última-Escanear0:1 /dev/xvdf ALMACENAMIENTO_MEDIO_SSD 10 GiB 16 Febrero 17 05:33 UTCtotal - 10 GiBGrupo ResumenGrupo ID: grupo1Nodo IP: 172.31.25.21 - Capacidad: 266 MiB/10 GiB En línea (Este nodo)Global Almacenamiento PiscinaTotal Usado : 266 MiBTotal Capacidad : 10 GiB
Muestra la capacidad total disponible y utilizada.
Volumen Docker
- Vamos a crear un volumen Docker:
1docker volumen crear -d pxd -o talla=10G -o fs=ext4 --nombre cbvol
Encontrará más información sobre este comando en Crear volúmenes con Docker. - Compruebe la lista de volúmenes disponibles mediante
volumen docker ls
mando:
1234CONDUCTOR VOLUMEN NOMBRElocal 70f7b9a356df4c1f0c08e13a4e813f1ef3e174a91001f277a63b62d683a27159pxd cbvollocal f7bc5fa455a88638c106881f1bce98244b670e094d5fdc47917b53a88e46c073
Como se muestra,cbvol
se crea conpxd
conductor.
Couchbase con Portworx Volume
- Crear un contenedor Couchbase utilizando el volumen Portworx:
1234567docker contenedor ejecute \-d \--nombre db \-v cbvol:/op/couchbase/var \-p 8091-8094:8091-8094 \-p 11210:11210 \arungupta/couchbase
Observe cómo/opt/couchbase/var
donde se almacenan todos los datos de Couchbase en el contenedor se asigna a la carpetacbvol
en el host. Este volumen es mapeado por Portworx. - Inicie sesión en la consola web de Couchbase en http://:8091, utilice el login
Administrador
ycontraseña
como contraseña. - Vaya a Cubos de datos y cree un nuevo cubo de datos pwx:
- En la instancia EC2, vea la lista de contenedores:
12345ubuntu@ip-172-31-25-21:~$ docker contenedor lsCONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES8ae763d9d53b arungupta/couchbase "/entrypoint.sh /o..." 5 minutos hace Arriba 5 minutos 0.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..." 14 minutos hace Arriba 14 minutos pxcf3c779a4459 portworx/etcd:última "/entrypoint.sh /b..." 21 minutos hace Arriba 21 minutos 2379-2380/tcp, 7001/tcp, 0.0.0.0:4001->4001/tcp joven_jepsen
etcd
,px-dev
ydb
contenedores en funcionamiento. - Mata al
db
contenedor:
1docker contenedor rm -f db - Reinicie el contenedor de base de datos como:
1234567docker contenedor ejecute \-d \--nombre db \-v cbvol:/op/couchbase/var \-p 8091-8094:8091-8094 \-p 11210:11210 \arungupta/couchbase
Ahora, porquecbvol
se asigna a/opt/couchbase/var
de nuevo, los datos se conservan a través de reinicios. Esto puede verificarse accediendo a la Consola Web de Couchbase y comprobando el archivopwx
creado anteriormente.
Otra perspectiva interesante se encuentra también en ¿por qué las bases de datos no son para contenedores?. Sólo porque existe Docker, no significa que todas sus necesidades de base de datos deben ser Dockerized. Pero si es necesario, entonces hay un montón de opciones y se puede utilizar en aplicaciones de grado de producción.
¿Quieres saber más sobre cómo ejecutar Couchbase en contenedores?
[...] Fuente: blog.couchbase.com/stateful-docker-containers-portworx-couchbase/ [...]