CINXE.COM
Install the Operator on OpenShift | Couchbase Docs
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv=content-security-policy content="default-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline' https:; font-src 'self' https://fonts.gstatic.com; frame-src 'self' https:; img-src 'self' data: https:; connect-src 'self' https:; worker-src blob:;"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://metrics.couchbase.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MVPNN2');</script> <!-- End Google Tag Manager --> <title>Install the Operator on OpenShift | Couchbase Docs</title> <link rel="canonical" href="https://docs.couchbase.com/operator/current/install-openshift.html"> <link rel="stylesheet" href="../../_/css/site.css"> <script src="../../_/js/vendor/jquery.js"></script> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" data-domain-script="748511ff-10bf-44bf-88b8-36382e5b5fd9"></script> <script>function OptanonWrapper(){}</script> <link rel="schema.dcterms" href="https://purl.org/dc/terms/"> <meta name="dcterms.subject" content="operator"> <meta name="dcterms.identifier" content="2.4"> <meta name="page-url" content="/operator/2.4/install-openshift.html"> <meta name="page-nav-header-levels" content="0"> <meta name="docsearch:component" content="operator"> <meta name="docsearch:component_title" content="Autonomous Operator"> <meta name="docsearch:cversion" content="2.4"> <meta name="docsearch:component_version" content="operator@2.4"> <meta name="docsearch:module" content=""> <meta name="docsearch:breadcrumbs" content="Autonomous Operator / Introduction / Install the Operator on OpenShift"> <meta name="docsearch:topic_type" content=""> <meta name="docsearch:version_rank" content="4"> <meta name="docsearch:status" content=""> <meta name="docsearch:edition" content=""> <meta name="docsearch:page_rank" content="50"> <meta name="generator" content="Antora 3.1.5"> <link rel="icon" href="../../_/img/favicon.svg" type="image/svg+xml"> <link rel="icon" href="../../_/img/favicon.ico" type="image/x-icon" sizes="any"> </head> <body class="article"> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MVPNN2" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <header class="header fixed-top"> <div class="header-top-row"> <div class="container"> <nav class="navbar navbar-expand-md flex-nowrap justify-content-between navbar-new-top"> <ul class="navbar-brand-list"> <li class="brand-logo"> <a class="navbar-brand" href="https://www.couchbase.com"> <img src="../../_/img/couchbase-logo.svg" alt="Couchbase" /> </a> </li> <li> <a class="navbar-brand cb-documentation" href="https://docs.couchbase.com/home/index.html"> <img src="../../_/img/cb-documentation.svg" alt="Couchbase Documentation" class="cb-docs" /> <img src="../../_/img/cb-docs-hover.svg" alt="Couchbase Documentation" class="hide cb-hover-docs" /> </a> </li> </ul> <button class="navbar-burger" data-target="topbar-menu"> <span></span> <span></span> <span></span> </button> </nav> </div> </div> <div class="header-bottom-row" id="topbar-menu"> <div class="container"> <nav class="navbar navbar-new-bottom "> <div class="navbar-collapse collapse" id="navbar2"> <ul class="navbar-nav w-100 justify-content-start"> <li class="nav-item ""> <a href="https://docs.couchbase.com/home/index.html" class="nav-link"> <i class="fas fa-home"></i> </a> </li> <li class="nav-item "> <a class="nav-link" href="../../home/server.html"> Server </a> </li> <li class="nav-item "> <a class="nav-link" href="../../home/mobile.html"> Mobile </a> </li> <li class="nav-item "> <a class="nav-link" href="../../home/cloud.html"> Capella </a> </li> <li class="nav-item "> <a class="nav-link" href="../../cloud-native-database/index.html"> Cloud-Native </a> </li> <li class="nav-item "> <a class="nav-link" href="../../home/sdk.html"> Couchbase SDKs </a> </li> <li class="nav-item "> <a class="nav-link" href="../../home/columnar-sdk.html"> Columnar SDKs </a> </li> </ul> </div> <div class="primary-action"> <div class="navbar-item search" id="search"> <input class="dataLayer query" type="text" placeholder="Search Docs"><i class="fas fa-search"></i> </div> <a class="btn btn-primary btn-grey-reverse" onclick="(window.dataLayer=window.dataLayer||[]).push({'event':'customEvent', 'category':'CTA', 'action':'Button Click', 'label':'Download'});" href="https://www.couchbase.com/downloads"> Downloads <i class="far fa-arrow-to-bottom fa-fw"></i> </a> <a href="https://cloud.couchbase.com/sign-up" class="btn btn-primary" onclick="(window.dataLayer=window.dataLayer||[]).push({'event':'customEvent', 'category':'CTA', 'action':'Button Click', 'label':'Free Trial'});" > Try Free <i class="far fa-cloud fa-fw"></i> </a> </div> </nav> </div> </div> </header> <div class="body container"> <aside class="nav left-sidebar"> <div class="nav-container"> <a href="#" class="menu-expand-toggle"><span>Navigation</span><i class="fas fa-times-circle"></i><i class="fas fa-chevron-circle-left"></i></a> <template id="page-versions" style="display: none"> <select class="version_list" data-component="operator"> <option value="2.7" data-url="../current/install-openshift.html">2.7</option> <option value="2.6" data-url="../2.6/install-openshift.html">2.6</option> <option value="2.5" data-url="../2.5/install-openshift.html">2.5</option> <option value="2.4" data-url="install-openshift.html" selected>2.4</option> <option value="2.3" data-url="../2.3/install-openshift.html">2.3</option> </select> </template> </div> </aside> <aside class="toc sidebar" data-title="Contents" data-levels="1"> <div class="sidebar-box"> <div class="toc-menu"></div> <div class="is-this-helpful-box"> <h4> Is this page helpful?</h4> <div class="btn-row"> <a href="#" class="like-btn helpful-btn" id="yesBtn" data-page-rating="like" > <i class="far fa-thumbs-up"></i> Yes </a> <a href="#" class="dislike-btn helpful-btn" id="noBtn" data-page-rating="dislike"> <i class="far fa-thumbs-down"></i> No</a> </div> <div class="any-feedback"> <a href="#" class="btn any-feedback-btn" id="myCustomTrigger">Leave Additional Feedback? </a> </div> <div class="dialog-box" id="dialogBox"> <form> <div class="form-group " id="additionalFeedbackBox"> <textarea class="input-control feed-back-msg" rows="8" placeholder="Any Additonal Feedback?"></textarea> <div class="action-btn-row "> <a href="#" class="skip-btn" id="skipBtnMsg">Skip</a> <button class="submit-btn btn blue-btn disabled" > Submit </button> <a href="#" class="info-btn"><i class="fas fa-info-circle"></i></a> </div> </div> </form> </div> </div> </div> </aside> <div class="feedback-modal modal-popup"> <div class="modal-popup-dialogue"> <div class="popup-header"> <a href="#" class="close-popup"><i class="fa fa-times"></i></a> </div> <div class="popup-content"> <p> Please use the form below to provide your feedback. Because your feedback is valuable to us, the information you submit in this form is recorded in our issue tracking system (JIRA), which is publicly available. You can track the status of your feedback using the ticket number displayed in the dialog once you submit the form. </p> </div> </div> </div> <main class="article" data-ceiling="topbar"> <div class="article-banner"> <i class="fas fa-file-alt"></i> <p>A newer version of this documentation is available.</p> <a class="btn" href="../current/install-openshift.html">View Latest</a> </div> <div class="article-header"> <nav class="crumbs" aria-label="breadcrumbs"> <ul> <li class="crumb"><a href="overview.html">Autonomous Operator</a></li> <li class="crumb">Introduction</li> <li class="crumb"><a href="install-openshift.html">Install the Operator on OpenShift</a></li> </ul> </nav> </div> <article class="doc"> <div class="page-heading-title"> <h1 class="page">Install the Operator on OpenShift</h1> <div class="labels"> <ul></ul> </div> </div> <div class="contributor-list-box"> <span class="last-commit-date" id="commitdate"> </span> <ul id="contributorList"></ul> <span id="otherContributor"> + </span> </div><div id="preamble"> <div class="sectionbody"> <div class="quoteblock abstract"> <blockquote> This guide walks through the recommended procedure for installing the Couchbase Autonomous Operator on a Red Hat OpenShift project. </blockquote> </div> <div class="admonitionblock important"> <table> <tr> <td class="icon"> <i class="fa icon-important" title="Important"></i> </td> <td class="content"> <div class="paragraph"> <p>If you are looking to upgrade an existing installation of the Operator, see <a href="howto-operator-upgrade.html" class="xref page">Upgrading the Autonomous Operator</a>.</p> </div> </td> </tr> </table> </div> </div> </div> <div class="sect1"> <h2 id="prerequisites"><a class="anchor" href="#prerequisites"></a>Prerequisites</h2> <div class="sectionbody"> <div class="paragraph"> <p>Download the Operator <a href="https://www.couchbase.com/downloads" target="_blank" rel="noopener">package</a> and unpack it on the same computer where you normally run <code>oc</code>. The Operator package contains YAML configuration files and command-line tools that you will use to install the Operator.</p> </div> <div class="admonitionblock important"> <table> <tr> <td class="icon"> <i class="fa icon-important" title="Important"></i> </td> <td class="content"> <div class="paragraph"> <p>After you unpack the download, the resulting directory will be titled something like <code>couchbase-autonomous-operator-openshift.x.x-linux_x86_64</code>. Make sure to <code>cd</code> into this directory before you run the commands in this guide.</p> </div> </td> </tr> </table> </div> <div class="paragraph"> <p>All commands in this guide are run as a system administrator account; they require the creation of cluster scoped resources or the granting of roles to service accounts (privilege escalation).</p> </div> <div class="admonitionblock important"> <table> <tr> <td class="icon"> <i class="fa icon-important" title="Important"></i> </td> <td class="content"> <div class="paragraph"> <p>It may be tempting to use the container images hosted on Docker Hub as they are dramatically smaller, and more secure, than those offered for use on the Red Hat Container Catalog. However, it is a Red Hat requirement for OpenShift users that Red Hat Container Catalog images be used. Use of Kubernetes images hosted on Docker Hub are not guaranteed to work, and are not supported, on the OpenShift platform.</p> </div> </td> </tr> </table> </div> </div> </div> <div class="sect1"> <h2 id="install-the-crd"><a class="anchor" href="#install-the-crd"></a>Install the CRD</h2> <div class="sectionbody"> <div class="paragraph"> <p>The first step in installing the Operator is to install the custom resource definitions (CRD) that describe the Couchbase resource types. This can be achieved with the following command:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ oc create -f crd.yaml</code></pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="install-the-operator"><a class="anchor" href="#install-the-operator"></a>Install the Operator</h2> <div class="sectionbody"> <div class="paragraph"> <p>The operator is composed of two components; a per-cluster dynamic admission controller (DAC) and a per-namespace Operator. Refer to the <a href="concept-operator.html" class="xref page">operator architecture document</a> for additional information on what is required and security considerations.</p> </div> <div class="admonitionblock important"> <table> <tr> <td class="icon"> <i class="fa icon-important" title="Important"></i> </td> <td class="content"> <div class="paragraph"> <p>If you use the Openshift Marketplace UI to deploy the Couchbase Autonomous Operator, the dynamic admission controller (DAC) will not be deployed. It is recommended that you use the <code>cao create admission</code> command to deploy the DAC after installing the Operator.</p> </div> </td> </tr> </table> </div> <div class="paragraph"> <p>The DAC and Operator will be installed into the current project/namespace selected by the <code>oc</code> command. Ensure you have created and selected the correct namespace to install into.</p> </div> <div class="paragraph"> <p>The Red Hat container catalog requires that deployments have login credentials that allow access to container images; these are provided by a secret:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ oc create secret docker-registry rh-catalog --docker-server=registry.connect.redhat.com \ --docker-username=<rhel-username> --docker-password=<rhel-password> --docker-email=<docker-email></code></pre> </div> </div> <div class="admonitionblock important"> <table> <tr> <td class="icon"> <i class="fa icon-important" title="Important"></i> </td> <td class="content"> <div class="paragraph"> <p>This command uses 3rd party resources and is subject to change. Consult the documentation provided by Red Hat for up to date instructions.</p> </div> </td> </tr> </table> </div> <div class="paragraph"> <p>The following command will install both the DAC and the Operator in the current project:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ bin/cao create admission --image-pull-secret rh-catalog $ bin/cao create operator --image-pull-secret rh-catalog</code></pre> </div> </div> <div class="sect2"> <h3 id="custom-installation"><a class="anchor" href="#custom-installation"></a>Custom Installation</h3> <div class="paragraph"> <p>Alternatively, you may wish to install just the DAC in the <code>camelot</code> namespace:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ oc project camelot $ bin/cao create admission --image-pull-secret rh-catalog</code></pre> </div> </div> <div class="paragraph"> <p>And then install just the Operator into the <code>asgard</code> namespace:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ oc project asgard $ bin/cao create operator --image-pull-secret rh-catalog</code></pre> </div> </div> <div class="paragraph"> <p>For further installation options please see the <a href="tools/cao.html" class="xref page"><code>cao</code></a> reference manual.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="check-the-status-of-the-operator"><a class="anchor" href="#check-the-status-of-the-operator"></a>Check the Status of the Operator</h2> <div class="sectionbody"> <div class="paragraph"> <p>You can use the following command to check on the status of the deployments:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ oc get deployments NAME READY UP-TO-DATE AVAILABLE AGE couchbase-operator 1/1 1 1 8s couchbase-operator-admission 1/1 1 1 8s</code></pre> </div> </div> <div class="paragraph"> <p>The Operator is ready to deploy <code>CouchbaseCluster</code> resources when both the DAC and Operator deployments are fully ready and available.</p> </div> </div> </div> <div class="sect1"> <h2 id="installing-user-permissions"><a class="anchor" href="#installing-user-permissions"></a>Installing User Permissions</h2> <div class="sectionbody"> <div class="paragraph"> <p>By default on an OpenShift platform, users will not have permissions to create and modify Couchbase custom resources. We provide a cluster role that can be installed once and referenced by any number of user accounts. To install the role:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ oc create -f cluster-role-user.yaml</code></pre> </div> </div> <div class="paragraph"> <p>To associate the role with a user <code>merlin</code> in the namespace <code>camelot</code> use the following command:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ oc create rolebinding merlin-couchbasecluster --namespace camelot --user merlin --clusterrole couchbasecluster</code></pre> </div> </div> <div class="paragraph"> <p>You can now login as the user <code>merlin</code> and manage Couchbase resources in the <code>camelot</code> namespace.</p> </div> </div> </div> <div class="sect1"> <h2 id="uninstalling-the-operator"><a class="anchor" href="#uninstalling-the-operator"></a>Uninstalling the Operator</h2> <div class="sectionbody"> <div class="paragraph"> <p>Uninstalling the DAC and Operator is the reverse of the installation process:</p> </div> <div class="admonitionblock important"> <table> <tr> <td class="icon"> <i class="fa icon-important" title="Important"></i> </td> <td class="content"> <div class="paragraph"> <p>If you are performing an uninstall in order to upgrade the Operator to a newer version, do not delete the CRDs as this is only relevant for a full uninstall. Failure to do so will result in the deletion of all Couchbase clusters.</p> </div> </td> </tr> </table> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ bin/cao delete operator $ bin/cao delete admission $ oc delete -f crd.yaml</code></pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="next-steps"><a class="anchor" href="#next-steps"></a>Next Steps</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="howto-couchbase-create.html" class="xref page">How-to Deploy a Couchbase Cluster, a basic configuration</a></p> </li> <li> <p><a href="reference-reference-architecture.html" class="xref page"><code>CouchbaseCluster</code> Reference Architecture, an advanced production configuration</a></p> </li> </ul> </div> </div> </div> </article> </main> </div> <footer class="footer"> <div class="container"> <div class="footer-links"> <div class="col"> <div class="footer-logo"> <a href="https://www.couchbase.com" class="icon"> <img src="../../_/img/couchbase-logo.svg" alt="Couchbase"> </a> </div> </div> <div class="col"> <ul> <li><a href="https://docs.couchbase.com" target="_blank" rel="noopener">Documentation</a></li> <li><a href="https://forums.couchbase.com" target="_blank" rel="noopener">Forums</a></li> <li><a href="https://support.couchbase.com" target="_blank" rel="noopener">Support</a></li> </ul> </div> <div class="col"> <ul> <li><a href="https://developer.couchbase.com" target="_blank" rel="noopener">Developer Portal</a></li> <li><a href="https://blog.couchbase.com" target="_blank" rel="noopener">Blog</a></li> <li><a href="https://www.couchbase.com/resources">Resources</a></li> </ul> </div> <div class="col"> <ul> <li><a href="https://www.couchbase.com/get-started-developing-nosql">Get Started</a></li> <li><a href="https://www.couchbase.com/downloads">Downloads</a></li> <li><a href="https://learn.couchbase.com/store?utf8=%E2%9C%93&ss=1&ct=78327&commit=Filter" target="_blank" rel="noopener">Training</a></li> </ul> </div> <div class="col"> <ul class="social-icons"> <li> <svg width="14" height="14" viewBox="0 0 32.1 26.1"> <path id="twitter" class="cls-1" d="M32,7.1a11.836,11.836,0,0,1-3.8,1,6.462,6.462,0,0,0,2.9-3.6,12.606,12.606,0,0,1-4.2,1.6A6.492,6.492,0,0,0,22.1,4a6.594,6.594,0,0,0-6.6,6.6,7.719,7.719,0,0,0,.2,1.5A18.458,18.458,0,0,1,2.2,5.2a6.294,6.294,0,0,0-.9,3.3A6.765,6.765,0,0,0,4.2,14a6.109,6.109,0,0,1-3-.8v.1a6.543,6.543,0,0,0,5.3,6.4,4.678,4.678,0,0,1-1.7.2,4.869,4.869,0,0,1-1.2-.1,6.679,6.679,0,0,0,6.1,4.6,12.917,12.917,0,0,1-8.2,2.8,9.151,9.151,0,0,1-1.6-.1,18.438,18.438,0,0,0,10.1,3c12.1,0,18.7-10,18.7-18.7v-.8A13.336,13.336,0,0,0,32,7.2Z" transform="translate(0.1 -4)"/></svg> <a href="https://twitter.com/couchbase" class="icon"> Twitter </a> </li> <li> <svg width="14" height="14" viewBox="0 0 32 32"> <path id="linkedin" class="cls-1" d="M29,0H3A3.076,3.076,0,0,0,0,3V29a3.009,3.009,0,0,0,3,3H29a2.946,2.946,0,0,0,3-3V3A3.009,3.009,0,0,0,29,0ZM12,26H8V12h4ZM10,10a2,2,0,1,1,2-2A2.006,2.006,0,0,1,10,10ZM26,26H22V18a2,2,0,0,0-4,0v8H14V12h4v2.5c.8-1.1,2.1-2.5,3.5-2.5A4.736,4.736,0,0,1,26,17Z"/></svg> <a href="https://www.linkedin.com/company/couchbase" class="icon"> Linkedin </a> </li> <li> <svg width="14" height="14" viewBox="0 0 32 32"> <path id="facebook" class="cls-1" d="M29,0H3A2.652,2.652,0,0,0,0,3V29a2.652,2.652,0,0,0,3,3H16V18H12V14h4V12a6.452,6.452,0,0,1,6-6h4v4H22a2.151,2.151,0,0,0-2,2v2h6l-1,4H20V32h9a2.652,2.652,0,0,0,3-3V3A2.652,2.652,0,0,0,29,0Z"/></svg> <a href="https://www.facebook.com/Couchbase" class="icon"> Facebook </a> </li> </ul> </div> </div> <div class="footer-terms"> <div class="footer-terms-copyright"> <span>漏 2024 Couchbase and the Couchbase logo are registered trademarks of Couchbase, Inc. All third party trademarks (including logos and icons) referenced by Couchbase, Inc. remain the property of their respective owners. </span> </div> <div class="footer-terms-links"> <a href="https://www.couchbase.com/terms-of-use">Terms of Use</a> <a href="https://www.couchbase.com/privacy-policy">Privacy Policy</a> <a href="https://www.couchbase.com/cookie-policy">Cookie Policy</a> <a href="https://www.couchbase.com/support-policy">Support Policy</a> <a href="https://info.couchbase.com/unsubscribe-or-manage-preferences.html" target="_blank" rel="noopener">Marketing Preference Center</a> </div> </div> </div> </footer> <script src="../../_/js/site-navigation-data.js"></script> <script id="page-navigation-group" type="application/json"> {"title":"Autonomous Operator","components":["operator"],"latestVersions":{"operator":"2.7"}} </script> <template id="run-code-panel"> <div class="action-panel"> <form class="action-panel-control" method="POST" action="https://couchbase.live/run" target="run-code-output"> <input type="hidden" name="lang"> <input type="hidden" name="code"> <input type="hidden" name="from" value="docs"> <div class="controls"> <button class="control-button rerun" type="submit"><i class="fas fa-redo"></i></button> <span class="shell-name control-label">Output</span> <button class="control-button close"><i class="fas fa-times"></i> Close</button> </div> </form> <iframe class="run-code-output" name="run-code-output"></iframe> </div> </template> <script id="site-script" src="../../_/js/vendor/chatbox-ui.js"></script> <script id="site-script" src="../../_/js/site.js"></script> <script async src="../../_/js/vendor/tabs.js" data-sync-storage-key="preferred-tab"></script> <script defer src="../../_/js/vendor/fontawesome-icon-defs.js"></script> <script defer src="../../_/js/vendor/fontawesome.js" data-search-pseudo-elements="true"></script> <script async src="../../_/js/vendor/highlight.js"></script> <script async id="search-script" src="../../_/js/vendor/docsearch.js" data-app-id="NI1G57N08Q" data-api-key="d3eff3e8bcc0860b8ceae87360a47d54" data-index-name="prod_docs_couchbase" data-stylesheet="../../_/css/vendor/docsearch.css"></script> <script async id="feedback-script" src="../../_/js/vendor/feedback.js?v=1" data-collector-id="709818cb"></script> </body> </html>