{"id":8583,"date":"2020-05-06T10:50:47","date_gmt":"2020-05-06T17:50:47","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8583"},"modified":"2025-06-13T21:33:08","modified_gmt":"2025-06-14T04:33:08","slug":"unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/","title":{"rendered":"Unicorn Unleashed: Subindo de n\u00edvel com o operador aut\u00f4nomo"},"content":{"rendered":"<p>N\u00e3o, eu n\u00e3o perdi a cabe\u00e7a.  Unic\u00f3rnio \u00e9 o nome de c\u00f3digo interno do Couchbase Autonomous Operator 2.0.0.  Para uma vers\u00e3o de escopo t\u00e3o grande, quer\u00edamos algo m\u00edtico e fant\u00e1stico para resumir o esfor\u00e7o e a paix\u00e3o que foram dedicados a ela.  Tamb\u00e9m \u00e9 um pouco divertido dar \u00e0 ger\u00eancia uma plataforma onde eles possam <em>ter<\/em> para falar sobre unic\u00f3rnios e duendes!  Para enfatizar a dificuldade desta vers\u00e3o, vamos nos concentrar em um aspecto fundamental do Operador: Recursos personalizados do Kubernetes.  Os recursos personalizados sustentam tudo o que o Operator faz.<\/p>\n<p>Esta postagem faz parte de uma s\u00e9rie de blogs t\u00e9cnicos que se aprofundam no funcionamento interno do Operator.  Este blog se concentrar\u00e1 em <em>ir de A para B<\/em>.  Parece simples, n\u00e3o \u00e9? (Ou vago...) Como voc\u00ea ver\u00e1, n\u00e3o foi nada disso. Definiremos o que queremos dizer com isso, examinaremos os desafios t\u00e9cnicos e, finalmente, chegaremos ao motivo pelo qual decidimos fazer o que fizemos.<\/p>\n<p>Da equipe de desenvolvimento para voc\u00ea - o usu\u00e1rio final -, esperamos que tenha uma experi\u00eancia de uso t\u00e3o boa quanto a que tivemos ao cri\u00e1-lo.<\/p>\n<h2>A para B com CRDs?<\/h2>\n<p>Ent\u00e3o, o que queremos dizer com isso?  Primeiro, vamos ver por que precisamos de um B em primeiro lugar.  O Operator 1.x gerencia os clusters do Couchbase com um \u00fanico objeto de configura\u00e7\u00e3o, um <em>recurso personalizado<\/em> na terminologia do Kubernetes.  Essa abordagem tem benef\u00edcios - tudo \u00e9 controlado de forma centralizada -, mas tamb\u00e9m tem suas desvantagens - para fazer qualquer altera\u00e7\u00e3o no cluster, voc\u00ea tem acesso a todos os aspectos do cluster.<\/p>\n<p>Gosto da primeira abordagem e digo isso \u00e0 equipe o tempo todo:<\/p>\n<blockquote><p><a href=\"https:\/\/en.wikipedia.org\/wiki\/KISS_principle\">Mantenha a simplicidade, est\u00fapido!<\/a><\/p><\/blockquote>\n<p>No entanto, estamos fornecendo um servi\u00e7o empresarial acima de tudo.  A seguran\u00e7a precisa ser uma preocupa\u00e7\u00e3o primordial - desde a camada de rede at\u00e9 os processos comerciais existentes durante a vida \u00fatil de um cluster.<\/p>\n<h3>Separa\u00e7\u00e3o de preocupa\u00e7\u00f5es<\/h3>\n<p>Um requisito comercial claro era que um usu\u00e1rio pudesse criar um bucket de dados privado e us\u00e1-lo. Esse mesmo usu\u00e1rio n\u00e3o deveria poder fazer mais nada.  Esse mesmo usu\u00e1rio n\u00e3o deve ter a capacidade de fazer qualquer outra coisa.  A capacidade de dimensionar o cluster n\u00e3o deve ser permitida, pois isso pode causar interrup\u00e7\u00f5es para outros usu\u00e1rios.  Portanto, nossos objetivos eram:<\/p>\n<ul>\n<li>Definir fun\u00e7\u00f5es no Kubernetes\n<ul>\n<li>Os usu\u00e1rios podem gerenciar buckets e processar dados sem afetar outros usu\u00e1rios<\/li>\n<li>Os administradores podem modificar a topologia do cluster conforme a necessidade<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Al\u00e9m de oferecer fortes garantias de seguran\u00e7a, as fun\u00e7\u00f5es separam as preocupa\u00e7\u00f5es.  Os usu\u00e1rios finais s\u00f3 precisam saber como manipular documentos e executar consultas N1QL.  As principais preocupa\u00e7\u00f5es dos administradores s\u00e3o a conformidade com a seguran\u00e7a, a utiliza\u00e7\u00e3o de recursos e o custo.  No entanto, h\u00e1 uma compensa\u00e7\u00e3o.  Limitar o conhecimento a dom\u00ednios espec\u00edficos tamb\u00e9m cria barreiras entre esses dom\u00ednios.  A solu\u00e7\u00e3o precisa de flexibilidade para oferecer a capacidade de escolher <em>onde<\/em> Existem barreiras.<\/p>\n<h3>Decomposi\u00e7\u00e3o de recursos personalizados<\/h3>\n<p>A chave para atingir nossos objetivos \u00e9 o Kubernetes RBAC.  O Kubernetes RBAC permite que usu\u00e1rios espec\u00edficos realizem a\u00e7\u00f5es espec\u00edficas em tipos de recursos espec\u00edficos.  Avan\u00e7amos em dire\u00e7\u00e3o ao nosso objetivo dividindo nosso recurso de cluster monol\u00edtico do Couchbase em tipos de recursos separados de cluster principal e de bucket.  Cada tipo de recurso pode ter um conjunto separado de usu\u00e1rios que t\u00eam permiss\u00e3o para us\u00e1-los.<\/p>\n<p>Outra considera\u00e7\u00e3o com a qual temos que lidar \u00e9 como a capacidade de configurar um aspecto do cluster pode comprometer outro.  O Operator 2.0 introduz o gerenciamento de XDCR (Cross Data Center Replication).  Seria bom permitir que os usu\u00e1rios do bucket configurassem suas pr\u00f3prias estrat\u00e9gias de replica\u00e7\u00e3o.  Para configurar uma replica\u00e7\u00e3o, voc\u00ea precisa se conectar a um cluster remoto.  Isso requer credenciais que s\u00e3o configuradas com segredos do Kubernetes.  Ao conceder a um usu\u00e1rio acesso aos segredos, voc\u00ea revela todas as senhas e chaves privadas de TLS no espa\u00e7o de nomes.<\/p>\n<p>Portanto, consideramos <em>qualquer<\/em> configura\u00e7\u00e3o que exige acesso a segredos como uma opera\u00e7\u00e3o \"somente para administradores\".  Isso ajuda a limitar o escopo entre os dom\u00ednios de conhecimento da melhor forma poss\u00edvel.<\/p>\n<h3>Agrega\u00e7\u00e3o de recursos personalizados<\/h3>\n<p>A configura\u00e7\u00e3o de um cluster do Couchbase agora est\u00e1 distribu\u00edda em muitos recursos diferentes.  Eles s\u00e3o controlados por muitas pessoas diferentes com fun\u00e7\u00f5es espec\u00edficas.  O Operador, no entanto, precisa ver o <em>imagem completa<\/em> para criar e gerenciar o cluster.<\/p>\n<p>Por padr\u00e3o, e sem culpa pr\u00f3pria, o Operator 2.0 age de forma ing\u00eanua.  Quando come\u00e7a a monitorar um cluster do Couchbase, ele tamb\u00e9m monitora todos os recursos de bucket que encontra.  Um \u00fanico cluster l\u00f3gico \u00e9 criado a partir da agrega\u00e7\u00e3o desses recursos de cluster e de bucket.  Se voc\u00ea criar outro cluster, ele tamb\u00e9m encontrar\u00e1 e agregar\u00e1 os mesmos recursos de bucket.  Talvez voc\u00ea n\u00e3o deseje esse comportamento, e o Kubernetes fornece o caminho novamente.<\/p>\n<p>Para cada tipo de recurso que \u00e9 agregado, h\u00e1 um seletor de r\u00f3tulo correspondente que pode ser configurado.  Esse seletor de r\u00f3tulo permite que voc\u00ea controle exatamente quais recursos s\u00e3o agregados.  Somente os recursos com os r\u00f3tulos correspondentes ser\u00e3o selecionados pelo Operador.<\/p>\n<h2>A partida<\/h2>\n<p>Agora sabemos que decompor o recurso de cluster do Couchbase \u00e9 uma coisa boa.  Embora isso n\u00e3o seja isento de falhas, os benef\u00edcios superam essas falhas.<\/p>\n<p>O Kubernetes fornece primitivas que nos ajudam a atingir nosso objetivo com RBAC e sele\u00e7\u00e3o de r\u00f3tulos.  Nossa jornada de A a B ser\u00e1 f\u00e1cil, certo?  Pense de novo.<\/p>\n<h3>Restri\u00e7\u00f5es da plataforma<\/h3>\n<p>Em um mundo perfeito, o Operator seria executado em todas as vers\u00f5es do Kubernetes dispon\u00edveis.  Isso \u00e9 <em>provavelmente<\/em> verdadeiro para futuras vers\u00f5es do Kubernetes que mantenham a compatibilidade com vers\u00f5es anteriores.  Eu digo <em>provavelmente<\/em> porque podem ser introduzidas extens\u00f5es que s\u00e3o incompat\u00edveis com um aplicativo escrito antes de seu lan\u00e7amento.  Por esse motivo, cada vers\u00e3o do Operator tem uma janela de vers\u00f5es certificadas do Kubernetes.<\/p>\n<p>As vers\u00f5es certificadas do Kubernetes t\u00eam um limite superior e um limite inferior.  Os limites est\u00e3o fora de nossas m\u00e3os.  S\u00f3 podemos certificar se um fornecedor de nuvem oferecer suporte a uma determinada vers\u00e3o.  No momento em que escrevo, o Google Kubernetes Engine (GKE) s\u00f3 permite as vers\u00f5es 1.14 e 1.15 do Kubernetes.  O Operator \u00e9 certificado no Amazon Elastic Kubernetes Service (EKS), no Microsoft Azure Kubernetes Service (AKS) e na Red Hat OpenShift Container Platform (OCP).  Mais uma vez, estamos limitados pelo conjunto comum de vers\u00f5es do Kubernetes compat\u00edveis com <em>todos<\/em> plataformas.<\/p>\n<p>O limite inferior para o CAO 2.0.0 foi o Kubernetes 1.13.<\/p>\n<h3>Controle de vers\u00e3o de recursos personalizados<\/h3>\n<p>O Kubernetes 1.13 introduziu defini\u00e7\u00f5es de recursos personalizados (CRDs) com controle de vers\u00e3o.  Isso permite que o Kubernetes esteja ciente de v\u00e1rios formatos diferentes de recursos personalizados.  Isso parece perfeito para nossas necessidades, mas o diabo est\u00e1 nos detalhes.<\/p>\n<p>O controle de vers\u00e3o do CRD armazena apenas recursos como uma \u00fanica vers\u00e3o.  Quando definimos uma v1 e uma v2 de um tipo de recurso, todos os recursos s\u00e3o armazenados pelo Kubernetes como uma \u00fanica vers\u00e3o, por exemplo, v2.  Os ganchos de convers\u00e3o de recursos personalizados fornecem uma maneira de converter o recurso v2 armazenado em v1, quando um cliente est\u00e1 acessando o recurso com a API v1.  A convers\u00e3o foi projetada para receber um recurso e retornar um recurso, realizando apenas opera\u00e7\u00f5es simples.  Para o Operador, a convers\u00e3o entre uma configura\u00e7\u00e3o de cluster monol\u00edtico e modular \u00e9 um passo muito grande.<\/p>\n<p>Outra preocupa\u00e7\u00e3o era que, com o Kubernetes 1.13, a convers\u00e3o de CRD era um recurso de n\u00edvel alfa.  Sou f\u00e3 de qualquer coisa que proporcione uma experi\u00eancia de usu\u00e1rio (UX) mais perfeita.  Os usu\u00e1rios, no entanto, s\u00e3o menos entusiasmados com a habilita\u00e7\u00e3o de recursos de grau alfa por meio da reconfigura\u00e7\u00e3o intrusiva da API do Kubernetes.  Em geral, s\u00f3 come\u00e7amos a usar os recursos quando eles s\u00e3o APIs geralmente dispon\u00edveis, normalmente no est\u00e1gio beta.<\/p>\n<p>O problema final era que o controle de vers\u00e3o do CRD no Kubernetes 1.13 suportava apenas um \u00fanico esquema JSON.  Isso significa que, quando instalado, um CRD de cluster do Couchbase v2 poderia oferecer suporte aos tipos de recursos personalizados v1 e v2, mas qualquer atualiza\u00e7\u00e3o de um recurso v1 falharia porque a valida\u00e7\u00e3o em rela\u00e7\u00e3o ao esquema \u00fanico v2 falharia.<\/p>\n<h3>Nunca chove, chove muito<\/h3>\n<p>\u00c0 primeira vista, parece que estamos presos.  \u00c9 imposs\u00edvel realizar uma boa ideia sem come\u00e7ar do zero.  N\u00e3o podemos usar a convers\u00e3o CRD porque ela n\u00e3o est\u00e1 dispon\u00edvel e n\u00e3o foi projetada para o que queremos.  N\u00e3o podemos executar vers\u00f5es diferentes do Operador simultaneamente porque somente um \u00fanico esquema \u00e9 suportado.  Mas eu sou brit\u00e2nico:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8585 size-medium_large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/04\/winston-churchill-quotes-9-min-1024x770-1-768x578.jpg\" alt=\"\" width=\"768\" height=\"578\" \/><\/p>\n<p>Se apenas uma \u00fanica vers\u00e3o de um recurso personalizado for compat\u00edvel, que assim seja, atualizaremos tudo de uma vez.  O que deixa o processo de convers\u00e3o.<\/p>\n<h3>J\u00e1 estamos quase l\u00e1?<\/h3>\n<p>De fato, sim.  A chave para o sucesso \u00e9 simples.  Leia um recurso antigo, v1, do cluster do Couchbase - isso n\u00e3o \u00e9 validado - e, em seguida, escreva um novo recurso v2 do cluster do Couchbase e quaisquer recursos de bucket que ele exija - esses s\u00e3o validados.<\/p>\n<p>Conforme mencionado anteriormente, a experi\u00eancia do usu\u00e1rio \u00e9 muito importante, por isso fornecemos um <a href=\"https:\/\/docs.couchbase.com\/operator\/2.0\/howto-operator-upgrade.html\">para realizar a convers\u00e3o<\/a> para voc\u00ea.  Como era de se esperar, isso usa seletores de r\u00f3tulos e \u00e9 seguro.  Nenhum novo recurso \u00e9 ativado - todo novo recurso \u00e9 opcional -, portanto, as configura\u00e7\u00f5es existentes do XDCR e do Couchbase RBAC n\u00e3o s\u00e3o afetadas pelo processo de atualiza\u00e7\u00e3o.<\/p>\n<h2>A chegada<\/h2>\n<p>Finalmente chegamos ao B!  De alguma forma, em meio \u00e0s adversidades, conseguimos passar de um modelo de configura\u00e7\u00e3o monol\u00edtico para um modelo de configura\u00e7\u00e3o modular.  Conseguimos definir um processo de atualiza\u00e7\u00e3o on-line quase perfeito.  Agora o poder est\u00e1 em suas m\u00e3os para explorar as possibilidades oferecidas pelo CAO 2.0.<\/p>\n<p>Como sempre, voc\u00eas escolheram os rumos que tomamos e escolher\u00e3o os rumos que tomaremos.  Aguardamos seus coment\u00e1rios, sugest\u00f5es e - ouso dizer - cr\u00edticas!<\/p>\n<h3>O que importa \u00e9 a jornada, n\u00e3o o destino<\/h3>\n<p>Passei um <em>enorme<\/em> tempo fazendo a documenta\u00e7\u00e3o t\u00e9cnica para esta vers\u00e3o (e eu realmente espero que voc\u00ea <a href=\"https:\/\/docs.couchbase.com\/operator\/2.0\/overview.html\">aproveite<\/a>).  Em vez de um blog seco e excessivamente t\u00e9cnico, achei que uma mudan\u00e7a seria necess\u00e1ria, da\u00ed a analogia intermin\u00e1vel.  O que tenho me esfor\u00e7ado para expressar s\u00e3o todos os desafios t\u00e9cnicos e as compensa\u00e7\u00f5es que n\u00f3s, como equipe, enfrentamos para entregar esses marcos.  O que pode parecer um novo recurso simples, do ponto de vista do marketing do produto, \u00e9 muito mais complexo sob o cap\u00f4 (cap\u00f4).<\/p>\n<p>Ao realizar essas tarefas complicadas em seu nome - e ser franco sobre isso -, espero sinceramente que voc\u00ea aprecie o trabalho que \u00e9 necess\u00e1rio.  Espero que nossa hist\u00f3ria tamb\u00e9m tenha repercuss\u00e3o em outras pessoas.  O Kubernetes s\u00f3 pode ficar melhor para todos \u00e0 medida que essas ideias forem refinadas e incorporadas.  Ainda temos um longo caminho a percorrer, mas obrigado por nos acompanhar nessa jornada.<\/p>\n<h3>Sua pr\u00f3xima viagem...<\/h3>\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-autonomous-operator-2-0-for-kubernetes-is-now-ga\/\">An\u00fancio de lan\u00e7amento do Couchbase Autonomous Operator 2.0.0<\/a><\/li>\n<li><a href=\"https:\/\/docs.couchbase.com\/operator\/2.0\/overview.html\">Documenta\u00e7\u00e3o t\u00e9cnica do Couchbase Autonomous Operator 2.0.0<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>No, I haven&#8217;t lost my mind.\u00a0 Unicorn is the internal code-name for Couchbase Autonomous Operator 2.0.0.\u00a0 For a release this large in scope we wanted something mythical and fantastical to sum up the sheer effort and passion that was put [&hellip;]<\/p>","protected":false},"author":25957,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[9284,2225,2322],"tags":[1545],"ppma_author":[9076],"class_list":["post-8583","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-autonomous-operator","category-cloud","category-kubernetes","tag-kubernetes"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Unicorn Unleashed: Leveling-Up With the Autonomous Operator<\/title>\n<meta name=\"description\" content=\"How to upgrade the Couchbase Autonomous Operator from Version 1 to Version 2. Understanding and handling non-trivial CRD upgrades.\" \/>\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\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Unicorn Unleashed: Leveling-Up With the Autonomous Operator\" \/>\n<meta property=\"og:description\" content=\"How to upgrade the Couchbase Autonomous Operator from Version 1 to Version 2. Understanding and handling non-trivial CRD upgrades.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T17:50:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:33:08+00:00\" \/>\n<meta name=\"author\" content=\"Simon Murray, Senior Software Engineer, 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=\"Simon Murray, Senior Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/\"},\"author\":{\"name\":\"Simon Murray, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/8b03ed823446340bba90154b6fcd7a23\"},\"headline\":\"Unicorn Unleashed: Leveling-Up With the Autonomous Operator\",\"datePublished\":\"2020-05-06T17:50:47+00:00\",\"dateModified\":\"2025-06-14T04:33:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/\"},\"wordCount\":1647,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"kubernetes\"],\"articleSection\":[\"Couchbase Autonomous Operator\",\"Couchbase Capella\",\"Kubernetes\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/\",\"name\":\"Unicorn Unleashed: Leveling-Up With the Autonomous Operator\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2020-05-06T17:50:47+00:00\",\"dateModified\":\"2025-06-14T04:33:08+00:00\",\"description\":\"How to upgrade the Couchbase Autonomous Operator from Version 1 to Version 2. Understanding and handling non-trivial CRD upgrades.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Unicorn Unleashed: Leveling-Up With the Autonomous Operator\"}]},{\"@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\/8b03ed823446340bba90154b6fcd7a23\",\"name\":\"Simon Murray, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/bf0dbf1d557d4349cd907431f40a61ac\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c5918b7fdf9c2714c0b72bd1d7366f65751da5f40cbcfdede50d123f4c40c893?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c5918b7fdf9c2714c0b72bd1d7366f65751da5f40cbcfdede50d123f4c40c893?s=96&d=mm&r=g\",\"caption\":\"Simon Murray, Senior Software Engineer, Couchbase\"},\"description\":\"Simon has almost 20 years experience on diverse topics such as systems programming, application performance and scale out storage. The cloud is now his current focus, specializing in enterprise network architecture, information security and platform orchestration across a wide range of technologies.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/simon-murraycouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Unicorn Unleashed: Subindo de n\u00edvel com o operador aut\u00f4nomo","description":"Como atualizar o Couchbase Autonomous Operator da vers\u00e3o 1 para a vers\u00e3o 2. Entender e lidar com upgrades n\u00e3o triviais do CRD.","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\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/","og_locale":"pt_BR","og_type":"article","og_title":"Unicorn Unleashed: Leveling-Up With the Autonomous Operator","og_description":"How to upgrade the Couchbase Autonomous Operator from Version 1 to Version 2. Understanding and handling non-trivial CRD upgrades.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-05-06T17:50:47+00:00","article_modified_time":"2025-06-14T04:33:08+00:00","author":"Simon Murray, Senior Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Simon Murray, Senior Software Engineer, Couchbase","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/"},"author":{"name":"Simon Murray, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/8b03ed823446340bba90154b6fcd7a23"},"headline":"Unicorn Unleashed: Leveling-Up With the Autonomous Operator","datePublished":"2020-05-06T17:50:47+00:00","dateModified":"2025-06-14T04:33:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/"},"wordCount":1647,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["kubernetes"],"articleSection":["Couchbase Autonomous Operator","Couchbase Capella","Kubernetes"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/","url":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/","name":"Unicorn Unleashed: Subindo de n\u00edvel com o operador aut\u00f4nomo","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2020-05-06T17:50:47+00:00","dateModified":"2025-06-14T04:33:08+00:00","description":"Como atualizar o Couchbase Autonomous Operator da vers\u00e3o 1 para a vers\u00e3o 2. Entender e lidar com upgrades n\u00e3o triviais do CRD.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Unicorn Unleashed: Leveling-Up With the Autonomous Operator"}]},{"@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\/8b03ed823446340bba90154b6fcd7a23","name":"Simon Murray, engenheiro de software s\u00eanior, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/bf0dbf1d557d4349cd907431f40a61ac","url":"https:\/\/secure.gravatar.com\/avatar\/c5918b7fdf9c2714c0b72bd1d7366f65751da5f40cbcfdede50d123f4c40c893?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c5918b7fdf9c2714c0b72bd1d7366f65751da5f40cbcfdede50d123f4c40c893?s=96&d=mm&r=g","caption":"Simon Murray, Senior Software Engineer, Couchbase"},"description":"Simon has almost 20 years experience on diverse topics such as systems programming, application performance and scale out storage. The cloud is now his current focus, specializing in enterprise network architecture, information security and platform orchestration across a wide range of technologies.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/simon-murraycouchbase-com\/"}]}},"authors":[{"term_id":9076,"user_id":25957,"is_guest":0,"slug":"simon-murraycouchbase-com","display_name":"Simon Murray, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/c5918b7fdf9c2714c0b72bd1d7366f65751da5f40cbcfdede50d123f4c40c893?s=96&d=mm&r=g","author_category":"","last_name":"Murray","first_name":"Simon","job_title":"","user_url":"","description":"Simon tem quase 20 anos de experi\u00eancia em diversos t\u00f3picos, como programa\u00e7\u00e3o de sistemas, desempenho de aplicativos e armazenamento em escala.  A nuvem \u00e9 agora seu foco atual, especializando-se em arquitetura de rede corporativa, seguran\u00e7a da informa\u00e7\u00e3o e orquestra\u00e7\u00e3o de plataformas em uma ampla gama de tecnologias."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/8583","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\/25957"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=8583"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/8583\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=8583"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=8583"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=8583"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=8583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}