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 |
$ brew update |
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 |
$ brew cask install 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 start $ sudo kubectl cluster-info |
Los detalles del entorno del minicubo en mi portátil son los siguientes
|
1 |
minikue on 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 set memory 4096 sudo minikube config set cpus 4 |
|
1 2 3 4 |
$ sudo minikube config view - cpus: 4 - memory: 4096 |
detalles del clúster minikube
|
1 2 3 4 |
$ sudo kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready master 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 create namespace cbdb |
Deployment Admission Controller, que es un webhook mutante para la validación de esquemas.
|
1 |
$ sudo kubectl create -f admission.yaml --namespace cbdb |
Consulta de la implantación de Admission Controller
|
1 2 3 |
$ sudo kubectl get deployments --namespace cbdb NAME READY UP-TO-DATE AVAILABLE AGE couchbase-operator-admission 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 create -f crd.yaml --namespace cbdb |
Desplegar el rol de operador
|
1 |
$ sudo kubectl create -f operator-role.yaml --namespace cbdb |
Crear cuenta de servicio
|
1 |
$ sudo kubectl create serviceaccount couchbase-operator --namespace cbdb |
Vincular la cuenta de servicio "couchbase-operator" con el rol de operador
|
1 |
$ sudo kubectl create rolebinding couchbase-operator --role couchbase-operator --serviceaccount cbdb:couchbase-operator --namespace cbdb |
Despliegue del Operador Autónomo Couchbase
|
1 |
$ sudo kubectl create -f operator-deployment.yaml --namespace cbdb |
Despliegue de consultas
|
1 2 3 4 |
$ sudo kubectl get deployment --namespace cbdb NAME READY UP-TO-DATE AVAILABLE AGE couchbase-operator 1/1 1 1 20m couchbase-operator-admission 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 get secrets --namespace cbdb NAME TYPE DATA AGE couchbase-operator-tls Opaque 1 14h couchbase-server-tls Opaque 2 14h |
Despliegue secreto para acceder a Couchbase UI
|
1 |
$ sudo kubectl create -f secret.yaml --namespace cbdb |
Obtener detalles StorageClass para minikube k8s cluster
|
1 2 3 |
$ sudo kubectl get storageclass NAME PROVISIONER AGE standard (default) k8s.io/minikube-hostpath 3d14h |
Despliegue del clúster Couchbase
|
1 |
$ sudo kubectl create -f couchbase-persistent-cluster-tls-k8s-minikube.yaml --namespace 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 get pods --namespace cbdb NAME READY STATUS RESTARTS AGE cb-opensource-k8s-0000 1/1 Running 0 5h58m cb-opensource-k8s-0001 1/1 Running 0 5h58m cb-opensource-k8s-0002 1/1 Running 0 5h57m couchbase-operator-864685d8b9-j72jd 1/1 Running 0 20h couchbase-operator-admission-7d7d594748-btnm9 1/1 Running 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 get svc --namespace cbdb NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 6h11m cb-opensource-k8s-ui NodePort 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 port-forward service/cb-opensource-k8s-ui 8091:8091 --namespace cbdb Forwarding from 127.0.0.1:8091 -> 8091 Forwarding from [::1]:8091 -> 8091 |
Acceso a la interfaz de usuario de Couchbase
Iniciar sesión https://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 delete pod cb-opensource-k8s-0001 --namespace cbdb pod "cb-opensource-k8s-0001" deleted |
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-line/files/couchbase-persistent-cluster-tls-k8s-minikube.yaml enableIndexReplica: false compressionMode: passive servers: - - size: 3 + - size: 4 name: data services: - data |
Ejecute el siguiente comando
|
1 |
sudo kubectl apply -f couchbase-persistent-cluster-tls-k8s-minikube.yaml --namespace 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 --archive /tmp/data/ --repo myBackupRepo Backup repository `myBackupRepo` created successfully in archive `/tmp/data/` |
Copia de seguridad
|
1 |
$ cbbackupmgr backup -c couchbase://127.0.0.1 -u Administrator -p password -a /tmp/data/ -r myBackupRepo |
Restaurar
|
1 2 |
# use --force-updates to use all updates from backup repo rather than current state of cluster $ cbbackupmgr restore -c couchbase://127.0.0.1 -u Administrator -p password -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 create namespace apps namespace/apps created |
Despliegue del pod de aplicaciones
|
1 2 |
$ sudo kubectl create -f app_pod.yaml --namespace apps pod/app01 created |
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 --namespace apps |
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 --namespace cbdb |
Obtenga el FQDN del pod de la aplicación
|
1 2 |
root@cb-opensource-k8s-0000:/# hostname -f cb-opensource-k8s-0000.cb-opensource-k8s.cbdb.svc.cluster.local |
Editar el programa con la cadena de conexión correcta
Para mí, la cadena de conexión tiene el siguiente aspecto:
|
1 |
cluster = Cluster('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 |
root@app01:/# python python_sdk_example.py CB Server connection PASSED Open the bucket... Done... Upserting a document... Done... Getting non-existent key. Should fail.. Got exception for missing doc Inserting a doc... Done... Getting an existent key. Should pass... Value for key 'babyliz_liz' Value for key 'babyliz_liz' {u'interests': [u'Holy Grail', u'Kingdoms and Dungeons'], u'type': u'Royales', u'name': u'Baby Liz', u'email': u'babyliz@cb.com'} Delete a doc with key 'u:baby_arthur'... Done... Value for key [u:baby_arthur] Got exception for missing doc for key [u:baby_arthur] with error Closing connection to the bucket... root@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 delete -f secret.yaml --namespace cbdb sudo kubectl delete -f couchbase-persistent-cluster-tls-k8s-minikube.yaml --namespace cbdb sudo kubectl delete rolebinding couchbase-operator --namespace cbdb sudo kubectl delete serviceaccount couchbase-operator --namespace cbdb sudo kubectl delete -f operator-deployment.yaml --namespace cbdb sudo kubectl get deployments --namespace cbdb sudo kubectl delete -f admission.yaml --namespace cbdb sudo kubectl delete pod app01 --namespace apps |
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.