Este blog tutorial práctico cubre principalmente los detalles alrededor de la configuración de Couchbase Kubernetes Operator en un ordenador portátil / escritorio que ejecuta minikube. Incluye la configuración de certificados TLS personalizados y volúmenes persistentes. Junto con la comprobación de cómo escalar hacia arriba y hacia abajo el clúster. También ejecutando backup/restore del cluster de Couchbase y ejecutando una aplicación de ejemplo usando Python SDK.
La configuración utiliza Couchbase Operator 1.2 en kubernetes de código abierto utilizando minikube, que se puede ejecutar en un ordenador portátil. El despliegue se realizaría con herramientas de línea de comandos para macOS.
Visión general del tutorial práctico
Requisitos previos
Comandos CLI para macOS, actualice el gestor de paquetes para mac utilizando el siguiente comando
1 |
$ cerveza actualización |
Instale el hipervisor desde el siguiente enlace
https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0.10-132072-OSX.dmg
Instalar minikube
1 |
$ cerveza barrica instale minikube |
Instalar kubectl
https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-macos
Inicie minikube utilizando el siguiente comando
[PISTA] Detenga/salga de todas las aplicaciones del portátil si no son necesarias para este tutorial. minikube y el clúster couchbase que se ejecutan en minukube necesitan una buena cantidad de recursos.
1 2 3 |
$ sudo minikube iniciar $ sudo kubectl grupo-información |
Los detalles del entorno del minicubo en mi portátil son los siguientes
1 |
minikue en macOS : v1.2.0 |
Configurar las vCPUs y la memoria a 4 y 4GiB para que Couchbase Operator funcione en el portátil.
1 2 |
sudo minikube config configure memoria 4096 sudo minikube config configure cpus 4 |
1 2 3 4 |
$ sudo minikube config ver - cpus: 4 - memoria: 4096 |
detalles del clúster minikube
1 2 3 4 |
$ sudo kubectl consiga nodos NOMBRE ESTADO ROLES EDAD VERSIÓN minikube Listo maestro 3d11h v1.15.0 |
Despliegue de Couchbase Autonomous Operator
Despliegue de Admission Controller
cd en el directorio de archivos para acceder al yaml requerido archivos El paquete debe descargarse en el ordenador portátil en su directorio local
En primer lugar vamos a crear un espacio de nombres para localizar el ámbito de nuestro despliegue
1 |
$ sudo kubectl crear espacio de nombres cbdb |
Deployment Admission Controller, que es un webhook mutante para la validación de esquemas.
1 |
$ sudo kubectl crear -f admisión.yaml --espacio de nombres cbdb |
Consulta de la implantación de Admission Controller
1 2 3 |
$ sudo kubectl consiga despliegues --espacio de nombres cbdb NOMBRE LISTO UP-A-FECHA DISPONIBLE EDAD couchbase-operador-admisión 1/1 1 1 11m |
Despliegue de Couchbase Autonomous Operator
Despliegue de la definición personalizada de recursos
El alcance del CRD puede ser en todo el cluster k8s o localizado en el espacio de nombres. La elección depende del administrador devops/k8s. En el siguiente ejemplo se localiza a un espacio de nombres en particular
1 |
sudo kubectl crear -f crd.yaml --espacio de nombres cbdb |
Desplegar el rol de operador
1 |
$ sudo kubectl crear -f operador-papel.yaml --espacio de nombres cbdb |
Crear cuenta de servicio
1 |
$ sudo kubectl crear cuenta de servicio couchbase-operador --espacio de nombres cbdb |
Vincular la cuenta de servicio "couchbase-operator" con el rol de operador
1 |
$ sudo kubectl crear vinculación de funciones couchbase-operador --papel couchbase-operador --cuenta de servicio cbdb:couchbase-operador --espacio de nombres cbdb |
Despliegue del Operador Autónomo Couchbase
1 |
$ sudo kubectl crear -f operador-despliegue.yaml --espacio de nombres cbdb |
Despliegue de consultas
1 2 3 4 |
$ sudo kubectl consiga despliegue --espacio de nombres cbdb NOMBRE LISTO UP-A-FECHA DISPONIBLE EDAD couchbase-operador 1/1 1 1 20m couchbase-operador-admisión 1/1 1 1 20m |
Despliegue de Couchbase Cluster
Despliegue de certificados TLS en el espacio de nombres cbdb
Usando el archivo de ayuda abajo en el enlace, asegúrese de usar el espacio de nombres apropiado, aquí he usado 'cbdb'. Se proporciona el enlace aquí
Consultar los secretos TLS desplegados a través de kubectl
1 2 3 4 |
$ sudo kubectl consiga secretos --espacio de nombres cbdb NOMBRE TIPO DATOS EDAD couchbase-operador-tls Opaco 1 14h couchbase-servidor-tls Opaco 2 14h |
Despliegue secreto para acceder a Couchbase UI
1 |
$ sudo kubectl crear -f secreto.yaml --espacio de nombres cbdb |
Obtener detalles StorageClass para minikube k8s cluster
1 2 3 |
$ sudo kubectl consiga clase de almacenamiento NOMBRE PROVISIONADOR EDAD estándar (por defecto) k8s.io/minikube-ruta de host 3d14h |
Despliegue del clúster Couchbase
1 |
$ sudo kubectl crear -f couchbase-persistente-grupo-tls-k8s-minikube.yaml --espacio de nombres cbdb |
El archivo yaml para el despliegue anterior se encuentra en aquí
Si todo va bien deberíamos ver el cluster Couchbase desplegado con PVs, TLS certs
1 2 3 4 5 6 7 |
$ sudo kubectl consiga vainas --espacio de nombres cbdb NOMBRE LISTO ESTADO RESTARTS EDAD cb-opensource-k8s-0000 1/1 Ejecutar 0 5h58m cb-opensource-k8s-0001 1/1 Ejecutar 0 5h58m cb-opensource-k8s-0002 1/1 Ejecutar 0 5h57m couchbase-operador-864685d8b9-j72jd 1/1 Ejecutar 0 20h couchbase-operador-admisión-7d7d594748-btnm9 1/1 Ejecutar 0 20h |
Acceder a la interfaz de usuario de Couchbase
Obtener los detalles del servicio para el clúster Couchbase
1 2 3 |
$ sudo kubectl consiga svc --espacio de nombres cbdb NOMBRE TIPO CLÚSTER-IP EXTERNO-IP PUERTO(S) EDAD 6h11m cb-opensource-k8s-ui PuertoNodo 10.100.90.161 8091:30477/TCP,18091:30184/TCP |
Exponer el clúster CB a través del servicio CB UI
1 2 3 |
$ sudo kubectl puerto-adelante servicio/cb-opensource-k8s-ui 8091:8091 --espacio de nombres cbdb Reenvío de 127.0.0.1:8091 -> 8091 Reenvío de [::1]:8091 -> 8091 |
Acceso a la interfaz de usuario de Couchbase
Iniciar sesión http://localhost:8091 para acceder a la CB UI
Verifique el certificado raíz para comprobar que se está utilizando un certificado x509 personalizado.
Haga clic en Seguridad->Certificado raíz
Borrar un pod al azar, vamos a borrar el pod 001
1 2 |
$ sudo kubectl borrar vaina cb-opensource-k8s-0001 --espacio de nombres cbdb vaina "cb-opensource-k8s-0001" suprimido |
El servidor se conmutará automáticamente en función de autoFailovertimeout
Un nodo Couchbase perdido es auto-recuperado por Couchbase Operator como su definición de cluster en constante vigilancia.
Ampliación/reducción
Es un cambio de escala de un solo clic o escala hacia abajo.
Ampliación
Cambiar el tamaño de 3 a 4
1 2 3 4 5 6 7 8 9 |
--- a/opensrc-k8s/cmd-línea/archivos/couchbase-persistente-grupo-tls-k8s-minikube.yaml enableIndexReplica: falso compressionMode: pasivo servidores: - - talla: 3 + - talla: 4 nombre: datos servicios: - datos |
Ejecute el siguiente comando
1 |
sudo kubectl aplicar -f couchbase-persistente-grupo-tls-k8s-minikube.yaml --espacio de nombres cbdb |
¡Boom!
El clúster se amplía.
Precaución: El clúster K8s necesita tener suficientes recursos para escalar.
Reducción de la escala
Es exactamente lo contrario de escalar, reducir el clúster a cualquier número. Pero no menos de 3.
Couchbase MVP es de 3 nodos.
Copia de seguridad y restauración del servidor Couchbase
Copia de seguridad del clúster CB mediante cbbackupmgr
Crear un repositorio de copia de seguridad en un montaje/volumen de copia de seguridad dado
1 2 |
$ cbbackupmgr config --archivo /tmp/datos/ --repo myBackupRepo Copia de seguridad repositorio `myBackupRepo` creado con éxito en archivo `/tmp/datos/` |
Copia de seguridad
1 |
$ cbbackupmgr copia de seguridad -c couchbase://127.0.0.1 -u Administrador -p contraseña -a /tmp/data/ -r myBackupRepo |
Restaurar
1 2 |
# use --force-updates para usar todas las actualizaciones del repositorio de respaldo en lugar del estado actual del cluster $ cbbackupmgr restaurar -c couchbase://127.0.0.1 -u Administrador -p contraseña -a /tmp/data/ -r myBackupRepo --force-updates |
Ejecutar una aplicación Python de ejemplo desde un espacio de nombres diferente
Crear espacio de nombres para el nivel de aplicación
1 2 |
$ sudo kubectl crear espacio de nombres aplicaciones espacio de nombres/aplicaciones creado |
Despliegue del pod de aplicaciones
1 2 |
$ sudo kubectl crear -f app_pod.yaml --espacio de nombres aplicaciones vaina/app01 creado |
Ejecute el programa python de ejemplo para upsert un documento en couchbase cluster
Inicie sesión en los pods shell/exec en app pod
1 |
$ sudo kubectl exec -ti app01 bash --espacio de nombres aplicaciones |
Preparar el pod para instalar el SDK de python
prep-app-pod para el SDK de python
Editar el programa con el FQDN del pod
Ejecutar el siguiente comando después de exec'ing en el pod couchbase
1 |
$ sudo kubectl exec -ti cb-opensource-k8s-0000 bash --espacio de nombres cbdb |
Obtenga el FQDN del pod de la aplicación
1 2 |
raíz@cb-opensource-k8s-0000:/# nombre de host -f cb-opensource-k8s-0000.cb-opensource-k8s.cbdb.svc.grupo.local |
Editar el programa con la cadena de conexión correcta
Para mí, la cadena de conexión tiene el siguiente aspecto:
1 |
grupo = Grupo('couchbase://cb-opensource-k8s-0000.cb-opensource-k8s.cbdb.svc.cluster.local') |
Dado que ambos namespaces en minikube comparten el mismo kube-dns
Ejecutar el programa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
raíz@app01:/# python python_sdk_ejemplo.py CB Servidor conexión APROBADO Abrir el cubo... Hecho... Insertar a documento... Hecho... En no-existente clave. Debería falla.. Tengo excepción para falta doc Insertar a doc... Hecho... En un existente clave. Debería pase... Valor para clave 'babyliz_liz' Valor para clave 'babyliz_liz' {uintereses: [uSanto Grial, uReinos y mazmorras], utipo: uRoyales, unombre: uBaby Liz, ucorreo electrónico: ubabyliz@cb.com} Borrar a doc con clave u:baby_arthur... Hecho... Valor para clave [u:baby_arthur] Tengo excepción para falta doc para clave [u:baby_arthur] con error Cerrar conexión a el cubo... raíz@app01:/# |
El documento reinsertado debería tener el siguiente aspecto
Conclusión
Desplegamos Couchbase Autonomous Operator con la versión 1.2 en minikube versión: v1.2.0. Couchbase cluster requiere controlador de admisión, RBACs con rol limitado al espacio de nombres (más seguro). CRD desplegado tiene un alcance amplio de cluster, pero eso es por diseño. El clúster Couchbase desplegado tenía soporte PV y certificados x509 del cliente.
Hemos visto cómo el clúster Couchbase se autocura y recupera su salud sin intervención del usuario.
Backup y restore son muy críticos para el servidor Couchbase. cbbackupmgr es nuestra utilidad recomendada para realizar backups y restore. También vimos cómo instalar Couchbase python sdk en un pod de aplicación desplegado en su espacio de nombres y podemos hacer que esa aplicación hable con el servidor Couchbase y realice operaciones CRUD.
Limpieza (opcional)
Siga estos pasos para desconfigurar todos los activos k8s creados.
1 2 3 4 5 6 7 8 |
sudo kubectl borrar -f secreto.yaml --espacio de nombres cbdb sudo kubectl borrar -f couchbase-persistente-grupo-tls-k8s-minikube.yaml --espacio de nombres cbdb sudo kubectl borrar vinculación de funciones couchbase-operador --espacio de nombres cbdb sudo kubectl borrar cuenta de servicio couchbase-operador --espacio de nombres cbdb sudo kubectl borrar -f operador-despliegue.yaml --espacio de nombres cbdb sudo kubectl consiga despliegues --espacio de nombres cbdb sudo kubectl borrar -f admisión.yaml --espacio de nombres cbdb sudo kubectl borrar vaina app01 --espacio de nombres aplicaciones |
Hola Ram ,
Gracias ... esto es bueno documentos completos .. Pocos puntos lo que estaba buscando :
Puedo editar cluster config a 0 para todos los servicios para hacer desaparecer todos los nodos en webconsole .
Además, ¿cuál es el método o proceso para detener los pods y procesos en ejecución si quiero reiniciar todo el clúster en el marco autónomo? ¿Hay alguna forma de hacerlo sin perder datos?
A veces las operaciones como el reequilibrio es una locura y nunca se detiene (veo un montón de tickets abiertos en CB sin resolución) por lo que en este escenario me gustaría reiniciar clúster si es posible.