Este blog tutorial prático aborda principalmente os detalhes da configuração do Couchbase Kubernetes Operator em um laptop/desktop com o minikube. Ele apresenta a configuração de certificados TLS personalizados e volumes persistentes. Além de verificar como aumentar e diminuir a escala do cluster. Também executamos backup/restauração do cluster do Couchbase e executamos um aplicativo de amostra usando o Python SDK.
A configuração usa o Couchbase Operator 1.2 no kubernetes de código aberto usando o minikube, que pode ser executado em um laptop. A implantação seria feita usando ferramentas de linha de comando para implantar no macOS.
Visão geral do tutorial prático
Pré-requisitos
Comandos da CLI para macOS, atualize o gerenciador de pacotes para mac usando o comando abaixo
|
1 |
$ brew update |
Instale o hipervisor a partir do link abaixo
https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0.10-132072-OSX.dmg
Instalar o minikube
|
1 |
$ brew cask install minikube |
Instalar o kubectl
https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-macos
Inicie o minikube usando o comando abaixo
[HINT] Pare/saia de todos os aplicativos no laptop se eles não forem necessários para este tutorial. O minikube e o cluster couchbase em execução no minukube precisam de uma boa quantidade de recursos.
|
1 2 3 |
$ sudo minikube start $ sudo kubectl cluster-info |
Os detalhes do ambiente para o minikube em meu laptop são os seguintes
|
1 |
minikue on macos : v1.2.0 |
Defina as vCPUs e a memória como 4 e 4GiB para que o Couchbase Operator funcione no laptop
|
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 |
Detalhes do cluster minikube
|
1 2 3 4 |
$ sudo kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready master 3d11h v1.15.0 |
Implantação do operador autônomo do Couchbase
Implementação do Admission Controller
cd no diretório de arquivos para acessar o yaml necessário arquivos O pacote precisa ser baixado para o laptop em seu diretório local
Primeiro, criaremos um namespace para localizar o escopo de nossa implantação
|
1 |
$ sudo kubectl create namespace cbdb |
Deployment Admission Controller, que é um webhook mutante para validação de esquema
|
1 |
$ sudo kubectl create -f admission.yaml --namespace cbdb |
Consultar a implementação do Controlador de Admissão
|
1 2 3 |
$ sudo kubectl get deployments --namespace cbdb NAME READY UP-TO-DATE AVAILABLE AGE couchbase-operator-admission 1/1 1 1 11m |
Implantar o operador autônomo do Couchbase
Implantar a definição de recurso personalizado
O escopo do CRD pode ser amplo no cluster do k8s ou localizado no namespace. A escolha fica a cargo do administrador do devops/k8s. No exemplo abaixo, ele está localizado em um namespace específico
|
1 |
sudo kubectl create -f crd.yaml --namespace cbdb |
Implantar função de operador
|
1 |
$ sudo kubectl create -f operator-role.yaml --namespace cbdb |
Criar conta de serviço
|
1 |
$ sudo kubectl create serviceaccount couchbase-operator --namespace cbdb |
Vincular a conta de serviço 'couchbase-operator' com operator-role
|
1 |
$ sudo kubectl create rolebinding couchbase-operator --role couchbase-operator --serviceaccount cbdb:couchbase-operator --namespace cbdb |
Implantar a implantação de operador autônomo do Couchbase
|
1 |
$ sudo kubectl create -f operator-deployment.yaml --namespace cbdb |
Implementação 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 |
Implantação do cluster do Couchbase
Implantar certificados TLS no namespace cbdb
Usando o arquivo de ajuda abaixo no link, certifique-se de usar o namespace apropriado, aqui eu usei 'cbdb'. O link é fornecido aqui
Consultar os segredos TLS implementados via 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 |
Implantar segredo para acessar a interface do usuário do Couchbase
|
1 |
$ sudo kubectl create -f secret.yaml --namespace cbdb |
Obter detalhes da StorageClass para o cluster minikube k8s
|
1 2 3 |
$ sudo kubectl get storageclass NAME PROVISIONER AGE standard (default) k8s.io/minikube-hostpath 3d14h |
Implantar o cluster do Couchbase
|
1 |
$ sudo kubectl create -f couchbase-persistent-cluster-tls-k8s-minikube.yaml --namespace cbdb |
O arquivo yaml para a implantação acima pode ser encontrado aqui
Se tudo correr bem, veremos o cluster do Couchbase implantado com PVs, certificados TLS
|
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 |
Acessar a interface do usuário do Couchbase
Obter os detalhes do serviço para o cluster do 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 |
Expor o cluster CB por meio do serviço 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 |
Acesso à interface do usuário do Couchbase
Fazer login em https://localhost:8091 para acessar a interface do usuário CB

Verifique a ca raiz para verificar se o certificado x509 personalizado está sendo usado
Clique em Security->Root Certificate

Exclua um pod aleatoriamente, vamos excluir o pod 001
|
1 2 |
$ sudo kubectl delete pod cb-opensource-k8s-0001 --namespace cbdb pod "cb-opensource-k8s-0001" deleted |
O servidor faria failover automaticamente, dependendo do autoFailovertimeout

Um nó perdido do Couchbase é recuperado automaticamente pelo Couchbase Operator como sua definição de cluster em constante observação

Aumento/diminuição de escala
É possível alterar a escala ou a redução com um único clique.
Aumento de escala
Alterar o tamanho de 3 para 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 |
Execute o comando abaixo
|
1 |
sudo kubectl apply -f couchbase-persistent-cluster-tls-k8s-minikube.yaml --namespace cbdb |
Bum!
O cluster é ampliado.
Cuidado: O cluster do K8s precisa ter recursos suficientes para ser ampliado.
Reduzindo a escala
É exatamente o oposto do aumento de escala: reduzir o cluster a qualquer número. Mas não menos que 3.
O MVP do Couchbase tem 3 nós.
Backup e restauração do servidor Couchbase
Backup do cluster CB via cbbackupmgr
Criar repositório de backup em um determinado volume/montagem de backup
|
1 2 |
$ cbbackupmgr config --archive /tmp/data/ --repo myBackupRepo Backup repository `myBackupRepo` created successfully in archive `/tmp/data/` |
Backup
|
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 |
Execute o aplicativo Python de exemplo em um namespace diferente
Criar namespace para a camada de aplicativos
|
1 2 |
$ sudo kubectl create namespace apps namespace/apps created |
Implantar o pod de aplicativo
|
1 2 |
$ sudo kubectl create -f app_pod.yaml --namespace apps pod/app01 created |
Execute o programa python de exemplo para inserir um documento no cluster do couchbase
Faça login no shell/exec no pod do aplicativo dos pods
|
1 |
$ sudo kubectl exec -ti app01 bash --namespace apps |
Preparar o pod para instalar o SDK do python
prep-app-pod para o SDK do python
Editar o programa com o FQDN do pod
Execute o comando abaixo depois de entrar no pod do couchbase
|
1 |
$ sudo kubectl exec -ti cb-opensource-k8s-0000 bash --namespace cbdb |
Obter o FQDN para o pod do aplicativo
|
1 2 |
root@cb-opensource-k8s-0000:/# hostname -f cb-opensource-k8s-0000.cb-opensource-k8s.cbdb.svc.cluster.local |
Edite o programa com a string de conexão correta
A string de conexão para mim tem a aparência abaixo:
|
1 |
cluster = Cluster('couchbase://cb-opensource-k8s-0000.cb-opensource-k8s.cbdb.svc.cluster.local') |
Como ambos os namespaces no minikube compartilham o mesmo kube-dns
Executar o 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:/# |
O documento reinserido deve ter a seguinte aparência

Conclusão
Implantamos o Couchbase Autonomous Operator com a versão 1.2 na versão do minikube: v1.2.0. O cluster do Couchbase requer controlador de admissão, RBACs com função limitada ao namespace (mais seguro). O CRD implantado tem escopo amplo de cluster, mas isso é por design. O cluster do Couchbase implantado tinha suporte a PV e certificados x509 do cliente.
Vimos como o cluster do Couchbase se autocura e recupera o cluster sem nenhuma intervenção do usuário.
O cbbackupmgr é o utilitário recomendado para realizar backups e restaurações. Também vimos como instalar o sdk python do Couchbase em um pod de aplicativo implantado em seu namespace e podemos fazer com que esse aplicativo converse com o servidor Couchbase e execute operações CRUD.
Limpeza (opcional)
Execute as etapas abaixo para desfazer a configuração de todos os ativos k8s criados.
|
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 |
Oi Ram,
Obrigado ... este é um bom documento abrangente ... Poucos pontos que eu estava procurando :
Posso editar a configuração do cluster para 0 em todos os serviços para fazer com que todos os nós desapareçam no console da Web.
Além disso, qual é o método ou processo para interromper os pods e processos em execução se eu quiser reiniciar todo o cluster na estrutura autônoma? Há alguma possibilidade de fazer isso sem perder dados?
Às vezes, as operações, como o rebalanceamento, são loucas e nunca param (vejo muitos tíquetes abertos no CB sem resolução), portanto, nesse cenário, eu gostaria de reiniciar o cluster, se possível.