Contenedores con estado en Kubernetes mediante Persistent Volume y Amazon EBS

Este blog mostrará cómo crear contenedores con estado en Kubernetes utilizando Amazon EBS. Couchbase Server es un contenedor con estado. Esto significa que el estado del contenedor necesita ser transportado con él. En Kubernetes, la unidad atómica más pequeña de ejecución
un contenedor es un pod. Así que un contenedor de Couchbase Server se ejecutará como un pod. Y por defecto, todos los datos almacenados en Couchbase Server se almacenan en el mismo host.
stateful containers

Esta cifra se explica originalmente en Clúster Kubernetes en Amazon y exponer el servicio Couchbase. Además, esta figura muestra el almacenamiento local del host.
Los pods son efímeros y pueden reiniciarse en un host diferente. A Volumen Kubernetes sobrevive a cualquier contenedor que se ejecute dentro del pod, y los datos se conservan a través de reinicios del contenedor. Sin embargo,
el volumen dejará de existir cuando un pod deje de existir. Esto se soluciona con los volúmenes persistentes, que proporcionan almacenamiento persistente en clústeres para aplicaciones que requieren datos de larga duración.

Crear y utilizar un volumen persistente es un proceso de tres pasos:
  1. Provisión: El administrador aprovisiona un almacenamiento en red en el clúster, como los volúmenes de AWS ElasticBlockStore. Esto se denomina Volumen persistente.
  2. Solicitar almacenamiento: El usuario solicita almacenamiento para pods utilizando reclamaciones. Las reclamaciones pueden especificar niveles de recursos (CPU y memoria), tamaños específicos y modos de acceso (por ejemplo, se puede montar una vez lectura/escritura o muchas veces sólo escritura).
    Esto se denomina PersistentVolumeClaim.
  3. Reclamación de uso: Las reclamaciones se montan como volúmenes y se utilizan en pods para el almacenamiento.

En concreto, este blog mostrará cómo utilizar un AWS ElasticBlockStore como Volumen persistentecrear un PersistentVolumeClaimy luego reclamarla en una vaina.

stateful containers

El código fuente completo de este blog está en: github.com/arun-gupta/couchbase-kubernetes.

Aprovisionar AWS Elastic Block Storage

Después de restricciones si se utiliza Amazon ElasticBlockStorage como PersistentVolume con Kubernetes:

  • los nodos en los que se ejecutan los pods deben ser instancias AWS EC2
  • esas instancias deben estar en la misma región y zona de disponibilidad que el volumen EBS
  • EBS sólo admite una única instancia EC2 montando un volumen

Crear un AWS Elastic Block Storage:

La región us-oeste-2 región y us-oeste-2a zona de disponibilidad se utiliza aquí. Y así Kubernetes clúster necesita para iniciar
en la misma región y zona de disponibilidad. Esto muestra la salida como:

Compruebe si el volumen está disponible como:

Muestra la salida como:

Anote el identificador único del volumen en VolumeId atributo. También puede verificar el bloque EBS en la consola de AWS:

kubernetes-pv-couchbase-amazon-ebs

Iniciar clúster Kubernetes

Descargar Kubernetes 1.3.3Descomprímelo e inicia el clúster en Amazon:

Tres puntos a tener en cuenta aquí:

  • La zona en la que se inicia el clúster se establece explícitamente en us-oeste-1a. Coincide con la zona en la que se creó el volumen de almacenamiento EBS.
  • Por defecto, el tamaño de cada nodo es m3.medio. Aquí está ajustado a m3.grande.
  • Por defecto, se crean 1 nodo maestro y 4 nodos trabajadores. Aquí sólo se crean 3 nodos trabajadores.

Esto mostrará la salida como:

Más información sobre Clúster Kubernetes en Amazon.

Couchbase Server Pod sin almacenamiento persistente

Vamos a crear un pod de Couchbase Server sin almacenamiento persistente. Esto significa que si el pod es reprogramado en un host diferente entonces no tendrá acceso a los datos creados en él. Aquí están los pasos rápidos para ejecutar un pod de Couchbase Server y
exponerlo fuera del clúster:

Más información en Clúster Kubernetes en Amazon. El último comando muestra la dirección del equilibrador de carga de entrada. Acceda a la consola web del servidor Couchbase en :8091.

kubernetes-pv-couchbase-amazon-elb

Inicie sesión en la consola mediante Administrador inicio de sesión y contraseña contraseña. Aparecerá la página principal de la Consola Web del Servidor Couchbase:

 kubernetes-pv-couchbase-amazon-web-console-

Un defecto viaje-muestra ya está creado por arungupta/couchbase imagen. Este cubo se muestra en el Cubos de datos ficha:

kubernetes-pv-couchbase-amazon-databucket

Haga clic en Crear nuevo cubo de datos para crear un nuevo cubo de datos. Déle un nombre k8s, tome todos los valores predeterminados y haga clic en Cree para crear el cubo:

kubernetes-pv-couchbase-amazon-k8s-bucket

El cubo creado se muestra en el Cubos de datos ficha:

kubernetes-pv-couchbase-amazon-k8s-bucket-created

Compruebe el estado del pod:

Elimine la cápsula:

Observa cómo se crea la nueva cápsula:

Acceda de nuevo a la Consola Web y compruebe que el cubo no existe:

kubernetes-pv-couchbase-amazon-k8s-bucket-gone

Limpiemos los recursos creados:

Couchbase Server Pod con almacenamiento persistente

Ahora, vamos a exponer un pod de Couchbase Server con almacenamiento persistente. Como ya hemos comentado, vamos a crear un pod Volumen persistente y reclamar el volumen.

Solicitar almacenamiento

Como cualquier otro recurso de Kubernetes, un volumen persistente se crea utilizando un archivo de descripción de recursos:

Los datos importantes son los siguientes:

  • Crear un almacenamiento de 5 GB
  • El almacenamiento sólo puede ser montado por un nodo para lectura/escritura
  • especifica el identificador de volumen creado anteriormente

Más información sobre la definición de este archivo en kubernetes.io/docs/user-guide/persistent-volumes/. Este archivo está disponible en: github.com/arun-gupta/couchbase-kubernetes/blob/master/pv/couchbase-pv.yml.
El volumen en sí se puede crear como:

y muestra la salida:

Reclamación de uso

A PersistentVolumeClaim pueden crearse utilizando este archivo de recursos:

En nuestro caso, tanto PersistentVolume como PersistentVolumeClaim son de 5 GB, pero no tienen por qué serlo. Lea más detalles sobre la definición de este fichero en kubernetes.io/docs/user-guide/persistent-volumes/#persistentvolumeclaims.
Este archivo se encuentra en github.com/arun-gupta/couchbase-kubernetes/blob/master/pv/couchbase-pvc.yml. La reclamación puede crearse como:

y muestra la salida:

Crear RC con reclamación de volumen persistente

Cree un controlador de replicación Couchbase utilizando este archivo de recursos:

Las partes clave aquí son:

  • El recurso define un controlador de replicación utilizando arungupta/couchbase Imagen Docker
  • volumeMounts definir qué volúmenes se van a montar. /opt/couchbase/var es el directorio donde Couchbase Server almacena todos los datos.
  • volúmenes definir los diferentes volúmenes que pueden utilizarse en esta definición de CR

Crea el CR como:

y muestra la salida:

Compruebe si la vaina es kubectl.sh get -w po para ver:

Exponer RC como un servicio:

Consigue todos los servicios:

Describa el servicio como kubectl.sh describe svc couchbase para ver:

Espere unos 3 minutos a que el equilibrador de carga se asiente. Accede a la consola web de Couchbase Server en :8091. Una vez más, sólo viaje-muestra existe. Se crea mediante arungupta/couchbase imagen utilizada en la definición RC.

Mostrar contenedores con estado

Vamos a crear un nuevo cubo. Dale un nombre kubernetes-pv, tome todos los valores predeterminados y haga clic en el botón Crear para crear el cubo.

kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket

El cubo aparece ahora en la consola:

kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-created

Finalice el pod de Couchbase Server y vea cómo se restaura el estado. Obtenga los pods de nuevo:

Elimine la cápsula:

Pod se recrea:

Y ahora cuando accedes a la Consola Web de Couchbase, el bucket creado anteriormente sigue existiendo:

kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-still-there

Esto se debe a que los datos se almacenaron en el almacenamiento EBS de respaldo.

Limpieza del clúster Kubernetes

Apague el clúster Kubernetes:

Y separa el volumen:

El código fuente completo de este blog está en: github.com/arun-gupta/couchbase-kubernetes.

¡Que aproveche!

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Arun Gupta, Vicepresidente, Defensa del Desarrollador, Couchbase

Arun Gupta es vicepresidente de promoción de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante más de 10 años en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campañas de marketing y programas. Anteriormente dirigió equipos de ingeniería en Sun y es miembro fundador del equipo Java EE. Gupta es autor de más de 2.000 entradas de blog sobre tecnología. Tiene una amplia experiencia como conferenciante en más de 40 países sobre innumerables temas y es una JavaOne Rock Star desde hace tres años consecutivos. Gupta también fundó el capítulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educación tecnológica entre los niños. Autor de varios libros sobre tecnología, ávido corredor, trotamundos, campeón de Java, líder de JUG, miembro del Dream Team de NetBeans y capitán de Docker, es fácilmente accesible en @arungupta.

2 Comentarios

  1. Buen artículo. Gracias por redactarlo.

    Una suposición clara es que el ejemplo era para una sola AZ. Pero para el uso real de producción, usted querrá desplegar su clúster k8s a través de múltiples AZs, que es bastante fácil con kops. Esto dificulta en gran medida el despliegue de las instalaciones fotovoltaicas. No he podido encontrar buenos ejemplos de cómo hacerlo. ¿Conoce alguno? ¿O tal vez estén dispuestos a actualizar este ejemplo para soportar múltiples AZs?

    Leyendo la documentación de k8s parece que tendríamos que utilizar un recurso StorageClass para cada AZ, marcar la opción VolumenPersistente a la clase, pero no puedo averiguar cómo obtener un Despliegue (o ReplicationController) para elegir el correcto StorageClass en función de la AZ en la que se encuentre, que no se conoce hasta que se programa el lugar en un Nodo.

    Además, el viaje-muestra no me apareció ninguna de las dos veces, no es que sea importante. Y la segunda kubectl.sh expose rc couchbase --target-port=8091 --port=809--type=LoadBalancer debe ser kubectl expose rc couchbase --target-port=8091 --port=8091 --type=LoadBalancer

    También podría ser interesante actualizarlo para utilizar kops (o haga referencia a su otro gran artículo sobre cómo hacerlo) y reemplace ReplicationController con Despliegue.

    1. ¿Has encontrado una solución para esto? He estado tratando de crear un clúster CB con PVs. Todo parece funcionar la primera vez que se inician, pero una vez que mato a un pod cd el nuevo pod no puede unirse al clúster CB más, su ip parece estar bloqueado y el pod CB maestro no puede conectarse de nuevo el nuevo trabajador.

      Saludos

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.