{"id":6688,"date":"2019-08-11T13:00:43","date_gmt":"2019-08-11T20:00:43","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6688"},"modified":"2025-06-13T17:14:28","modified_gmt":"2025-06-14T00:14:28","slug":"deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/","title":{"rendered":"Clusters de autocorre\u00e7\u00e3o usando volumes persistentes do Kubernetes"},"content":{"rendered":"<h2 class=\"wp-block-heading\" id=\"prolog\">Pr\u00f3logo<\/h2>\r\n\r\n\r\n\r\n<p>Espera-se que os aplicativos empresariais modernos estejam ativos 24 horas por dia, 7 dias por semana, mesmo durante a implementa\u00e7\u00e3o planejada de novos recursos e a aplica\u00e7\u00e3o peri\u00f3dica de patches no sistema operacional ou no aplicativo. Para conseguir esse feito, s\u00e3o necess\u00e1rias ferramentas e tecnologias que garantam a velocidade do desenvolvimento, a estabilidade da infraestrutura e a capacidade de dimensionamento.<\/p>\r\n\r\n\r\n\r\n<p>As ferramentas de orquestra\u00e7\u00e3o de cont\u00eaineres, como o Kubernetes, est\u00e3o revolucionando a maneira como os aplicativos est\u00e3o sendo desenvolvidos e implantados atualmente, abstraindo as m\u00e1quinas f\u00edsicas que gerenciam. Com o Kubernetes, voc\u00ea pode descrever a quantidade de mem\u00f3ria e a capacidade de computa\u00e7\u00e3o que deseja e disponibiliz\u00e1-las sem se preocupar com a infraestrutura subjacente.<\/p>\r\n\r\n\r\n\r\n<p>Os pods (unidade de recurso de computa\u00e7\u00e3o) e os cont\u00eaineres (onde os aplicativos s\u00e3o executados) em um ambiente Kubernetes podem se recuperar automaticamente em caso de qualquer tipo de falha. Eles s\u00e3o, em ess\u00eancia, ef\u00eameros. Isso funciona muito bem quando voc\u00ea tem um microsservi\u00e7o sem estado, mas os aplicativos que exigem que seu estado seja mantido, por exemplo, sistemas de gerenciamento de banco de dados como o Couchbase, precisam ser capazes de externalizar o armazenamento do gerenciamento do ciclo de vida de pods e cont\u00eaineres para que os dados possam ser recuperados rapidamente simplesmente remontando os volumes de armazenamento em um pod rec\u00e9m-eleito.<\/p>\r\n\r\n\r\n\r\n<p>Isso \u00e9 o que <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/persistent-volumes\/\">Volumes persistentes<\/a> permite implementa\u00e7\u00f5es baseadas em Kubernetes. <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/overview.html\">Operador aut\u00f4nomo do Couchbase<\/a> \u00e9 um dos primeiros a adotar essa tecnologia para tornar a recupera\u00e7\u00e3o de qualquer falha baseada em infraestrutura perfeita e, principalmente, mais r\u00e1pida.<\/p>\r\n\r\n\r\n\r\n<p>Neste artigo, veremos passo a passo como voc\u00ea pode implantar o cluster do Couchbase no Amazon Elastic Container Service for Kubernetes (Amazon EKS): 1) usando v\u00e1rios grupos de servidores do Couchbase que podem ser mapeados para uma zona de disponibilidade separada para alta disponibilidade 2) aproveitando volumes persistentes para recupera\u00e7\u00e3o r\u00e1pida de falhas na infraestrutura.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/K8-Animation.gif\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Figura 1: Operador aut\u00f4nomo do Couchbase para Kubernetes monitora e cura automaticamente a plataforma de banco de dados do Couchbase.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"prerequisites\">1. Pr\u00e9-requisitos<\/h2>\r\n\r\n\r\n\r\n<p>H\u00e1 tr\u00eas pr\u00e9-requisitos de alto n\u00edvel antes de come\u00e7armos a implementa\u00e7\u00e3o do Couchbase Autonomous Operator no EKS:<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>Voc\u00ea tem <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/tools\/install-kubectl\/\">kubectl<\/a> instalado em nosso computador local.<\/li>\r\n<li>Mais recentes <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/cli-chap-install.html\">CLI DO AWS<\/a> est\u00e1 configurado para que possamos estabelecer com seguran\u00e7a um canal entre nossa m\u00e1quina local e o plano de controle do Kubernetes em execu\u00e7\u00e3o no AWS.<\/li>\r\n<li>Amazon <a href=\"https:\/\/docs.aws.amazon.com\/eks\/latest\/userguide\/getting-started.html\">Grupo EKS<\/a> \u00e9 implantado com pelo menos tr\u00eas n\u00f3s de trabalho em tr\u00eas zonas de disponibilidade separadas para que possamos implantar e gerenciar nosso cluster do Couchbase posteriormente. Usaremos us-east-1 como regi\u00e3o e us-east-1a\/1b\/1c como tr\u00eas zonas de disponibilidade, mas voc\u00ea pode implementar em qualquer regi\u00e3o\/zona fazendo pequenas altera\u00e7\u00f5es nos arquivos YAML nos exemplos abaixo.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">2. Implantar o operador aut\u00f4nomo do Couchbase<\/h2>\r\n\r\n\r\n\r\n<p>Antes de iniciarmos a configura\u00e7\u00e3o do Couchbase Operator, execute o comando \"kubectl get nodes\" no computador local para confirmar se o cluster EKS est\u00e1 funcionando.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl get nodes\r\n\r\nNAME                              STATUS    ROLES     AGE       VERSION\r\nip-192-168-106-132.ec2.internal   Ready     &lt;none&gt;    110m      v1.11.9\r\nip-192-168-153-241.ec2.internal   Ready     &lt;none&gt;    110m      v1.11.9\r\nip-192-168-218-112.ec2.internal   Ready     &lt;none&gt;    110m      v1.11.9<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Depois de testarmos que podemos nos conectar ao plano de controle do Kubernetes em execu\u00e7\u00e3o no cluster do Amazon EKS a partir de nossa m\u00e1quina local, podemos agora come\u00e7ar com as etapas necess\u00e1rias para implantar o Couchbase Autonomous Operator, que \u00e9 a tecnologia de cola que permite que o cluster do Couchbase Server seja gerenciado pelo Kubernetes.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">2.1. Download do pacote Operator<\/h3>\r\n\r\n\r\n\r\n<p>Vamos come\u00e7ar fazendo o download da vers\u00e3o mais recente do <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/?family=kubernetes\">Operador aut\u00f4nomo do Couchbase<\/a> e descompacte-o na m\u00e1quina local. Altere o diret\u00f3rio para a pasta do operador para que possamos encontrar os arquivos YAML necess\u00e1rios para implantar o operador do Couchbase:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ cd couchbase-autonomous-operator-kubernetes_1.2.0-981_linux-x86_64\r\n\r\n$ ls\r\n\r\nLicense.txt            couchbase-cli-create-user.yaml  operator-role-binding.yaml  secret.yaml\r\nREADME.txt            couchbase-cluster.yaml      operator-role.yaml\r\nadmission.yaml            crd.yaml            operator-service-account.yaml\r\nbin                operator-deployment.yaml    pillowfight-data-loader.yaml<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">2.2. Criar um espa\u00e7o de nome<\/h3>\r\n\r\n\r\n\r\n<p>Crie um namespace que permita que os recursos do cluster sejam bem separados entre v\u00e1rios usu\u00e1rios. Para fazer isso, usaremos um namespace exclusivo chamado emart para nossa implanta\u00e7\u00e3o e, posteriormente, usaremos esse namespace para implantar o cluster do Couchbase.<\/p>\r\n\r\n\r\n\r\n<p>Em seu diret\u00f3rio de trabalho, crie um arquivo <a href=\"https:\/\/github.com\/couchbaselabs\/cboperator-hol\/blob\/master\/eks\/cb-operator-guide\/files\/namespace.yaml\">namespace.yaml<\/a> com esse conte\u00fado e salve-o no pr\u00f3prio diret\u00f3rio do operador do Couchbase:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>apiVersion: v1\r\nkind: Namespace\r\nmetadata:\r\n  name: emart<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Depois de salvar a configura\u00e7\u00e3o do namespace em um arquivo, execute kubectl cmd para cri\u00e1-lo:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl create -f namespace.yaml<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Execute o comando get namespace para confirmar que ele foi criado com sucesso:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl get namespaces\r\n\r\noutput:\r\n\r\nNAME          STATUS    AGE\r\ndefault       Active    1h\r\nemart         Active    12s<\/code><\/pre>\r\n\r\n\r\n\r\n<p>A partir de agora, usaremos o emart como namespace para todo o provisionamento de recursos.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">2.3. Adicionar certificado TLS<\/h3>\r\n\r\n\r\n\r\n<p>Criar segredo para o Couchbase Operator e servidores com um determinado certificado. Veja <a href=\"https:\/\/docs.couchbase.com\/operator\/1.2\/tls.html\">como criar um certificado personalizado<\/a> se n\u00e3o tiver uma.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl create secret generic couchbase-server-tls --from-file chain.pem --from-file pkey.key --namespace emart\r\n\r\nsecret\/couchbase-server-tls created<\/code><\/pre>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl create secret generic couchbase-operator-tls --from-file pki\/ca.crt --namespace emart\r\n\r\nsecret\/couchbase-operator-tls created<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">2.4. Instalar o controlador de admiss\u00e3o<\/h3>\r\n\r\n\r\n\r\n<p>O controlador de admiss\u00e3o \u00e9 um componente necess\u00e1rio do Couchbase Autonomous Operator e precisa ser instalado separadamente. O objetivo principal do controlador de admiss\u00e3o \u00e9 validar as altera\u00e7\u00f5es de configura\u00e7\u00e3o do cluster do Couchbase antes que o Operador atue sobre elas, protegendo assim sua implementa\u00e7\u00e3o do Couchbase (e o Operador) de qualquer dano acidental que possa surgir de uma configura\u00e7\u00e3o inv\u00e1lida. Para obter detalhes sobre a arquitetura, visite a p\u00e1gina de documenta\u00e7\u00e3o no site <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/install-admission-controller.html#architecture\">Controlador de Admiss\u00e3o<\/a><\/p>\r\n\r\n\r\n\r\n<p>Siga as etapas a seguir para implementar o controlador de admiss\u00e3o:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>No diret\u00f3rio do operador do Couchbase, execute o seguinte comando para criar o controlador de admiss\u00e3o:<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl create -f admission.yaml --namespace emart<\/code><\/pre>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Confirme se o controlador de admiss\u00e3o foi implantado com \u00eaxito:<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl get deployments --namespace emart\r\n\r\nNAME                           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE\r\ncouchbase-operator-admission   1         1         1            1           1m<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">2.5. Instalar o CRD<\/h3>\r\n\r\n\r\n\r\n<p>A primeira etapa da instala\u00e7\u00e3o do Operator \u00e9 instalar a defini\u00e7\u00e3o de recurso personalizado (CRD) que descreve o tipo de recurso CouchbaseCluster. Isso pode ser feito com o seguinte comando:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>kubectl create -f crd.yaml --namespace emart<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">2.6. Criar uma fun\u00e7\u00e3o de operador<\/h3>\r\n\r\n\r\n\r\n<p>Em seguida, criaremos um arquivo <a href=\"https:\/\/kubernetes.io\/docs\/reference\/access-authn-authz\/rbac\/#api-overview\">fun\u00e7\u00e3o de cluster<\/a> que permite que o Operador acesse os recursos necess\u00e1rios para sua execu\u00e7\u00e3o. Como o Operador gerenciar\u00e1 muitos <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/overview\/working-with-objects\/namespaces\/\">Espa\u00e7os de nomes<\/a>Se voc\u00ea n\u00e3o tiver uma fun\u00e7\u00e3o de cluster, \u00e9 melhor criar uma fun\u00e7\u00e3o de cluster primeiro, pois voc\u00ea pode atribuir essa fun\u00e7\u00e3o a um <a href=\"https:\/\/kubernetes.io\/docs\/reference\/access-authn-authz\/rbac\/#service-account-permissions\">conta de servi\u00e7o<\/a> em qualquer namespace.<\/p>\r\n\r\n\r\n\r\n<p>Para criar a fun\u00e7\u00e3o de cluster para o Operator, execute o seguinte comando:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl create -f operator-role.yaml --namespace emart<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Essa fun\u00e7\u00e3o de cluster s\u00f3 precisa ser criada uma vez.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">2.7. Criar uma conta de servi\u00e7o<\/h3>\r\n\r\n\r\n\r\n<p>Depois que a fun\u00e7\u00e3o de cluster for criada, voc\u00ea precisar\u00e1 criar uma conta de servi\u00e7o no namespace em que est\u00e1 instalando o Operator. Para criar a conta de servi\u00e7o:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl create serviceaccount couchbase-operator --namespace emart<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Agora, atribua a fun\u00e7\u00e3o de operador \u00e0 conta de servi\u00e7o:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl create rolebinding couchbase-operator --role couchbase-operator \\\r\n--serviceaccount emart:couchbase-operator --namespace emart\r\n\r\noutput:\r\n\r\nclusterrolebinding.rbac.authorization.k8s.io\/couchbase-operator created<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Agora, antes de prosseguirmos, vamos nos certificar de que todas as fun\u00e7\u00f5es e contas de servi\u00e7o sejam criadas no namespace <em>emart<\/em>. Para isso, execute estas tr\u00eas verifica\u00e7\u00f5es e certifique-se de que cada uma delas retorne algo:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>Kubectl get roles -n emart\r\nKubectl get rolebindings -n emart\r\nKubectl get sa -n emart<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">2.8. Implantar o Couchbase Operator<\/h3>\r\n\r\n\r\n\r\n<p>Agora temos todas as fun\u00e7\u00f5es e privil\u00e9gios para que nosso operador seja implementado. A implanta\u00e7\u00e3o do operador \u00e9 t\u00e3o simples quanto executar o arquivo operator.yaml no diret\u00f3rio do Couchbase Autonomous Operator.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl create -f operator-deployment.yaml --namespace emart\r\n\r\noutput:\r\n\r\ndeployment.apps\/couchbase-operator created<\/code><\/pre>\r\n\r\n\r\n\r\n<p>O comando acima far\u00e1 o download da imagem do Docker do Operator (especificada no arquivo operator.yaml) e criar\u00e1 uma implanta\u00e7\u00e3o, que gerencia uma \u00fanica inst\u00e2ncia do Operator. O Operator usa uma implanta\u00e7\u00e3o para que possa reiniciar se o pod em que est\u00e1 sendo executado morrer.<\/p>\r\n\r\n\r\n\r\n<p>Levaria menos de um minuto para o Kubernetes implantar o Operator e para que ele estivesse pronto para ser executado.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">a) Verificar o status da implanta\u00e7\u00e3o<\/h4>\r\n\r\n\r\n\r\n<p>Voc\u00ea pode usar o seguinte comando para verificar o status da implanta\u00e7\u00e3o:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>  $ kubectl get deployments --namespace emart<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Se voc\u00ea executar esse comando imediatamente ap\u00f3s a implanta\u00e7\u00e3o do Operator, o resultado ser\u00e1 parecido com o seguinte:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>NAME                   DESIRED    CURRENT     UP-TO-DATE      AVAILABLE        AGE\r\ncouchbase-operator       1          1          1               0               10s<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Observa\u00e7\u00e3o: a sa\u00edda acima significa que o operador do Couchbase est\u00e1 implantado e voc\u00ea pode prosseguir com a implanta\u00e7\u00e3o do cluster do Couchbase.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">b) Verificar o status do operador<\/h4>\r\n\r\n\r\n\r\n<p>Voc\u00ea pode usar o seguinte comando para verificar se o Operator foi iniciado com \u00eaxito:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl get pods -l app=couchbase-operator --namespace emart<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Se o Operador estiver ativo e em execu\u00e7\u00e3o, o comando retornar\u00e1 uma sa\u00edda em que o campo READY mostra 1\/1, como, por exemplo:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>NAME                                    READY   STATUS   RESTARTS   AGE\r\ncouchbase-operator-8c554cbc7-6vqgf      1\/1         Running  0          57s<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Voc\u00ea tamb\u00e9m pode verificar os registros para confirmar que o Operador est\u00e1 em funcionamento. Procure a mensagem: CRD initialized, listening for events... module=controller.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl logs couchbase-operator-8c554cbc7-6vqgf --namespace emart --tail 20\r\n\r\noutput:\r\n\r\ntime=\"2019-05-30T23:00:58Z\" level=info msg=\"couchbase-operator v1.2.0 (release)\" module=main\r\ntime=\"2019-05-30T23:00:58Z\" level=info msg=\"Obtaining resource lock\" module=main\r\ntime=\"2019-05-30T23:00:58Z\" level=info msg=\"Starting event recorder\" module=main\r\ntime=\"2019-05-30T23:00:58Z\" level=info msg=\"Attempting to be elected the couchbase-operator leader\" module=main\r\ntime=\"2019-05-30T23:00:58Z\" level=info msg=\"I'm the leader, attempt to start the operator\" module=main\r\ntime=\"2019-05-30T23:00:58Z\" level=info msg=\"Creating the couchbase-operator controller\" module=main\r\ntime=\"2019-05-30T23:00:58Z\" level=info msg=\"Event(v1.ObjectReference{Kind:\\\"Endpoints\\\", Namespace:\\\"emart\\\", Name:\\\"couchbase-operator\\\", UID:\\\"c96ae600-832e-11e9-9cec-0e104d8254ae\\\", APIVersion:\\\"v1\\\", ResourceVersion:\\\"950158\\\", FieldPath:\\\"\\\"}): type: 'Normal' reason: 'LeaderElection' couchbase-operator-6cbc476d4d-2kps4 became leader\" module=event_recorder<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">3. Implantar o cluster do Couchbase usando volumes persistentes<\/h2>\r\n\r\n\r\n\r\n<p>Em um ambiente de produ\u00e7\u00e3o em que o desempenho e o SLA do sistema s\u00e3o mais importantes, devemos sempre planejar a implanta\u00e7\u00e3o do cluster do Couchbase usando volumes persistentes, pois isso ajuda:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Recupera\u00e7\u00e3o de dados<\/strong>: Os volumes persistentes permitem que os dados associados aos pods sejam recuperados no caso de um pod ser encerrado. Isso ajuda a evitar a perda de dados e a constru\u00e7\u00e3o demorada de \u00edndices ao usar os servi\u00e7os de dados ou de \u00edndices.<\/li>\r\n<li><strong>Realoca\u00e7\u00e3o de c\u00e1psulas<\/strong>: O Kubernetes pode decidir expulsar pods que atingem limites de recursos, como limites de CPU e mem\u00f3ria. Os pods que t\u00eam backup com Volumes persistentes podem ser encerrados e reiniciados em n\u00f3s diferentes sem incorrer em tempo de inatividade ou perda de dados.<\/li>\r\n<li><strong>Provisionamento din\u00e2mico<\/strong>: O Operator criar\u00e1 Persistent Volumes sob demanda \u00e0 medida que seu cluster for dimensionado, aliviando a necessidade de pr\u00e9-provisionar o armazenamento do cluster antes da implementa\u00e7\u00e3o.<\/li>\r\n<li><strong>Integra\u00e7\u00e3o com a nuvem<\/strong>: O Kubernetes se integra aos provisionadores de armazenamento nativos dispon\u00edveis nos principais fornecedores de nuvem, como AWS e GCE.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Na pr\u00f3xima se\u00e7\u00e3o, veremos como \u00e9 poss\u00edvel definir classes de armazenamento em diferentes zonas de disponibilidade e criar um modelo de reivindica\u00e7\u00e3o de volume persistente, que ser\u00e1 usado em <a href=\"https:\/\/github.com\/couchbaselabs\/cboperator-hol\/blob\/master\/eks\/cb-operator-guide\/files\/couchbase-cluster-with-pv-1.2.yaml\">couchbase-cluster-com-pv-1.2.yaml<\/a> arquivo.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">3.1. Criar segredo para o console de administra\u00e7\u00e3o do Couchbase<\/h3>\r\n\r\n\r\n\r\n<p>A primeira coisa que precisamos fazer \u00e9 criar uma credencial secreta que ser\u00e1 usada pelo console administrativo da Web durante o login. Por conveni\u00eancia, um exemplo de segredo \u00e9 fornecido no pacote Operator. Quando voc\u00ea o envia para o cluster do Kubernetes, o segredo define o nome de usu\u00e1rio como Administrator e a senha como password.<\/p>\r\n\r\n\r\n\r\n<p>Para enviar o segredo para seu cluster do Kubernetes, execute o seguinte comando:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl create -f secret.yaml --namespace emart\r\n\r\nOutput:\r\n\r\nSecret\/cb-example-auth created<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">3.2 Criar classe de armazenamento do AWS para o cluster EKS<\/h3>\r\n\r\n\r\n\r\n<p>Agora, para usar o PersistentVolume para os servi\u00e7os do Couchbase (dados, \u00edndice, pesquisa etc.), precisamos criar Classes de armazenamento (SC) primeiro em cada uma das Zonas de disponibilidade (AZ). Vamos come\u00e7ar verificando quais classes de armazenamento existem em nosso ambiente.<\/p>\r\n\r\n\r\n\r\n<p>Vamos usar o comando kubectl para descobrir isso:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl get storageclass\r\n\r\nOutput:\r\n\r\ngp2 (default)   kubernetes.io\/aws-ebs   12m<\/code><\/pre>\r\n\r\n\r\n\r\n<p>A sa\u00edda acima significa que temos apenas a classe de armazenamento gp2 padr\u00e3o e precisamos criar classes de armazenamento separadas em todas as AZs em que planejamos implantar nosso cluster do Couchbase.<\/p>\r\n\r\n\r\n\r\n<p>1) Crie um arquivo de manifesto de classe de armazenamento do AWS. O exemplo abaixo define a estrutura da classe de armazenamento (<a href=\"https:\/\/github.com\/couchbaselabs\/cboperator-hol\/blob\/master\/eks\/cb-operator-guide\/files\/sc-gp2.yaml\">sc-gp2.yaml<\/a>), que usa o tipo de volume Amazon EBS gp2 (tamb\u00e9m conhecido como unidade SSD de uso geral). Esse armazenamento ser\u00e1 usado posteriormente em nosso <em>VolumeClaimTemplate<\/em>.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>For more information about the options available for AWS storage classes, see [AWS](https:\/\/kubernetes.io\/docs\/concepts\/storage\/storage-classes\/#aws) in the Kubernetes documentation.\r\n\r\n```\r\napiVersion: storage.k8s.io\/v1\r\nkind: StorageClass\r\nmetadata:\r\n     labels:\r\n       k8s-addon: storage-aws.addons.k8s.io\r\n     name: gp2-multi-zone\r\nparameters:\r\n     type: gp2\r\nprovisioner: kubernetes.io\/aws-ebs\r\nreclaimPolicy: Delete\r\nvolumeBindingMode: WaitForFirstConsumer\r\n```\r\nAbove we used ```reclaimPolicy``` to _Delete_ which tells K8 to delete the volumes of deleted Pods but you can change it to _Retain_ depending on your needs or if for troubleshooting purpose you would like to keep the volumes of deleted pods.<\/code><\/pre>\r\n\r\n\r\n\r\n<p>2) Agora, usaremos o comando kubectl para criar fisicamente uma classe de armazenamento a partir dos arquivos de manifesto que definimos acima.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>```\r\n$ kubectl create -f sc-gp2.yaml\r\n\r\nOutput:\r\n\r\nstorageclass.storage.k8s.io\/gp2-multi-zone created\r\n```<\/code><\/pre>\r\n\r\n\r\n\r\n<p>3) Verificar a nova classe de armazenamento<br \/>Depois de criar todas as classes de armazenamento, voc\u00ea pode verific\u00e1-las por meio do comando kubectl:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>```\r\n$ kubectl get sc  --namespace emart\r\n\r\noutput:\r\n\r\nNAME            PROVISIONER             AGE\r\ngp2 (default)   kubernetes.io\/aws-ebs   16h\r\ngp2-multi-zone  kubernetes.io\/aws-ebs   96s\r\n```<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">3.3. Conscientiza\u00e7\u00e3o de grupos de servidores<\/h3>\r\n\r\n\r\n\r\n<p>O Server Group Awareness oferece disponibilidade aprimorada, pois protege um cluster contra falhas de infraestrutura em grande escala, por meio da defini\u00e7\u00e3o de grupos.<\/p>\r\n\r\n\r\n\r\n<p>Os grupos devem ser definidos de acordo com a distribui\u00e7\u00e3o f\u00edsica dos n\u00f3s do cluster. Por exemplo, um grupo deve incluir apenas os n\u00f3s que est\u00e3o em um \u00fanico rack de servidor ou, no caso de implanta\u00e7\u00f5es em nuvem, em uma \u00fanica zona de disponibilidade. Assim, se o rack do servidor ou a zona de disponibilidade ficar indispon\u00edvel devido a uma falha de energia ou de rede, o Group Failover, se ativado, permitir\u00e1 o acesso cont\u00ednuo aos dados afetados.<\/p>\r\n\r\n\r\n\r\n<p>Portanto, colocamos os servidores Couchbase em <code>spec.servers.serverGroups<\/code>que ser\u00e3o mapeados para n\u00f3s EKS separados fisicamente e executados em tr\u00eas AZs diferentes (us-east-1a\/b\/c):<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>spec:\r\n  servers:\r\n    - name: data-east-1a\r\n      size: 1\r\n      services:\r\n        - data\r\n      serverGroups:\r\n       - us-east-1a<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">3.4. Adicionar classe de armazenamento ao modelo de declara\u00e7\u00e3o de volume persistente<\/h3>\r\n\r\n\r\n\r\n<p>Com os grupos de servidores definidos e as classes de armazenamento dispon\u00edveis em todas as tr\u00eas AZs, vamos agora criar volumes de armazenamento din\u00e2mico e mont\u00e1-los em cada um dos servidores Couchbase que requerem dados persistentes. Para fazer isso, primeiro definiremos o Persistent Volume Claim Template em nosso <a href=\"https:\/\/github.com\/couchbaselabs\/cboperator-hol\/blob\/master\/eks\/cb-operator-guide\/files\/couchbase-cluster-with-pv-1.2.yaml\">couchbase-cluster.yaml<\/a> (que pode ser encontrado na pasta do operador).<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>Spec:\r\n  volumeClaimTemplates:\r\n    - metadata:\r\n        name: pvc-default\r\n      spec:\r\n        storageClassName: gp2-multi-zone\r\n        resources:\r\n          requests:\r\n            storage: 1Gi\r\n    - metadata:\r\n        name: pvc-data\r\n      spec:\r\n        storageClassName: gp2-multi-zone\r\n        resources:\r\n          requests:\r\n            storage: 5Gi\r\n    - metadata:\r\n        name: pvc-index\r\n      spec:\r\n        storageClassName: gp2-multi-zone\r\n        resources:\r\n          requests:\r\n            storage: 3Gi<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Depois que o modelo de reivindica\u00e7\u00e3o for adicionado, a etapa final \u00e9 emparelhar o modelo de reivindica\u00e7\u00e3o de volume com os grupos de servidores de acordo com cada uma das zonas. Por exemplo, os pods no grupo de servidores chamado data-east-1a devem usar o volumeClaimTemplate chamado <em>dados pvc<\/em> para armazenar dados e <em>pvc-default<\/em> para os bin\u00e1rios e arquivos de registro do Couchbase.<\/p>\r\n\r\n\r\n\r\n<p>Por exemplo, o seguinte mostra o emparelhamento de um Server Group e seu VolumeClaimTemplate associado:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>spec:\r\n  servers:\r\n    - name: data-east-1a\r\n      size: 1\r\n      services:\r\n        - data\r\n      serverGroups:\r\n       - us-east-1a\r\n      pod:\r\n        volumeMounts:\r\n          default: pvc-default\r\n          data: pvc-data\r\n    - name: data-east-1b\r\n      size: 1\r\n      services:\r\n        - data\r\n      serverGroups:\r\n       - us-east-1b\r\n      pod:\r\n        volumeMounts:\r\n          default: pvc-default\r\n          data: pvc-data\r\n    - name: data-east-1c\r\n      size: 1\r\n      services:\r\n        - data\r\n      serverGroups:\r\n       - us-east-1c\r\n      pod:\r\n        volumeMounts:\r\n          default: pvc-default\r\n          data: pvc-data<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Observe que criamos tr\u00eas grupos de servidores de dados separados (data-east-1a\/-1b\/-1c), cada um localizado em sua pr\u00f3pria AZ, usando modelos de reivindica\u00e7\u00e3o de volume persistente dessa AZ. Agora, usando o mesmo conceito, adicionaremos o \u00edndice e os servi\u00e7os de consulta e os alocaremos em grupos de servidores separados para que possam ser dimensionados independentemente dos n\u00f3s de dados.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">3.5. Implantar o cluster do Couchbase<\/h3>\r\n\r\n\r\n\r\n<p>A especifica\u00e7\u00e3o completa para implantar o cluster do Couchbase em 3 zonas diferentes usando volumes persistentes pode ser vista na se\u00e7\u00e3o <a href=\"https:\/\/github.com\/couchbaselabs\/cboperator-hol\/blob\/master\/eks\/cb-operator-guide\/files\/couchbase-cluster-with-pv-1.2.yaml\">couchbase-cluster-com-pv-1.2.yaml<\/a> arquivo. Esse arquivo, juntamente com outros arquivos yaml de amostra usados neste artigo, pode ser baixado deste reposit\u00f3rio git.<\/p>\r\n\r\n\r\n\r\n<p>Abra o arquivo yaml e observe que estamos implantando o servi\u00e7o de dados em tr\u00eas AZs, mas implantando o servi\u00e7o de \u00edndice e consulta somente em duas AZs. Voc\u00ea pode alterar a configura\u00e7\u00e3o para atender aos seus requisitos de produ\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p>Agora, use o kubectl para implantar o cluster.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl create -f couchbase-cluster-with-pv-1.2.yaml --save-config --namespace emart<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Isso iniciar\u00e1 a implanta\u00e7\u00e3o do cluster do Couchbase e, se tudo correr bem, teremos cinco pods do cluster do Couchbase hospedando os servi\u00e7os de acordo com o arquivo de configura\u00e7\u00e3o acima. Para verificar o progresso, execute este comando, que observar\u00e1 (argumento -w) o progresso da cria\u00e7\u00e3o dos pods:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl get pods --namespace emart -w\r\n\r\noutput:\r\n\r\nNAME                                 READY     STATUS              RESTARTS   AGE\r\ncb_eks_demo-0000                     1\/1       Running             0          2m\r\ncb_eks_demo-0001                     1\/1       Running             0          1m\r\ncb_eks_demo-0002                     1\/1       Running             0          1m\r\ncb_eks_demo-0003                     1\/1       Running             0          37s\r\ncb_eks_demo-0004                     1\/1       ContainerCreating   0          1s\r\ncouchbase-operator-8c554cbc7-n8rhg   1\/1       Running             0          19h<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Se, por algum motivo, houver uma exce\u00e7\u00e3o, voc\u00ea poder\u00e1 encontrar os detalhes da exce\u00e7\u00e3o no arquivo de log do couchbase-operator. Para exibir as \u00faltimas 20 linhas do registro, copie o nome do pod do operador e execute o comando abaixo, substituindo o nome do operador pelo nome do seu ambiente.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl logs couchbase-operator-8c554cbc7-98dkl --namespace emart --tail 20\r\n\r\noutput:\r\n\r\ntime=\"2019-02-13T18:32:26Z\" level=info msg=\"Cluster does not exist so the operator is attempting to create it\" cluster-name=cb-eks-demo module=cluster\r\ntime=\"2019-02-13T18:32:26Z\" level=info msg=\"Creating headless service for data nodes\" cluster-name=cb-eks-demo module=cluster\r\ntime=\"2019-02-13T18:32:26Z\" level=info msg=\"Creating NodePort UI service (cb-eks-demo-ui) for data nodes\" cluster-name=cb-eks-demo module=cluster\r\ntime=\"2019-02-13T18:32:26Z\" level=info msg=\"Creating a pod (cb-eks-demo-0000) running Couchbase enterprise-5.5.3\" cluster-name=cb-eks-demo module=cluster\r\ntime=\"2019-02-13T18:32:34Z\" level=warning msg=\"node init: failed with error [Post https:\/\/cb-eks-demo-0000.cb-eks-demo.emart.svc:8091\/node\/controller\/rename: dial tcp: lookup cb-eks-demo-0000.cb-eks-demo.emart.svc on 10.100.0.10:53: no such host] ...retrying\" cluster-name=cb-eks-demo module=cluster\r\ntime=\"2019-02-13T18:32:39Z\" level=info msg=\"Operator added member (cb-eks-demo-0000) to manage\" cluster-name=cb-eks-demo module=cluster\r\ntime=\"2019-02-13T18:32:39Z\" level=info msg=\"Initializing the first node in the cluster\" cluster-name=cb-eks-demo module=cluster\r\ntime=\"2019-02-13T18:32:39Z\" level=info msg=\"start running...\" cluster-name=cb-eks-demo module=cluster<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Quando todos os pods estiverem prontos, voc\u00ea poder\u00e1 fazer o port forward de um dos pods do cluster do Couchbase para que possamos visualizar o status do cluster no console da Web. Execute este comando para fazer o encaminhamento de porta.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>$ kubectl port-forward cb-eks-demo-0000 18091:18091 --namespace emart<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Nesse ponto, voc\u00ea pode abrir um navegador e digitar https:\/\/localhost:18091, que exibir\u00e1 o console da Web do Couchbase, no qual voc\u00ea poder\u00e1 monitorar as estat\u00edsticas do servidor, criar buckets e executar consultas, tudo em um \u00fanico lugar.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/K8-Cluster--1024x516.png\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Figura 2: Cluster do Couchbase de cinco n\u00f3s usando volumes persistentes.<\/p>\r\n\r\n\r\n\r\n<p><strong>Observa\u00e7\u00e3o<\/strong>: Visite nossa <a href=\"https:\/\/github.com\/couchbaselabs\/cboperator-hol\/tree\/master\/eks\">reposit\u00f3rio git<\/a> para encontrar a vers\u00e3o mais recente do workshop acima.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclus\u00e3o<\/h2>\r\n\r\n\r\n\r\n<p>O Couchbase Autonomous Operator torna o gerenciamento e a orquestra\u00e7\u00e3o do Couchbase Cluster perfeitos na plataforma Kubernetes. O que torna esse operador \u00fanico \u00e9 sua capacidade de usar facilmente as classes de armazenamento oferecidas por diferentes fornecedores de nuvem (AWS, Azure, GCP, RedHat OpenShift etc.) para criar volumes persistentes, que s\u00e3o usados pelo cluster do banco de dados do Couchbase para armazenar os dados de forma persistente. Em caso de falha do pod ou do cont\u00eainer, o Kubernetes reinstancia um novo pod\/cont\u00eainer automaticamente e simplesmente remonta os volumes persistentes, tornando a recupera\u00e7\u00e3o r\u00e1pida. Isso tamb\u00e9m ajuda a manter o SLA do sistema durante a recupera\u00e7\u00e3o de falhas na infraestrutura, pois somente a recupera\u00e7\u00e3o delta \u00e9 necess\u00e1ria, em vez da recupera\u00e7\u00e3o completa, se os volumes persistentes n\u00e3o estiverem sendo usados.<\/p>\r\n\r\n\r\n\r\n<p>Neste artigo, explicamos passo a passo como configurar volumes persistentes no Amazon EKS, mas as mesmas etapas tamb\u00e9m ser\u00e3o aplic\u00e1veis se voc\u00ea estiver usando qualquer outro ambiente Kubernetes de c\u00f3digo aberto (AKS, GKE, etc.). Esperamos que voc\u00ea experimente o Couchbase Autonomous Operator e nos conte sobre sua experi\u00eancia.<\/p>","protected":false},"excerpt":{"rendered":"<p>Prologue Modern business applications are expected to be up 24\/7, even during the planned rollout of new features and periodic patching of the Operating System or application. Achieving this feat requires tools and technologies that ensure the speed of development, [&hellip;]<\/p>","protected":false},"author":33279,"featured_media":6720,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1821,2225,1816,2322],"tags":[10124,1245,2341,2339,2354,2138],"ppma_author":[9090],"class_list":["post-6688","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-architecture","category-cloud","category-couchbase-server","category-kubernetes","tag-amazon-web-services-aws","tag-cloud","tag-cncf","tag-eks","tag-k8","tag-kubernetes-operator"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Self-healing Clusters using Kubernetes Persistent Volumes - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Self-healing Couchbase Clusters are made possible by Kubernetes container orchestration that abstracts away the complexities of underlying infrastructure.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Self-healing Clusters using Kubernetes Persistent Volumes\" \/>\n<meta property=\"og:description\" content=\"Self-healing Couchbase Clusters are made possible by Kubernetes container orchestration that abstracts away the complexities of underlying infrastructure.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-11T20:00:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T00:14:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/K8-Animation.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"1203\" \/>\n\t<meta property=\"og:image:height\" content=\"673\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Anuj Sahni, Cloud and Solutions Architecture Leader, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Anuj Sahni, Cloud and Solutions Architecture Leader, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/\"},\"author\":{\"name\":\"Anuj Sahni, Cloud and Solutions Architecture Leader, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/21c735da109667147c580bb2cb351c1c\"},\"headline\":\"Self-healing Clusters using Kubernetes Persistent Volumes\",\"datePublished\":\"2019-08-11T20:00:43+00:00\",\"dateModified\":\"2025-06-14T00:14:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/\"},\"wordCount\":2333,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/K8-Animation.gif\",\"keywords\":[\"Amazon Web Services (AWS)\",\"cloud\",\"CNCF\",\"EKS\",\"K8\",\"kubernetes operator\"],\"articleSection\":[\"Couchbase Architecture\",\"Couchbase Capella\",\"Couchbase Server\",\"Kubernetes\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/\",\"name\":\"Self-healing Clusters using Kubernetes Persistent Volumes - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/K8-Animation.gif\",\"datePublished\":\"2019-08-11T20:00:43+00:00\",\"dateModified\":\"2025-06-14T00:14:28+00:00\",\"description\":\"Self-healing Couchbase Clusters are made possible by Kubernetes container orchestration that abstracts away the complexities of underlying infrastructure.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/K8-Animation.gif\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/K8-Animation.gif\",\"width\":1203,\"height\":673},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Self-healing Clusters using Kubernetes Persistent Volumes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/21c735da109667147c580bb2cb351c1c\",\"name\":\"Anuj Sahni, Cloud and Solutions Architecture Leader, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5e9708314822fac560c43a5fbdc9b74f\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cb8391905c8ac6ff579c79c90aeaa4e9cf773b87a25e710ee107104c5659deb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cb8391905c8ac6ff579c79c90aeaa4e9cf773b87a25e710ee107104c5659deb6?s=96&d=mm&r=g\",\"caption\":\"Anuj Sahni, Cloud and Solutions Architecture Leader, Couchbase\"},\"description\":\"Anuj Sahni is a seasoned cloud and solutions architecture leader with over two decades of experience designing scalable, high-performance enterprise applications across AWS, Azure, and GCP. Currently part of the Capella team at Couchbase, he helps organizations modernize their applications and navigate cloud migration using cloud-native technologies. Prior to Couchbase, Anuj was Principal Product Manager at Oracle, where he led strategic initiatives for Oracle NoSQL Database and Oracle Service Cloud, focusing on distributed, always-available data platforms. He holds a Master\u2019s in Electrical and Computer Engineering from the University of Florida\u00a0and is an active thought leader in the data architecture space.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/anuj-sahni-6a80b617\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/anujsahni\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Self-healing Clusters using Kubernetes Persistent Volumes - The Couchbase Blog","description":"Os Couchbase Clusters autorrecuper\u00e1veis s\u00e3o poss\u00edveis gra\u00e7as \u00e0 orquestra\u00e7\u00e3o de cont\u00eaineres Kubernetes, que abstrai as complexidades da infraestrutura subjacente.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/","og_locale":"pt_BR","og_type":"article","og_title":"Self-healing Clusters using Kubernetes Persistent Volumes","og_description":"Self-healing Couchbase Clusters are made possible by Kubernetes container orchestration that abstracts away the complexities of underlying infrastructure.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-08-11T20:00:43+00:00","article_modified_time":"2025-06-14T00:14:28+00:00","og_image":[{"width":1203,"height":673,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/K8-Animation.gif","type":"image\/gif"}],"author":"Anuj Sahni, Cloud and Solutions Architecture Leader, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Anuj Sahni, Cloud and Solutions Architecture Leader, Couchbase","Est. reading time":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/"},"author":{"name":"Anuj Sahni, Cloud and Solutions Architecture Leader, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/21c735da109667147c580bb2cb351c1c"},"headline":"Self-healing Clusters using Kubernetes Persistent Volumes","datePublished":"2019-08-11T20:00:43+00:00","dateModified":"2025-06-14T00:14:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/"},"wordCount":2333,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/K8-Animation.gif","keywords":["Amazon Web Services (AWS)","cloud","CNCF","EKS","K8","kubernetes operator"],"articleSection":["Couchbase Architecture","Couchbase Capella","Couchbase Server","Kubernetes"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/","url":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/","name":"Self-healing Clusters using Kubernetes Persistent Volumes - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/K8-Animation.gif","datePublished":"2019-08-11T20:00:43+00:00","dateModified":"2025-06-14T00:14:28+00:00","description":"Os Couchbase Clusters autorrecuper\u00e1veis s\u00e3o poss\u00edveis gra\u00e7as \u00e0 orquestra\u00e7\u00e3o de cont\u00eaineres Kubernetes, que abstrai as complexidades da infraestrutura subjacente.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/K8-Animation.gif","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/K8-Animation.gif","width":1203,"height":673},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/deploy-self-healing-highly-available-couchbase-cluster-on-kubernetes-using-persistent-volumes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Self-healing Clusters using Kubernetes Persistent Volumes"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/21c735da109667147c580bb2cb351c1c","name":"Anuj Sahni, L\u00edder de Arquitetura de Nuvem e Solu\u00e7\u00f5es, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5e9708314822fac560c43a5fbdc9b74f","url":"https:\/\/secure.gravatar.com\/avatar\/cb8391905c8ac6ff579c79c90aeaa4e9cf773b87a25e710ee107104c5659deb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cb8391905c8ac6ff579c79c90aeaa4e9cf773b87a25e710ee107104c5659deb6?s=96&d=mm&r=g","caption":"Anuj Sahni, Cloud and Solutions Architecture Leader, Couchbase"},"description":"Anuj Sahni is a seasoned cloud and solutions architecture leader with over two decades of experience designing scalable, high-performance enterprise applications across AWS, Azure, and GCP. Currently part of the Capella team at Couchbase, he helps organizations modernize their applications and navigate cloud migration using cloud-native technologies. Prior to Couchbase, Anuj was Principal Product Manager at Oracle, where he led strategic initiatives for Oracle NoSQL Database and Oracle Service Cloud, focusing on distributed, always-available data platforms. He holds a Master\u2019s in Electrical and Computer Engineering from the University of Florida\u00a0and is an active thought leader in the data architecture space.","sameAs":["https:\/\/www.linkedin.com\/in\/anuj-sahni-6a80b617"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/anujsahni\/"}]}},"authors":[{"term_id":9090,"user_id":33279,"is_guest":0,"slug":"anujsahni","display_name":"Anuj Sahni, Cloud and Solutions Architecture Leader, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/cb8391905c8ac6ff579c79c90aeaa4e9cf773b87a25e710ee107104c5659deb6?s=96&d=mm&r=g","author_category":"1","last_name":"Sahni, Cloud and Solutions Architecture Leader, Couchbase","first_name":"Anuj","job_title":"","user_url":"https:\/\/www.linkedin.com\/in\/anuj-sahni-6a80b617","description":"<p data-start=\"231\" data-end=\"963\"><strong>Anuj Sahni<\/strong> is a seasoned cloud and solutions architecture leader with over two decades of experience designing scalable, high-performance enterprise applications across AWS, Azure, and GCP. Currently part of the <strong>Capella team at Couchbase<\/strong>, he helps organizations modernize their applications and navigate cloud migration using cloud-native technologies.<\/p>\r\n<p data-start=\"231\" data-end=\"963\">Prior to Couchbase, Anuj was <strong>Principal Product Manager at Oracle<\/strong>, where he led strategic initiatives for Oracle NoSQL Database and Oracle Service Cloud, focusing on distributed, always-available data platforms. He holds a <strong>Master\u2019s in Electrical and Computer Engineering<\/strong> do <strong>University of Florida<\/strong>\u00a0and is an active thought leader in the data architecture space.<\/p>"}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/6688","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/33279"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=6688"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/6688\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/6720"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=6688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=6688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=6688"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=6688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}