{"id":1675,"date":"2020-05-06T10:50:47","date_gmt":"2020-05-06T17:50:47","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/unicorn-unleashed-leveling-up-custom-resources-with-the-autonomous-operator\/"},"modified":"2020-05-06T10:50:47","modified_gmt":"2020-05-06T17:50:47","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: Leveling-Up With the Autonomous Operator"},"content":{"rendered":"<p class=\"wp-block-paragraph\">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 into it.\u00a0 It&#8217;s also mildly amusing to give management a platform where they <em>have<\/em> to talk about unicorns and pixies!\u00a0 To underscore the difficulty of this release, we will focus on one key aspect of the Operator: Kubernetes custom resources.\u00a0 Custom resource underpin everything the Operator does.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This post is part of a series of technical blogs taking a deep-dive into the inner workings of the Operator.\u00a0 This blog will focus on <em>getting from A to B<\/em>.\u00a0 Sounds simple doesn&#8217;t it? (Or vague&#8230;)\u00a0 As you will see, it was anything but. We shall define what we mean by this, examine the technical challenges, and finally arrive at why we chose to do what we did.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">From the development team to you&#8211;the end user&#8211;we hope you have as good an experience using it as we have had creating it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A to B with CRDs?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">So what do we mean by this?\u00a0 Let&#8217;s first look at why we need a B in the first place.\u00a0 Operator 1.x manages Couchbase clusters with a single configuration object, a <em>custom resource<\/em> in Kubernetes terminology.\u00a0 This approach has benefits&#8211;everything is controlled in a centralized manner&#8211;but it also has its drawbacks&#8211;to make any change to cluster you have access to all aspects of the cluster.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I like the first approach, and I tell the team all the time:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/KISS_principle\">Keep it simple stupid!<\/a><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">However, we are providing an enterprise service first and foremost.\u00a0 Security needs to be a prime concern&#8211;from the networking layer right up to the business processes that exist during a cluster&#8217;s lifetime.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Separation of Concerns<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A clear business requirement was that a user should be able to create a private data bucket and use it.\u00a0 That same user should not be given the ability to do anything else.\u00a0 Being able to scale the cluster should not be allowed&#8211;this may cause disruption to other users.\u00a0 Our goals were therefore:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define roles within Kubernetes\n<ul>\n<li>Users can manage buckets and process data without affecting other users<\/li>\n<li>Administrators can modify the cluster topology as needs demand<\/li>\n<\/ul>\n<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">As well as providing strong security guarantees, roles separate concerns.\u00a0 End users only need know about manipulating documents and running N1QL queries.\u00a0 Administrators primary concerns are security compliance, resource utilization and cost.\u00a0 There is, however, a trade off.\u00a0 Limiting knowledge to specific domains also erects barriers between those domains.\u00a0 The solution needs flexibility in order to provide the ability to choose <em>where<\/em> any barriers exist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Custom Resource Decomposition<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The key to meeting our goals is Kubernetes RBAC.\u00a0 Kubernetes RBAC allows specific users, to perform specific actions, on specific resource types.\u00a0 We move towards our goal by splitting our monolithic Couchbase cluster resource into separate core cluster and bucket resource types.\u00a0 Each resource type can have a separate set of users that are allowed to use them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Another consideration we have to contend with, is how being able to configure one aspect of the cluster can compromise another.\u00a0 Operator 2.0 introduces Cross Data Center Replication (XDCR) management.\u00a0 It would be nice to allow bucket users to set up their own replication strategies.\u00a0 In order to configure a replication you need to connect to a remote cluster.\u00a0 This requires credentials that are configured with Kubernetes secrets.\u00a0 By granting a user access to secrets you then reveal every password and TLS private key in the name space.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We therefore consider <em>any<\/em> configuration requiring access to secrets as an &#8220;admin only&#8221; operation.\u00a0 This helps limit scope between knowledge domains as best we are able.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Custom Resource Aggregation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A Couchbase cluster&#8217;s configuration is now distributed across many different resources.\u00a0 These are controlled by many different people with specific roles.\u00a0 The Operator, however, needs to see the <em>full picture<\/em> in order to create and manage the cluster.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By default, and through no fault of its own, Operator 2.0 acts naively.\u00a0 When it starts monitoring a Couchbase cluster, it will also monitor any bucket resources it finds.\u00a0 A single, logical cluster is created from the aggregation of these cluster and bucket resources.\u00a0 If you create another cluster, it will also find and aggregate the same bucket resources.\u00a0 You may not wish for this behavior, and Kubernetes provides the way again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For each resource type that is aggregated, there is a corresponding label selector that can be configured.\u00a0 This label selector allows you to control exactly what resources are aggregated.\u00a0 Only resources with the matching labels will be selected by the Operator.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Departure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We now know that decomposing the Couchbase cluster resource is a good thing.\u00a0 While doing this is not without its faults, the benefits outweigh them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kubernetes provides primitives that help us achieve our goal with RBAC and label selection.\u00a0 Our journey from A to B will be easy right?\u00a0 Think again.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Platform Constraints<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In a perfect world the Operator would run on every Kubernetes version available.\u00a0 This is <em>probably<\/em> true for future versions of Kubernetes that maintain backward compatibility.\u00a0 I say <em>probably<\/em> because extensions may be introduced that are incompatible with an application written before their release.\u00a0 For this reason, each Operator release has a window of certified Kubernetes versions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Certified Kubernetes versions have an upper and lower limit.\u00a0 The limits are out of our hands.\u00a0 We can only certify if a cloud vendor supports a certain version.\u00a0 At the time of writing Google Kubernetes Engine (GKE) only allows Kubernetes versions 1.14 and 1.15.\u00a0 The Operator is certified on Amazon Elastic Kubernetes Service (EKS), Microsoft Azure Kubernetes Service (AKS) and Red Hat OpenShift Container Platform (OCP).\u00a0 We are again limited by the common set of Kubernetes versions supported across <em>all<\/em> platforms.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The lower bound for CAO 2.0.0 was Kubernetes 1.13.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Custom Resource Versioning<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Kubernetes 1.13 introduced versioned custom resource definitions (CRDs).\u00a0 This allows Kubernetes to be aware of multiple different custom resource formats.\u00a0 This sounds perfect for our needs, but the devil is in the detail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CRD versioning only stores resources as a single version.\u00a0 When we define a v1 and v2 of a resource type, all resources are be stored by Kubernetes as a single version e.g. v2.\u00a0 Custom resource conversion hooks provide a way for us to convert from the stored v2, to v1 resource, when a client is accessing the resource with the v1 API.\u00a0 Conversion is designed take one resource and return one resource, performing only simple operations.\u00a0 For the Operator, to convert between a monolithic and a modular cluster configuration, is a step too far.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Another concern was that with Kubernetes 1.13, CRD conversion was an alpha-grade feature.\u00a0 I&#8217;m a fan of anything that provides a more seamless user experience (UX).\u00a0 Users, however, are less enthusiastic with enabling alpha grade features via intrusive Kubernetes API reconfiguration.\u00a0 In general we only begin using features when they are generally available APIs, usually at the beta stage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The final problem was that the CRD versioning in Kubernetes 1.13 only supported a single JSON schema.\u00a0 This means that when installed, a v2 Couchbase cluster CRD could support both v1 and v2 custom resource types, but any update to a v1 resource would fail because validation against the single v2 schema would fail.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">It Never Rains, it Pours<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On the face of it, it appears we are stuck.\u00a0 A good idea is impossible to achieve without starting over.\u00a0 We cannot use CRD conversion as it&#8217;s unavailable, and not designed for what we want.\u00a0 We cannot run different versions of the Operator concurrently because only a single schema is supported.\u00a0 But I&#8217;m British:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><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\n\n\n<p class=\"wp-block-paragraph\">If only a single version of a custom resource is supported, so be it, we just upgrade everything at once.\u00a0 Which leaves the conversion process.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Are We Nearly There Yet?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Actually, yes.\u00a0 The key to success is simple.\u00a0 Read in a old, v1 Couchbase cluster resource&#8211;this isn&#8217;t validated&#8211;then write out a new, v2 Couchbase cluster resource, and any bucket resources that it requires&#8211;these are validated.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As alluded to before, UX is very important, so we provide a <a href=\"https:\/\/docs.couchbase.com\/operator\/2.0\/howto-operator-upgrade.html\">tool to perform the conversion<\/a> for you.\u00a0 As you would expect, this uses label selectors and plays it safe.\u00a0 No new features are enabled&#8211;every new feature is opt-in&#8211;so existing XDCR and Couchbase RBAC settings are not affected by the upgrade process.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Arrival<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We finally made it to B!\u00a0 Somehow, through adversity, we were able to go from a monolithic, to a modular configuration model.\u00a0 We were able to define a near-enough seamless online upgrade process.\u00a0 Now the power is in your hands to explore the possibilities offered by CAO 2.0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As always, you chose the directions we have taken, and you will choose the directions we take.\u00a0 We look forward to your feedback, suggestions, and&#8211;dare I say it&#8211;criticism!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">It&#8217;s The Journey Not The Destination<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve spent a <em>huge<\/em> amount of time doing technical documentation for this release (and I really hope you <a href=\"https:\/\/docs.couchbase.com\/operator\/2.0\/overview.html\">enjoy it<\/a>).\u00a0 Rather than a dry&#8211;and overly technical&#8211;blog, I thought a change were in order, hence the endless analogy.\u00a0 What I&#8217;ve been striving to express are all the technical challenges, and trade offs we&#8211;as a team&#8211;face to deliver these milestones.\u00a0 What may seem like a simple new feature from a product marketing perspective, is orders of magnitude more complex under the hood (bonnet).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By undertaking these complicated tasks on your behalf&#8211;and being open about it&#8211;I sincerely hope that you gain an appreciation of the work that goes in.\u00a0 I hope our story will resonate with others too.\u00a0 Kubernetes can only get better for everyone as these ideas are refined and incorporated.\u00a0 We still have a long way to go, but thank you for accompanying us on this journey.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Your Next Journey&#8230;<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-autonomous-operator-2-0-for-kubernetes-is-now-ga\/\">Couchbase Autonomous Operator 2.0.0 Release Announcement<\/a><\/li>\n\n\n<li><a href=\"https:\/\/docs.couchbase.com\/operator\/2.0\/overview.html\">Couchbase Autonomous Operator 2.0.0 Technical Documentation<\/a><\/li>\n\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 into it.\u00a0 It&#8217;s also mildly amusing to give management a platform where they have to [&hellip;]<\/p>\n","protected":false},"author":25957,"featured_media":18,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_acf":"","footnotes":""},"categories":[320,301,345],"tags":[181],"ppma_author":[407],"class_list":["post-1675","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-autonomous-operator","category-cloud","category-kubernetes","tag-kubernetes"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\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=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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\",\"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\\\/5\\\/2026\\\/05\\\/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\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2020-05-06T17:50:47+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\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/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\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"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:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5918b7fdf9c2714c0b72bd1d7366f65751da5f40cbcfdede50d123f4c40c893?s=96&d=mm&r=gbf0dbf1d557d4349cd907431f40a61ac\",\"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: Leveling-Up With the Autonomous Operator","description":"How to upgrade the Couchbase Autonomous Operator from Version 1 to Version 2. Understanding and handling non-trivial CRD upgrades.","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","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","type":"image\/png"}],"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","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\/5\/2026\/05\/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\/5\/2026\/05\/couchbase-nosql-dbaas.png","datePublished":"2020-05-06T17:50:47+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\/5\/2026\/05\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/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\/sites\/5\/2026\/06\/logo.svg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","width":"1024","height":"1024","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:\/\/secure.gravatar.com\/avatar\/c5918b7fdf9c2714c0b72bd1d7366f65751da5f40cbcfdede50d123f4c40c893?s=96&d=mm&r=gbf0dbf1d557d4349cd907431f40a61ac","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\/"}]}},"acf":[],"authors":[{"term_id":407,"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\/?s=96&d=mm&r=g","author_category":"","first_name":"Simon","last_name":"Murray","user_url":"","job_title":"","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."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1675","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=1675"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1675\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/18"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=1675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1675"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}