OpenShift é uma plataforma como serviço (PaaS) da Red Hat sobre contêineres Docker e Kubernetes. É uma plataforma de aplicativos de contêiner de código aberto da Red Hat baseada em contêineres do Docker e no gerenciador de cluster de contêineres do Kubernetes para desenvolvimento e implantação de aplicativos corporativos.
O Operator do Couchbase também é compatível com o OpenShift. Agora, vamos ver como você pode aumentar e diminuir a escala rapidamente, recuperar-se de falhas ou até mesmo alterar a arquitetura do seu cluster com apenas alguns comandos de linha:
Transcrição do vídeo:
Código:
|
1 |
https://github.com/couchbaselabs/kubernetes-starter-kit |
Pré-requisitos
Iniciando o Minishift
Para iniciar seu minishift, basta digitar o seguinte comando:
|
1 |
minishift start |

Depois que ele for iniciado, execute o seguinte comando para adicionar oc em seu Classpath:
|
1 |
eval $(minishift oc-env) |

Além disso, você também pode incluir o seguinte complemento para poder acessar seu cluster como administrador:
|
1 |
minishift addon apply admin-user |
Agora, para acessar o OpenShift, você pode usar o seguinte comando:
|
1 |
oc login -u admin |

Configuração do Minishift
Há algumas coisas que devem ser criadas antes de começarmos. Vou apenas listar todos os comandos necessários, mas você pode consultar a documentação oficial aqui.
1 - Criar um projeto Openshift
|
1 2 3 |
oc login -u developer oc new-project operator-example oc logout |
2 - Criar uma nova definição de recurso personalizado e função de cluster
|
1 2 3 4 |
oc login -u admin oc create -f https://packages.couchbase.com/kubernetes/0.8.1-beta2/openshift/crd.yaml oc create -f https://packages.couchbase.com/kubernetes/0.8.1-beta2/openshift/cluster-role-sa.yaml oc create -f https://packages.couchbase.com/kubernetes/0.8.1-beta2/openshift/cluster-role-user.yaml |
3- Configuração do RBAC para um projeto OpenShift
|
1 2 3 4 5 |
oc create serviceaccount couchbase-operator --namespace operator-example oc create rolebinding couchbase-operator --clusterrole couchbase-operator --serviceaccount operator-example:couchbase-operator oc adm policy add-scc-to-user anyuid system:serviceaccount:operator-example:couchbase-operator oc create rolebinding couchbasecluster --clusterrole couchbasecluster --user developer --namespace operator-example oc create clusterrolebinding couchbasecluster --clusterrole couchbasecluster --user developer |
Implantação do operador do Couchbase no OpenShift
Agora que já configuramos tudo, vamos implantar o Operator do Couchbase. Como mencionei em um postagem anterior do blogNo caso do Operador, ele é responsável por automatizar parte do trabalho do DBA, como unir um novo nó ao cluster, reequilibrar dados, consolidar registros etc.
Você pode implementar o operador executando o seguinte comando:
|
1 |
oc create -f https://packages.couchbase.com/kubernetes/0.8.1-beta2/openshift/operator.yaml |
Execute o comando abaixo para verificar se a implementação foi executada com êxito:
|
1 |
oc get pods: |

Implantação do Couchbase no OpenShift
A implantação do Couchbase no OpenShift é quase igual à implantação do implantando-o no KubernetesVocê só precisa executar o seguinte comando dentro do diretório "kubernetes":
|
1 2 |
oc create -f secret.yaml // create the user and password we are going to use to log-in to the web console oc create -f couchbase-cluster.yaml |
Nosso arquivo yaml contém a especificação do cluster, como o nome do bucket, o número de servidores, serviços etc:
secret.yaml
|
1 2 3 4 5 6 7 8 |
apiVersion: v1 kind: Secret metadata: name: cb-example-auth type: Opaque data: username: QWRtaW5pc3RyYXRvcg== #base64 for Administrator password: cGFzc3dvcmQ= #base64 for password |
couchbase-cluster.yaml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
apiVersion: couchbase.database.couchbase.com/v1beta1 kind: CouchbaseCluster metadata: name: cb-example spec: baseImage: couchbase/server version: enterprise-5.0.1 authSecret: cb-example-auth exposeAdminConsole: true cluster: dataServiceMemoryQuota: 256 indexServiceMemoryQuota: 256 searchServiceMemoryQuota: 256 indexStorageSetting: memory_optimized autoFailoverTimeout: 30 buckets: - name: couchbase-sample type: couchbase memoryQuota: 128 replicas: 3 ioPriority: high evictionPolicy: fullEviction conflictResolution: seqno enableFlush: true enableIndexReplica: false servers: - size: 3 name: all_services services: - data - index - query - search dataPath: /opt/couchbase/var/lib/couchbase/data indexPath: /opt/couchbase/var/lib/couchbase/data |
Consulte o documentação oficial para entender a função de cada propriedade.
No arquivo acima, especificamos que queremos 3 nós, o que significa que devemos ter 3 nós executando o Couchbase:
|
1 |
oc get pods |

Acesso ao seu banco de dados no OpenShift
Há muitas maneiras de expor o console da Web ao mundo externo. Neste artigo, vamos simplesmente encaminhar a porta para a máquina local com o seguinte comando:
|
1 |
oc port-forward cb-example-0000 8091:8091 |
Agora, você deve conseguir acessar o Console da Web do Couchbase em sua máquina local em https://localhost:8091:

Observe que todos os nós criados já fazem parte de um cluster. Tudo isso foi feito automaticamente pelo Operador do Couchbase.

Recuperação de uma falha no nó do banco de dados no OpenShift
Vamos eliminar uma de nossas instâncias para ver como o cluster se comporta:
|
1 |
oc delete pod cb-example-0001 |

O Couchbase perceberá imediatamente que um nó "desapareceu" e o processo de recuperação será iniciado. Conforme especificamos em couchbase-cluster.yaml que sempre queremos 3 servidores em execução, o Kubernetes iniciará uma nova instância chamado cb-example-0004:

Uma vez cb-exemplo-004 está ativo, o operador entra em ação para unir o nó recém-criado ao cluster e, em seguida, aciona o rebalanceamento de dados

Dimensionamento do Couchbase no Open Shift
Se você acha que aumentar a escala de um banco de dados é difícil, deveria tentar reduzi-la. Felizmente, isso é algo muito simples com o Couchbase e o OpenShift. Tudo o que você precisa é alterar a configuração do cluster:
couchbase-cluster.yaml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
apiVersion: couchbase.database.couchbase.com/v1beta1 kind: CouchbaseCluster metadata: name: cb-example spec: baseImage: couchbase/server version: enterprise-5.0.1 authSecret: cb-example-auth exposeAdminConsole: true cluster: dataServiceMemoryQuota: 256 indexServiceMemoryQuota: 256 searchServiceMemoryQuota: 256 indexStorageSetting: memory_optimized autoFailoverTimeout: 30 buckets: - name: couchbase-sample type: couchbase memoryQuota: 128 replicas: 3 ioPriority: high evictionPolicy: fullEviction conflictResolution: seqno enableFlush: true enableIndexReplica: false servers: - size: 1 //changed name: all_services services: - data - index - query - search dataPath: /opt/couchbase/var/lib/couchbase/data indexPath: /opt/couchbase/var/lib/couchbase/data |
Em seguida, execute o seguinte comando para enviar sua alteração para o OpenShift:
|
1 |
oc replace -f couchbase-cluster.yaml |
No entanto, há um pequeno detalhe aqui, pois não podemos simplesmente eliminar dois nós ao mesmo tempo sem algum risco de perda de dados. Para evitar esse problema, o operador reduz o cluster gradualmente, uma única instância de cada vez, acionando o rebalanceamento para garantir que nenhum dado seja perdido durante o processo:

Dimensionamento do Couchbase no OpenShift
Vamos aumentar a escala novamente para 3 nós. Como você deve ter adivinhado, tudo o que precisamos fazer é alterar a variável tamanho parâmetro em couchbase-cluster.yaml voltar para 3:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
apiVersion: couchbase.database.couchbase.com/v1beta1 kind: CouchbaseCluster metadata: name: cb-example spec: baseImage: couchbase/server version: enterprise-5.0.1 authSecret: cb-example-auth exposeAdminConsole: true cluster: dataServiceMemoryQuota: 256 indexServiceMemoryQuota: 256 searchServiceMemoryQuota: 256 indexStorageSetting: memory_optimized autoFailoverTimeout: 30 buckets: - name: couchbase-sample type: couchbase memoryQuota: 128 replicas: 3 ioPriority: high evictionPolicy: fullEviction conflictResolution: seqno enableFlush: true enableIndexReplica: false servers: - size: 3 //back to 3 servers name: all_services services: - data - index - query - search dataPath: /opt/couchbase/var/lib/couchbase/data indexPath: /opt/couchbase/var/lib/couchbase/data |
Em seguida, atualizamos nossa configuração executando
|
1 |
oc replace -f Couchbase-cluster.yaml |
Após alguns minutos, você verá que agora temos 3 nós novamente:

Escala multidimensional
Você também pode aproveitar o dimensionamento multidimensional especificando os serviços que deseja executar em cada nó:
couchbase-cluster.yaml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
apiVersion: couchbase.database.couchbase.com/v1beta1 kind: CouchbaseCluster metadata: name: cb-example spec: baseImage: couchbase/server version: enterprise-5.0.1 authSecret: cb-example-auth exposeAdminConsole: true cluster: dataServiceMemoryQuota: 256 indexServiceMemoryQuota: 256 searchServiceMemoryQuota: 256 indexStorageSetting: memory_optimized autoFailoverTimeout: 30 buckets: - name: couchbase-sample type: couchbase memoryQuota: 128 replicas: 3 ioPriority: high evictionPolicy: fullEviction conflictResolution: seqno enableFlush: true enableIndexReplica: false servers: - size: 2 name: data_and_index services: - data - index dataPath: /opt/couchbase/var/lib/couchbase/data indexPath: /opt/couchbase/var/lib/couchbase/data - size: 1 name: query_and_search services: - query - search dataPath: /opt/couchbase/var/lib/couchbase/data indexPath: /opt/couchbase/var/lib/couchbase/data |
Novamente, precisamos enviar nossas alterações para o OpenShift com o seguinte comando:
|
1 |
oc replace -f couchbase-cluster.yaml |

Nesse cenário, três novos nós serão criados: dois executando dados e índice e um executando pesquisa e consulta de texto completo

Conectando seu aplicativo ao Couchbase no OpenShift
A implantação de um aplicativo no OpenShift é muito semelhante à implantação no Kubernetes. A principal diferença é que você deve usar o oc em vez de usar kubectl. Este artigo mostra um processo passo a passo de como fazer isso.
Se você tiver alguma dúvida, envie-me um tweet para @deniswsrosa ou deixe um comentário abaixo.
Leia também:
- Correspondência difusa
-
Criação de microsserviços elásticos com Kubernetes e Spring Boot desde o início
Blog muito bem escrito! É bom mostrar como aumentar/diminuir a escala, mostrar a capacidade multidimensional, tudo no mesmo blog.
Muito obrigado! Se tiver alguma dúvida, fique à vontade para perguntar.
Oi Denis
Obrigado por esse artigo, ele parece fantástico, mas parece que o link não funciona mais, ou seja https://packages.couchbase.com/kubernetes/0.8.1-beta2/openshift/crd.yaml
Você pode me indicar onde eles moram agora?
Muito obrigado, Adrian