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 |
$ cerveja atualização |
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 |
$ cerveja barril instalar 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 iniciar $ sudo kubectl agrupamento-informações |
Os detalhes do ambiente para o minikube em meu laptop são os seguintes
1 |
minikue em 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 configuração definir memória 4096 sudo minikube configuração definir cpus 4 |
1 2 3 4 |
$ sudo minikube configuração visualização - cpus: 4 - memória: 4096 |
Detalhes do cluster minikube
1 2 3 4 |
$ sudo kubectl obter nós NOME STATUS PAPÉIS IDADE VERSÃO minikube Pronto mestre 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 criar espaço de nome cbdb |
Deployment Admission Controller, que é um webhook mutante para validação de esquema
1 |
$ sudo kubectl criar -f admissão.yaml --espaço de nome cbdb |
Consultar a implementação do Controlador de Admissão
1 2 3 |
$ sudo kubectl obter implantações --espaço de nome cbdb NOME PRONTO UP-PARA-DATA DISPONÍVEL IDADE couchbase-operador-admissão 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 criar -f crd.yaml --espaço de nome cbdb |
Implantar função de operador
1 |
$ sudo kubectl criar -f operador-função.yaml --espaço de nome cbdb |
Criar conta de serviço
1 |
$ sudo kubectl criar conta de serviço couchbase-operador --espaço de nome cbdb |
Vincular a conta de serviço 'couchbase-operator' com operator-role
1 |
$ sudo kubectl criar vinculação de função couchbase-operador --função couchbase-operador --conta de serviço cbdb:couchbase-operador --espaço de nome cbdb |
Implantar a implantação de operador autônomo do Couchbase
1 |
$ sudo kubectl criar -f operador-implantação.yaml --espaço de nome cbdb |
Implementação de consultas
1 2 3 4 |
$ sudo kubectl obter implantação --espaço de nome cbdb NOME PRONTO UP-PARA-DATA DISPONÍVEL IDADE couchbase-operador 1/1 1 1 20m couchbase-operador-admissão 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 obter segredos --espaço de nome cbdb NOME TIPO DADOS IDADE couchbase-operador-tls Opaco 1 14h couchbase-servidor-tls Opaco 2 14h |
Implantar segredo para acessar a interface do usuário do Couchbase
1 |
$ sudo kubectl criar -f segredo.yaml --espaço de nome cbdb |
Obter detalhes da StorageClass para o cluster minikube k8s
1 2 3 |
$ sudo kubectl obter classe de armazenamento NOME PROVISOR IDADE padrão (padrão) k8s.io/minikube-caminho do host 3d14h |
Implantar o cluster do Couchbase
1 |
$ sudo kubectl criar -f couchbase-persistente-agrupamento-tls-k8s-minikube.yaml --espaço de nome 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 obter cápsulas --espaço de nome cbdb NOME PRONTO STATUS RESTARTS IDADE cb-código aberto-k8s-0000 1/1 Em execução 0 5h58m cb-código aberto-k8s-0001 1/1 Em execução 0 5h58m cb-código aberto-k8s-0002 1/1 Em execução 0 5h57m couchbase-operador-864685d8b9-j72jd 1/1 Em execução 0 20h couchbase-operador-admissão-7d7d594748-btnm9 1/1 Em execução 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 obter serviço --espaço de nome cbdb NOME TIPO CLUSTER-IP EXTERNO-IP PORTO(S) IDADE 6h11m cb-código aberto-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 porto-avançar serviço/cb-código aberto-k8s-ui 8091:8091 --espaço de nome cbdb Encaminhamento de 127.0.0.1:8091 -> 8091 Encaminhamento de [::1]:8091 -> 8091 |
Acesso à interface do usuário do Couchbase
Fazer login em http://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 excluir cápsula cb-código aberto-k8s-0001 --espaço de nome cbdb cápsula "cb-opensource-k8s-0001" excluído |
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-linha/arquivos/couchbase-persistente-agrupamento-tls-k8s-minikube.yaml enableIndexReplica: falso compressionMode: passivo servidores: - - tamanho: 3 + - tamanho: 4 nome: dados serviços: - dados |
Execute o comando abaixo
1 |
sudo kubectl aplicar -f couchbase-persistente-agrupamento-tls-k8s-minikube.yaml --espaço de nome cbdb |
Bum!
O cluster é ampliado.
Cuidado: O cluster do K8s precisa ter recursos suficientes para ser ampliado.
Diminuição de escala
É exatamente o oposto do aumento de escala: reduzir o cluster a qualquer número. Mas não menos que 3.
O Couchbase MVP 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 configuração --arquivo /tmp/dados/ --repo myBackupRepo Backup repositório `myBackupRepo` criado com sucesso em arquivo `/tmp/dados/` |
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 para usar todas as atualizações do repositório de backup em vez do estado atual do cluster $ cbbackupmgr restaurar -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 criar espaço de nome aplicativos espaço de nome/aplicativos criado |
Implantar o pod de aplicativo
1 2 |
$ sudo kubectl criar -f app_pod.yaml --espaço de nome aplicativos cápsula/app01 criado |
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 executar -ti app01 bash --espaço de nome aplicativos |
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 executar -ti cb-código aberto-k8s-0000 bash --espaço de nome cbdb |
Obter o FQDN para o pod do aplicativo
1 2 |
raiz@cb-código aberto-k8s-0000:/# hostname -f cb-código aberto-k8s-0000.cb-código aberto-k8s.cbdb.serviço.agrupamento.local |
Edite o programa com a string de conexão correta
A string de conexão para mim tem a aparência abaixo:
1 |
agrupamento = Aglomerado('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 |
raiz@app01:/# python python_sdk_example.py CB Servidor conexão APROVADO Aberto o balde... Feito... Upserting a documento... Feito... Obtendo não-existente chave. Deve falhar.. Peguei exceção para ausente doc Inserção a doc... Feito... Obtendo e existente chave. Deve passe... Valor para chave 'babyliz_liz' Valor para chave 'babyliz_liz' {u"interesses: [u"Santo Graal, u'Kingdoms and Dungeons' (Reinos e Masmorras)], u'tipo': u"Royales, u"nome: u"Baby Liz, u'email': u'babyliz@cb.com'} Excluir a doc com chave 'u:baby_arthur'... Feito... Valor para chave [u:baby_arthur] Peguei exceção para ausente doc para chave [u:baby_arthur] com erro Fechamento conexão para o balde... raiz@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 implementado 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 excluir -f segredo.yaml --espaço de nome cbdb sudo kubectl excluir -f couchbase-persistente-agrupamento-tls-k8s-minikube.yaml --espaço de nome cbdb sudo kubectl excluir vinculação de função couchbase-operador --espaço de nome cbdb sudo kubectl excluir conta de serviço couchbase-operador --espaço de nome cbdb sudo kubectl excluir -f operador-implantação.yaml --espaço de nome cbdb sudo kubectl obter implantações --espaço de nome cbdb sudo kubectl excluir -f admissão.yaml --espaço de nome cbdb sudo kubectl excluir cápsula app01 --espaço de nome aplicativos |
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.