Estamos muito animados em anunciar que o setor PRIMEIRO Banco de dados NoSQL integrado nativamente com a API do Kubernetes (k8s), por meio do CRD, proporcionando imenso poder, agilidade e portabilidade de nuvem aos clientes para que eles possam ser gratuito de
- Gerenciar ou administrar o cluster do Couchbase
- Preocupado com falhas de nós, o operador do k8s gira um pod para você
- Preocupado em realizar a operação de rebalanceamento após a adição do nó, o operador do k8s faz isso para você
- Bloqueio do fornecedor
A integração nativa com o k8s nos permite definir um controlador personalizado, por meio do qual podemos definir fluxo(s) de trabalho para determinadas condições que ocorrem no cluster do Couchbase. Ao escrever essa lógica no controlador personalizado, podemos gerenciar melhor o cluster do Couchbase.
A execução do Operador Autônomo do Couchbase no Azure AKS está atualmente em pré-visualização técnica.
Aqui está o que faremos
- Faça login no Azure com a CLI (login az)
- Criar um grupo de recursos
- Criar um cluster k8s no AKS
- Acesse o painel de controle do k8s (opcional)
- Implantar o operador autônomo do Couchbase
- Implantar o cluster do Couchbase no AKS
- Inserir alguns (~100K) documentos no cluster
- Aumente a escala do cluster com um comando
- Excluir um pod, simulando uma falha de nó
- Veja que o k8s observa esse evento e cria o novo pod para corresponder à definição do cluster
- Referências
Agora, vamos analisar a implantação do Operador Autônomo no Serviço Azure Kubernetes passo a passo de forma extremamente detalhada
Faça login no Azure com a CLI (login az)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
az login To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code BFU6N7R8L to authenticate. [ { "cloudName": "AzureCloud", "id": "xxxxxx-deff-4604-xxxxx-xxxxxxxxx", "isDefault": true, "name": "MyOrgAzure", "state": "Enabled", "tenantId": "xxbf6-f537-4fde-bc07-ooooooo777777", "user": { "name": "ram@couchbase.com", "type": "user" } } ] |
Criar um grupo de recursos
|
1 |
az group create --name ramresourcegp --location eastus |
Criar um cluster k8s
Faça login no portal do Azure e procure o Azure Kubernetes Service no ícone de pesquisa.

Escolha o tamanho da instância para nós k8s e selecione o número de nós de acordo com os requisitos

Seleção dos tipos de instância
Ativar o RBAC para o cluster k8s

Escolha a rede padrão

Habilitar o monitoramento de contêineres
Certifique-se de que a validação seja aprovada e pressione create

Execute o comando para colocar o cluster do k8s em execução no Azure, localmente (acho isso pessoalmente útil, pois me dá a capacidade de gerenciar o cluster do k8s remoto em execução no AKS. Outra opção seria usar Shell do Azure)
|
1 2 |
az aks get-credentials --resource-group=ramresourcegp --name=ramk8saks Merged "ramk8saks" as current context in /Users/ram.dhakne/.kube/config |
A captura de tela abaixo dá uma ideia de como verificar se a configuração do cluster AKS está definida corretamente no local ou não.

Acesse o painel de controle do k8s (opcional)
Todos os ativos do k8s podem ser gerenciados por meio do kubectl e, com o acesso da GUI ao cluster do Couchbase, ele se torna mais gerenciável. No entanto, eu também gostaria de administrar os ativos do k8s por meio do k8s Dashboard.
|
1 2 3 4 5 6 7 |
az aks browse --resource-group ramresourcegp --name ramk8saks Merged "ramk8saks" as current context in /var/folders/0l/sr0jnvw10nb55xt8nz6zcrzc0000gn/T/tmpvw6ub8_7 Proxy running on https://127.0.0.1:8001/ Press CTRL+C to close the tunnel... Forwarding from 127.0.0.1:8001 -> 9090 Forwarding from [::1]:8001 -> 9090 Handling connection for 8001 |
[TIP] Se o painel do k8s apresentar problemas de permissão como
|
1 2 |
warning configmaps is forbidden: User "system:serviceaccount:kube-system:kubernetes-dashboard" cannot list configmaps in the namespace "default" |
Em seguida, execute o seguinte comando
|
1 2 |
kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard clusterrolebinding.rbac.authorization.k8s.io "kubernetes-dashboard" created |
Nesse momento, devemos ter acesso ao painel do k8s em execução no URL https://127.0.0.1:8001/
Implantar o operador autônomo do Couchbase
Lembre-se de que a implantação do operador CB é um trabalho único e muito simples
Fiz o download dos arquivos zip da operadora em meu laptop local a partir do URL Baixar o pacote do operador do Couchbase
Ativar o RBAC para o cluster do couchbase no k8s
|
1 2 3 4 |
kubectl create -f cluster-role.yaml kubectl create serviceaccount couchbase-operator --namespace default serviceaccount "couchbase-operator" created kubectl create clusterrolebinding couchbase-operator --clusterrole couchbase-operator --serviceaccount default:couchbase-operatorclusterrolebinding.rbac.authorization.k8s.io "couchbase-operator" created |
Implantar o operador do couchbase
|
1 2 |
kubectl create -f operator.yaml deployment.extensions "couchbase-operator" created |
|
1 2 3 |
kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE couchbase-operator 1 1 1 0 9s |
Ele fica pronto em menos de um minuto, e podemos assistir à implantação enquanto ela está acontecendo
|
1 2 3 4 |
kubectl get deployments -l app=couchbase-operator --watch NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE couchbase-operator 1 1 1 0 8s couchbase-operator 1 1 1 1 13s |
Implantar o cluster do Couchbase no AKS
Agora que implantamos o operador autônomo no AKS, vamos implantar o cluster do Couchbase
Com o AKS, temos o StorageClass por padrão, vamos verificar
|
1 2 3 4 |
kubectl get sc NAME PROVISIONER AGE default (default) kubernetes.io/azure-disk 8h managed-premium kubernetes.io/azure-disk 8h |
Para nossa implementação, escolheremos o managed-premium
O arquivo yaml detalhado pode ser encontrado aqui, couchbase-persistent-cluster.yaml
|
1 |
kubectl create -f couchbase-persistent-cluster.yaml |
Leva alguns minutos para que o cluster do couchbase seja ativado e criaremos 4 pods e, pela primeira vez, ele baixa a imagem do docker do registro.
|
1 2 3 4 5 6 7 |
kubectl get pods --watch NAME READY STATUS RESTARTS AGE cb-op-aks-demo-0000 1/1 Running 0 48m cb-op-aks-demo-0001 1/1 Running 0 44m cb-op-aks-demo-0002 1/1 Running 0 40m cb-op-aks-demo-0003 1/1 Running 0 37m couchbase-operator-6cb7687498-zfzq5 1/1 Running 1 1h |
A exposição do serviço cb-op-aks-demo-ui do NodePort (padrão para LoadBalancer) nos permite acessar a GUI do Couchbase Server pelo IP público
Comando em execução
|
1 |
kubectl get services |
deve fornecer o resultado como abaixo
|
1 |
cb-op-aks-demo-ui LoadBalancer 10.0.191.163 40.121.65.8 8091:30427/TCP,18091:31034/TCP |
Agora, faça login na GUI com o nome de usuário/senha padrão, ou seja, Administrator/senha
Inserir alguns (~100K) documentos no cluster
|
1 |
cbc-pillowfight -U couchbase://localhost/default -u Administrator -P password -J -t 4 -I 99998 -p `hostname` |
[TIP] O utilitário cbc-pillowfight precisa ser instalado no contêiner antes de ser executado. Sua instalação está além do escopo deste blog.
Deveríamos ver o gráfico de estatísticas de balde iluminado

Aumente a escala do cluster com um comando
Dimensionar o cluster do couchbase é uma tarefa muito simples com o Kubernetes, basta atualizar o arquivo couchbase-persistent-cluster.yaml. Digamos que queiramos aumentar a capacidade dos nós de dados de 3 para 5, portanto, altere servers:size para 5

Veremos que os novos pods estão sendo criados e os pods e nós do couchbase estão sendo adicionados ao cluster, o rebalanceamento é realizado, simplesmente incrível!
|
1 |
kubectl logs -f couchbase-operator-6cb7687498-zfzq5 |

O cluster foi ampliado e a nova definição de cluster tem a seguinte aparência, observando que, de um total de 100 mil itens, cada nó tem cerca de 20 mil itens/nó

[TIP] Vamos verificar se temos PVs em nossos contêineres
Faça login no pod e execute o comando lsblk -a
|
1 |
kubectl exec -ti cb-op-aks-demo-0000 /bin/bash |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
root@cb-op-aks-demo-0000:/# lsblk -a NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop1 7:1 0 0 loop <strong>sdd 8:48 0 4G 0 disk /mnt/data</strong> sdb 8:16 0 32G 0 disk `-sdb1 8:17 0 32G 0 part loop6 7:6 0 0 loop loop4 7:4 0 0 loop sr0 11:0 1 690K 0 rom loop2 7:2 0 0 loop <strong>sde 8:64 0 4G 0 disk /mnt/index</strong> loop0 7:0 0 0 loop <strong>sdc 8:32 0 4G 0 disk /opt/couchbase/var/lib/couchbase</strong> sda 8:0 0 30G 0 disk `-sda1 8:1 0 30G 0 part /opt/couchbase/var loop7 7:7 0 0 loop loop5 7:5 0 0 loop loop3 7:3 0 0 loop |
Em couchbase-persistent-cluster.yaml definimos o volume de armazenamento como sendo de 4GiB e, no trecho destacado, vemos que temos diretórios do Couchbase de 4GiB!
Excluir um pod, simulando uma falha de nó
Exclua um pod cb-op-aks-demo-0000 do painel do k8s, pois ele é um nó de serviço de dados

Com o autoFailoverTimeout tempo limite variável definido em couchbase-persistent-cluster.yaml, o nó sofre falha automática e é detectado pelo operador autônomo e, portanto, pelo cluster do Couchbase

O controlador personalizado do Couchbase está constantemente observando a definição do cluster e precisa ter um total de 4 nós ou pods k8s, e ele vê que um deles desapareceu, portanto, cria um novo pod, junta-se ao cluster e o rebalanceamento é realizado.

Dos registros de pods do operador do couchbase

Vamos parar um pouco para ver o que aconteceu aqui!
Um nó falhou, foi detectado pelo Custom Controller, também conhecido como Couchbase Operator, que também observa a definição do cluster do couchbase e vê que precisa ter 7 pods ou 7 nós do couchbase no total, vê que um deles falhou, aguarda o autoFailoverTimeout e cria um novo pod, junta-se ao cluster e a operação de rebalanceamento é executada.
Aqui na Couchase, acreditamos na diferenciação sustentada para melhor atender nossos clientes em termos de agilidade, desempenho e tecnologia de ponta. Isso certamente é um divisor de águas. Agradecemos seus comentários e esperamos facilitar sua jornada rumo aos microsserviços com o Couchbase Autonomous Operator no kubernetes em execução no AKS.
Referências
https://docs.microsoft.com/en-us/azure/aks/azure-disks-dynamic-pv
https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster
O novo Couchbase Autonomous Operator 1.0 para Kubernetes e OpenShift agora é GA!
https://docs.couchbase.com/operator/1.0/overview.html