<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Operator SDK – Overview</title>
    <link>/docs/overview/</link>
    <description>Recent content in Overview on Operator SDK</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
	  <atom:link href="/docs/overview/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Project Layout</title>
      <link>/docs/overview/project-layout/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/overview/project-layout/</guid>
      <description>
        
        
        &lt;h2 id=&#34;operator-sdk-project-layout&#34;&gt;Operator SDK Project Layout&lt;/h2&gt;
&lt;p&gt;All projects initialized with &lt;code&gt;operator-sdk init&lt;/code&gt; have a common base structure which builds on &lt;a href=&#34;https://book.kubebuilder.io/cronjob-tutorial/basic-project.html&#34;&gt;kubebuilder&amp;rsquo;s project layout&lt;/a&gt;. Each project type is customized further with code of that type&amp;rsquo;s language.&lt;/p&gt;
&lt;h3 id=&#34;common-base&#34;&gt;Common Base&lt;/h3&gt;
&lt;p&gt;The common structure contains the following items:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File/Directory&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Dockerfile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The Dockerfile of your operator project, used to build the image with &lt;code&gt;make docker-build&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Makefile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Build file with helper targets to help you work with your project.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PROJECT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;This file represents the project&amp;rsquo;s configuration and is used to track useful information for the CLI and plugins.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bin/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;This directory contains useful binaries such as the &lt;code&gt;manager&lt;/code&gt; which is used to run your project locally and  the &lt;code&gt;kustomize&lt;/code&gt; utility used for the project configuration. For other language types, it might have other binaries useful for developing your operator.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bundle/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;This directory contains all the files used to &lt;a href=&#34;/docs/olm-integration/&#34;&gt;integrate your project&lt;/a&gt; with &lt;a href=&#34;https://github.com/operator-framework/operator-lifecycle-manager&#34;&gt;OLM&lt;/a&gt; with the &lt;a href=&#34;https://github.com/operator-framework/operator-registry/blob/v1.16.1/docs/design/operator-bundle.md&#34;&gt;bundle&lt;/a&gt; format. It is built from the Makefile target &lt;code&gt;make bundle&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bundle/manifests/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;This directory has the &lt;a href=&#34;https://github.com/operator-framework/operator-registry/tree/v1.5.3#manifest-format&#34;&gt;OLM manifests&lt;/a&gt; of your &lt;a href=&#34;https://github.com/operator-framework/operator-registry/blob/v1.16.1/docs/design/operator-bundle.md&#34;&gt;bundle&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bundle/metadata/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;This directory has the &lt;a href=&#34;https://github.com/operator-framework/operator-registry/blob/v1.16.1/docs/design/operator-bundle.md#bundle-manifest-format&#34;&gt;OLM metadata&lt;/a&gt; of your &lt;a href=&#34;https://github.com/operator-framework/operator-registry/blob/v1.16.1/docs/design/operator-bundle.md&#34;&gt;bundle&lt;/a&gt; e.g the index image annotations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bundle/tests/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;This directory has the &lt;a href=&#34;/docs/testing-operators/scorecard/&#34;&gt;Scorecard&lt;/a&gt; tests shipped with your operator bundle.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains configuration files to launch your project on a cluster. Plugins might use it to provide functionality. For example, for the CLI  to help create your operator bundle it will look for the CRD&amp;rsquo;s and CR&amp;rsquo;s which are scaffolded in this directory. You will also find all &lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize&#34;&gt;Kustomize&lt;/a&gt; YAML definitions as well.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/crd/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the &lt;a href=&#34;https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/&#34;&gt;Custom Resources Definitions&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/default/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains a &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/v1.4.2/testdata/go/v3/memcached-operator/config/default/kustomization.yaml&#34;&gt;Kustomize base&lt;/a&gt; for launching the controller in a standard configuration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/manager/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the manifests to launch your operator project as pods on the cluster.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/manifests/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the base to generate your OLM manifests in the bundle directory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/prometheus/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the manifests required to enable project to serve metrics to &lt;a href=&#34;https://book.kubebuilder.io/reference/metrics.html&#34;&gt;Prometheus&lt;/a&gt; such as the &lt;code&gt;ServiceMonitor&lt;/code&gt; resource.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/scorecard/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the manifests required to allow you test your project with &lt;a href=&#34;/docs/testing-operators/scorecard/&#34;&gt;Scorecard&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/rbac/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the &lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/rbac/&#34;&gt;RBAC&lt;/a&gt; permissions required to run your project.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/samples/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the &lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#custom-resources&#34;&gt;Custom Resources&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bundle.Dockerfile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The Dockerfile to build the &lt;a href=&#34;https://github.com/operator-framework/operator-registry/blob/v1.16.1/docs/design/operator-bundle.md&#34;&gt;bundle&lt;/a&gt; image. Used to build the operator bundle image with `make bundle-build. |&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;ansible&#34;&gt;Ansible&lt;/h3&gt;
&lt;p&gt;Now, let&amp;rsquo;s look at the files and directories specific to Ansible-based operators.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File/Directory&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/testing/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manifest files to help you test your project. For example, to change the image policy for your &lt;a href=&#34;/docs/building-operators/ansible/testing-guide&#34;&gt;Molecule tests&lt;/a&gt; or to enable debug level in the Ansible logs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;molecule/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contain the manifests for your &lt;a href=&#34;https://molecule.readthedocs.io/&#34;&gt;Molecule&lt;/a&gt; tests.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;molecule/default&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the default &lt;a href=&#34;https://molecule.readthedocs.io/&#34;&gt;Molecule&lt;/a&gt; task.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;molecule/kind&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the &lt;a href=&#34;https://molecule.readthedocs.io/&#34;&gt;Molecule&lt;/a&gt; task to be executed on the cluster.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;playbooks/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the Ansible playbooks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;roles/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the Ansible role files for each Kind scaffold.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;requirements.yml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;This file specifies Ansible dependencies that need to be installed for your operator to function.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;watches.yaml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains Group, Version, Kind, and the playbooks and rules location. Used to configure the &lt;a href=&#34;/docs/building-operators/ansible/reference/watches&#34;&gt;Ansible watches&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;golang&#34;&gt;Golang&lt;/h3&gt;
&lt;p&gt;Now, let&amp;rsquo;s look at the files and directories specific to Go-based operators.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File/Directory&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;api/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the api definition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/certmanager&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the Kustomize manifests which configure the &lt;a href=&#34;https://cert-manager.io/docs/&#34;&gt;cert-manager&lt;/a&gt; by the Webhooks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/webhook&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the Kustomize manifests to configure the Webhook.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;controllers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the controllers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;main.go&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Implements the project initialization.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hack/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains utility files, e.g. the file used to scaffold the license header for your project files.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;helm&#34;&gt;Helm&lt;/h3&gt;
&lt;p&gt;Now, let&amp;rsquo;s look at the files and directories specific to Helm-based operators.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File/Directory&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;helm-charts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the Helm charts for each Kind scaffold which can be initialized with &lt;code&gt;operator-sdk init --plugins=helm [options]&lt;/code&gt; or &lt;code&gt;operator-sdk create api [options]&lt;/code&gt; .&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;watches.yaml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains Group, Version, Kind, and Helm chart location. Used to configure the &lt;a href=&#34;/docs/building-operators/helm/reference/watches&#34;&gt;Helm watches&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Cheat Sheet</title>
      <link>/docs/overview/cheat-sheet/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/overview/cheat-sheet/</guid>
      <description>
        
        
        &lt;p&gt;Below you will find a cheat sheet with options and helpers for projects, which are built with the SDK and are respecting its proposed layout.&lt;/p&gt;
&lt;h2 id=&#34;common-commands-and-options&#34;&gt;Common commands and options&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;To initialize an operator project in the current directory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk init --plugins=&amp;lt;plugin-key&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;To initialize an operator project in the current directory using a specific plugin. To check the available plugins you can run &lt;code&gt;operator-sdk --help&lt;/code&gt;. E.g (&lt;code&gt;operator-sdk init --plugins=helm&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk create api [flags]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lets you create your own APIs with its &lt;a href=&#34;https://book.kubebuilder.io/cronjob-tutorial/gvks.html&#34;&gt;GKV&lt;/a&gt; by &lt;a href=&#34;https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/&#34;&gt;Extending the Kubernetes API with CustomResourceDefinitions&lt;/a&gt;, or lets you use external/core-types. Also generates their respective &lt;a href=&#34;https://kubernetes.io/docs/concepts/architecture/controller&#34;&gt;controllers&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk create webhook [flags]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;To scaffold &lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/&#34;&gt;Webhooks&lt;/a&gt; for the APIs declared in the project. Currently, only the Go-based project supports this option.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make docker-build IMG=&amp;lt;some-registry&amp;gt;/&amp;lt;project-name&amp;gt;:&amp;lt;tag&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Build the operator image.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make docker-build docker-push IMG=&amp;lt;some-registry&amp;gt;/&amp;lt;project-name&amp;gt;:&amp;lt;tag&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Build and push the operator image for your registry.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make install&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Install the CRDs into the cluster.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make uninstall&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Uninstall the CRDs into the cluster.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run your controller locally and outside of the cluster. Note that this will run in the foreground, so switch to a new terminal if you want to leave it running.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make deploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deploy your project on the cluster.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make undeploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Undeploy your project on the cluster.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;to-create-bundles-catalogs-and-develop-for-olm&#34;&gt;To create bundles, catalogs, and develop for OLM&lt;/h2&gt;
&lt;p&gt;For further information check &lt;a href=&#34;/docs/olm-integration/&#34;&gt;Operator SDK Integration with Operator Lifecycle Manager&lt;/a&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make bundle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create/update the &lt;a href=&#34;https://github.com/operator-framework/operator-registry/blob/v1.16.1/docs/design/operator-bundle.md&#34;&gt;bundle&lt;/a&gt; based on the project manifests in the &lt;code&gt;bundle/&lt;/code&gt; directory. For more info see &lt;a href=&#34;/docs/olm-integration/tutorial-bundle/#creating-a-bundle&#34;&gt;Create a bundle&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk bundle validate ./bundle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;To validate your &lt;a href=&#34;https://github.com/operator-framework/operator-registry/blob/v1.16.1/docs/design/operator-bundle.md&#34;&gt;bundle&lt;/a&gt; spec definition.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk bundle validate ./bundle --select-optional suite=operatorframework&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validate your bundle against &lt;a href=&#34;https://operatorhub.io/&#34;&gt;OperatorHub.io&lt;/a&gt; criteria. For further information use the flag &lt;code&gt;--help&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk olm install&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;To install OLM on your cluster for development purposes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk olm uninstall&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;To uninstall OLM from your cluster.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make bundle-build BUNDLE_IMG=&amp;lt;some-registry&amp;gt;/&amp;lt;project-name-bundle&amp;gt;:&amp;lt;tag&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;To build your bundle operator image.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make bundle-build bundle-push BUNDLE_IMG=&amp;lt;some-registry&amp;gt;/&amp;lt;project-name-bundle&amp;gt;:&amp;lt;tag&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;To build and push your bundle operator image.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk run bundle &amp;lt;some-registry&amp;gt;/&amp;lt;project-name-bundle&amp;gt;:&amp;lt;tag&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;To deploy your bundle operator using OLM on your cluster for development purposes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk run bundle private-registry.org/bundle:v1.2.3 --service-account sa-with-secret --pull-secret-name regcred --ca-secret-name cert-sec&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Configure &lt;code&gt;run bundle&lt;/code&gt; (and &lt;code&gt;run bundle-upgrade&lt;/code&gt;) to use an image pull secret, non-default service account configured with that secret, and custom CA certificate secret&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- TODO(estroz): remove the service account requirement once OLM releases a patch or new
minor release containing https://github.com/operator-framework/operator-lifecycle-manager/pull/1941 --&gt;
&lt;h3 id=&#34;updating-bundle-channels&#34;&gt;Updating bundle channels&lt;/h3&gt;
&lt;p&gt;The following examples let you update the &lt;a href=&#34;https://github.com/operator-framework/operator-registry/blob/v1.16.1/docs/design/operator-bundle.md&#34;&gt;bundle&lt;/a&gt; with data-informed. For further information also check &lt;a href=&#34;/docs/olm-integration/generation/#upgrade-your-operator&#34;&gt;Upgrade your Operator&lt;/a&gt; and see &lt;a href=&#34;https://olm.operatorframework.io/docs/best-practices/channel-naming/&#34;&gt;Channel Naming&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Note that it will carry over any customizations you have made and ensure a rolling update to the next version of your Operator.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;make bundle &lt;span style=&#34;color:#000&#34;&gt;CHANNELS&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;fast,preview &lt;span style=&#34;color:#000&#34;&gt;DEFAULT_CHANNEL&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;stable &lt;span style=&#34;color:#000&#34;&gt;VERSION&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;1.0.0 &lt;span style=&#34;color:#000&#34;&gt;IMG&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;some-registry&amp;gt;/&amp;lt;project-name-bundle&amp;gt;:&amp;lt;tag&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; You can use environment variables to pass the values such as &lt;code&gt;export CHANNELS=fast,candidate&lt;/code&gt;. Note that, their values will be used by &lt;code&gt;make bundle&lt;/code&gt; command.&lt;/p&gt;
&lt;h2 id=&#34;to-test-your-projects&#34;&gt;To test your projects&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator-sdk scorecard ./bundle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run the &lt;a href=&#34;/docs/testing-operators/scorecard/&#34;&gt;Scorecard&lt;/a&gt; tests for your bundle.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run Go tests. It is valid only for Go-based operators.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;molecule test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run &lt;a href=&#34;/docs/building-operators/ansible/testing-guide&#34;&gt;Molecule&lt;/a&gt; tests.  It is valid only for Ansible-based operators.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;helm test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run &lt;a href=&#34;https://helm.sh/docs/topics/chart_tests/&#34;&gt;Helm chart tests&lt;/a&gt;.  It is valid only for Helm-based operators.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; This is not a comprehensive list of make targets or commands. Please see the scaffolded Makefile and &lt;code&gt;make help&lt;/code&gt; for the full list of targets. Note that you can use &lt;code&gt;operator-sdk &amp;lt;command&amp;gt; --help&lt;/code&gt; and check the &lt;a href=&#34;/docs/cli/&#34;&gt;CLI&lt;/a&gt; section to check all options.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Operator Capability Levels</title>
      <link>/docs/overview/operator-capabilities/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/overview/operator-capabilities/</guid>
      <description>
        
        
        &lt;p&gt;Operators come in different maturity levels in regards to their lifecycle management capabilities for the application or workload they deliver. The capability models aims to provide guidance in terminology to express what features users can expect from an operator.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/operator-capability-level.png&#34; alt=&#34;operator-capability-level&#34;&gt;&lt;/p&gt;
&lt;p&gt;Each capability level is associated with a certain set of management features the Operator offers around the managed workload. Operator that do not manage a workload and/or are delegating to off-clusters orchestration services would remain at Level 1. Capability levels are designated from level 1 to level 5. Each capability represents its own set of features and may be independent of each other.&lt;/p&gt;
&lt;h2 id=&#34;terminology&#34;&gt;Terminology&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Operator&lt;/strong&gt; - the custom controller installed on a Kubernetes cluster&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Operand&lt;/strong&gt; - the managed workload provided by the Operator as a service&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Custom Resource (CR)&lt;/strong&gt; - an instance of the &lt;a href=&#34;https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/&#34;&gt;&lt;code&gt;CustomResourceDefinition&lt;/code&gt;&lt;/a&gt; the Operator ships that represents the Operand or an Operation on an Operand (also known as primary resources)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Managed resources&lt;/strong&gt; - the Kubernetes objects or off-cluster services the Operator uses to constitute an Operand (also known as secondary resources)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Custom Resource Definition (CRD)&lt;/strong&gt; - an API of the Operator, providing the blueprint and validation rules for &lt;strong&gt;Custom Resources&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;level-1---basic-install&#34;&gt;Level 1 - Basic Install&lt;/h2&gt;
&lt;p&gt;Automated application provisioning and configuration management. This first capability level means your operator can fully provision an application through a custom resource, allowing all installation configuration details to be specified in the CR. It should also be possible to install the operator itself in multiple ways (kubectl, OLM, Catalog source). Any configuration required to make the Operand run should be configured through the CR if possible. Avoid the practice of requiring the user to create/manage configuration files outside of Kubernetes.&lt;/p&gt;
&lt;h3 id=&#34;installation-of-the-workload&#34;&gt;Installation of the workload&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operator deploys an Operand or configures off-cluster resources&lt;/li&gt;
&lt;li&gt;Operator waits for managed resources to reach a healthy state&lt;/li&gt;
&lt;li&gt;Operator conveys readiness of application or managed resources to the user leveraging the &lt;code&gt;status&lt;/code&gt; block of the Custom Resource&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; an Operator deploys a database by creating &lt;code&gt;Deployment&lt;/code&gt;, &lt;code&gt;ServiceAccount&lt;/code&gt;, &lt;code&gt;RoleBinding&lt;/code&gt;, &lt;code&gt;ConfigMap&lt;/code&gt;, &lt;code&gt;PersistentVolumeClaim&lt;/code&gt; and &lt;code&gt;Secret&lt;/code&gt; object, initializes an empty database schema and signals readiness of the database to accept queries.&lt;/p&gt;
&lt;h3 id=&#34;configuration-of-the-workload&#34;&gt;Configuration of the workload&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operator provides configuration via the &lt;code&gt;spec&lt;/code&gt; section of the Custom Resource&lt;/li&gt;
&lt;li&gt;Operator reconciles configuration and updates to it with the status of the managed resources&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; an Operator, managing a database, offers increasing the capacity of the database by resizing the underlying &lt;code&gt;PersistentVolumeClaim&lt;/code&gt; based on changes the databases Custom Resource instance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Guiding questions to determine Operator reaching Level 1&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;What installation configuration can be set in the CR?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What additional installation configuration could still be added?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Can you set operand configuration in the CR? If so, what configuration is supported for each operand?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Can you override the operand images through the CR or an environment variable of the Operator deployment?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does the managed application / workload get updated in a non-disruptive fashion when the configuration of the CR is changed?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does the status of the CR reflect that configuration changes are currently applied?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What additional operand configuration could still be added?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do all of the instantiated CRs include a status block? If so, does it provide enough insight to the user about the application state?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do all of your CRs have documentation listing valid values and mandatory fields?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If your operator is packaged for OLM, does its CSV list all images used in the CSV under &lt;code&gt;spec.relatedImages&lt;/code&gt;?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;level-2---seamless-upgrades&#34;&gt;Level 2 - Seamless Upgrades&lt;/h2&gt;
&lt;p&gt;Seamless upgrades mean the upgrade is as easy as possible for the user. You should support seamless upgrades of both your operator and operand, these would normally go hand in hand, an upgrade of the operator would automatically ensure the instantiated resources for each CR are in the new desired state and which would upgrade your operand. Upgrade may also be defined in multiple ways, such as updating the software of the operand - and other internals specific to the application - such as schema migrations. It should be very clear what is upgraded when this takes place, and what is not.&lt;/p&gt;
&lt;h3 id=&#34;upgrade-of-the-managed-workload&#34;&gt;Upgrade of the managed workload&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operand can be upgraded in the process of upgrading the Operator, or&lt;/li&gt;
&lt;li&gt;Operand can be upgraded as part of changing the CR&lt;/li&gt;
&lt;li&gt;Operator understands how to upgrade older versions of the Operand, managed previously by an older version of the Operator&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;upgrade-of-the-operator&#34;&gt;Upgrade of the Operator&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operator can be upgraded seamlessly and can either still manage older versions of the Operand or update them&lt;/li&gt;
&lt;li&gt;Operator conveys inability to manage an unsupported version of the Operand in the &lt;code&gt;status&lt;/code&gt; section of the CR&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; An Operator managing a database can update an existing database from a previous to a newer version without data loss. The Operator might do so as part of a configuration change or as part of an update of the Operator itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Guiding questions to determine Operator reaching Level 2&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Can your Operator upgrade your Operand?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your Operator upgrade your Operand during updates of the Operator?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Can your Operator manage older Operand version versions?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Is the Operand upgrade non disruptive?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If there is downtime during an upgrade, does the Operator convey this in the &lt;code&gt;status&lt;/code&gt; of the CR?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;level-3---full-lifecycle&#34;&gt;Level 3 - Full Lifecycle&lt;/h2&gt;
&lt;p&gt;It should be possible to backup and restore the operand from the operator itself without any additional manual intervention other than triggering these operations. The operand data that should be backed up is any stateful data managed by the operand. You don’t need to backup the CR itself or the k8s resources created by the operator as the operator should return all resources to the same state if the CR is recreated. If your operator does not already setup the operand with other k8s resilient best practices, this should be completed to achieve this capability level. This includes liveness and readiness probes, multiple replicas, rolling deployment strategies, pod disruption budgets, CPU and memory requests and limits.&lt;/p&gt;
&lt;h3 id=&#34;lifecycle-features&#34;&gt;Lifecycle features&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operator provides the ability to create backups of the Operand&lt;/li&gt;
&lt;li&gt;Operator is able to restore a backup of an Operand&lt;/li&gt;
&lt;li&gt;Operator orchestrates complex re-configuration flows on the Operand&lt;/li&gt;
&lt;li&gt;Operator implements fail-over and fail-back of clustered Operands&lt;/li&gt;
&lt;li&gt;Operator supports add/removing members to a clustered Operand&lt;/li&gt;
&lt;li&gt;Operator enables application-aware scaling of the Operand&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; an Operator managing a database provides the ability to create an application consistent backup of the data by flushing the database log and quiescing the write activity to the database files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Guiding questions to determine Operator reaching Level 3&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Does your Operator support backing up the Operand?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your Operator support restoring an Operand from a backup and get it under management again?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your Operator wait for reconfiguration work to be finished and in the expected sequence?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Is your Operator taking cluster quorum into account, if present?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your Operator allow adding/removing read-only slave instances of your Operator?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your operand have a Liveness probe?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your operand have a Readiness probe which will fail if any aspect of the operand is not ready? e.g. if the connection to the database fails.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your operand use a rolling deployment strategy?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your operator create a PodDisruptionBudget resource for your operand pods?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your operand have CPU requests and limits set?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;level-4---deep-insights&#34;&gt;Level 4 - Deep Insights&lt;/h2&gt;
&lt;p&gt;Setup full monitoring and alerting for your operand. All resources such as Prometheus rules (alerts) and Grafana dashboards should be created by the operator when the operand CR is instantiated. The RED method&lt;sup&gt;1&lt;/sup&gt; is a good place to start with knowing what metrics to expose.
Aim to have as few alerts as possible, by alerting on symptoms that are associated with end-user pain rather than trying to catch every possible way that pain could be caused. Alerts should link to relevant consoles and make it easy to figure out which component is at fault
Native k8s objects emit events (“Events” objects) for situations users or administrators should be alerted about. Your operator should do similar for state changes related to your operand. “Custom”, here, means that it should emit events specific to your operator/operand outside of the events already emitted by their deployment methodology.  This, in conjunction with status descriptors for the CR conditions, give much needed visibility into actions taken by your operator/operand. Operators are codified domain-specific knowledge. Your end user should not need this domain-specific knowledge to gain visibility into what’s happening with their resource.
Please, ensure that you look at the Kubernetes API conventions in the &lt;a href=&#34;https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#events&#34;&gt;Events&lt;/a&gt; and &lt;a href=&#34;https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status&#34;&gt;status&lt;/a&gt; sections to know how to properly deal with them.&lt;/p&gt;
&lt;h3 id=&#34;monitoring&#34;&gt;Monitoring&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operator exposing metrics about its health&lt;/li&gt;
&lt;li&gt;Operator exposes health and performance metrics about the Operand&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;alerting-and-events&#34;&gt;Alerting and Events&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operand sends useful alerts&lt;/li&gt;
&lt;li&gt;Custom Resources emit custom events&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; A database Operator continues to parse the logging output of the database software and understands noteworthy log events, e.g. running out of space for database files and produces alerts. The operator also instruments the database and exposes application level, e.g. database queries per second&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Guiding questions to determine Operator reaching Level 4&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Does your Operator expose a health metrics endpoint?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your Operator expose Operand alerts?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do you have Standard Operating Procedures (SOPs) for each alert?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does you operator create critical alerts when the service is down and warning alerts for all other alerts?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your Operator watch the Operand to create alerts?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your Operator emit custom Kubernetes events?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does your Operator expose Operand performance metrics?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; The RED method
The RED Method defines the three key metrics for every service in your architecture.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rate (the number of requests per second)&lt;/li&gt;
&lt;li&gt;Errors (the number of those requests that are failing)&lt;/li&gt;
&lt;li&gt;Duration (the amount of time those requests take)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that by building projects using Operator-SDK or &lt;a href=&#34;https://github.com/kubernetes-sigs/kubebuilder&#34;&gt;Kubebuilder&lt;/a&gt; CLI tools your solution leverages &lt;a href=&#34;https://github.com/kubernetes-sigs/controller-runtime&#34;&gt;controller-runtime&lt;/a&gt; which provides the following &lt;a href=&#34;https://book.kubebuilder.io/reference/metrics-reference.html&#34;&gt;reference&lt;/a&gt; exported by default. For further information, see the &lt;a href=&#34;https://book.kubebuilder.io/reference/metrics.html&#34;&gt;metrics&lt;/a&gt; documentation to understand how to enable monitoring and add custom metrics . Also, you may want to give a look at the &lt;a href=&#34;https://book.kubebuilder.io/plugins/available/grafana-v1-alpha&#34;&gt;(grafana/v1-alpha)&lt;/a&gt; which provides some JSON manifests to create Grafana dashboards using the default metrics exported.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;level-5---auto-pilot&#34;&gt;Level 5 - Auto Pilot&lt;/h2&gt;
&lt;p&gt;The highest capability level aims to significantly reduce/eliminate any remaining manual intervention in managing the operand. The operator should configure the Operand to auto-scale as load picks up. The Operator should understand the application-level performance indicators and determine when it&amp;rsquo;s healthy and performing well. The operator should attempt to automatically fix an unhealthy operand. The operator should tune the operands performance, this could include scheduling on another node the pods are running on or modifying operand configuration.&lt;/p&gt;
&lt;h3 id=&#34;auto-scaling&#34;&gt;Auto-scaling&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operator scales the Operand up under increased load based on Operand metric&lt;/li&gt;
&lt;li&gt;Operator scales the Operand down below a certain load based on Operand metric&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;auto-healing&#34;&gt;Auto-Healing&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operator can automatically heal unhealthy Operands based on Operand metrics/alerts/logs&lt;/li&gt;
&lt;li&gt;Operator can prevent the Operand from transitioning into an unhealthy state based on Operand metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;auto-tuning&#34;&gt;Auto-tuning&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operator is able to automatically tune the Operand to a certain workload pattern&lt;/li&gt;
&lt;li&gt;Operator dynamically shifts workloads onto best suited nodes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;abnormality-detection&#34;&gt;Abnormality detection&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Operator determines deviations from a standard performance profile&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; A database operator monitors the query load of the database and automatically scales additional read-only slave replicas up and down. The operator also detects subpar index performance and automatically rebuilds the index in times of reduced load. Further, the operator understands the normal performance profile of the database and creates alerts on excessive amount of slow queries. In the event of slow queries and high disk latency the Operator automatically transitions the database files to another &lt;code&gt;PersistentVolume&lt;/code&gt; of a higher performance class.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Guiding questions to determine Operator reaching Level 5&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Can your operator read metrics such as requests per second or other relevant metrics and auto-scale horizontally or vertically, i.e., increasing the number of pods or  resources used by pods?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Based on question number 1 can it scale down or decrease the number of pods or the total amount of resources used by pods?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Based on the deep insights built upon level 4 capabilities can your operator determine when an operand became unhealthy and take action such as redeploying, changing configurations, restoring backups etc.?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Again considering that with level 4 deep insights the operator has information to learn the performance baseline dynamically and can learn the best configurations for peak performance can it adjust the configurations to do so?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Can it move the workloads to better nodes, storage or networks to do so?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Can it detect and alert when anything is working below the learned performance baseline that can’t be corrected automatically?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

      </description>
    </item>
    
  </channel>
</rss>
