OLM Integration Package Manifests Quickstart

This guide assumes you have followed the introduction and Setup section of the bundle quickstart, and have added the packagemanifests target to your Makefile as described here.

Important: this guide assumes your project was scaffolded with operator-sdk init --project-version=3-alpha. These features are unavailable to projects of version 2 or less; this information can be found by inspecting your PROJECT file’s version value.

Creating package manifests

We will now create a package manifests format by running make packagemanifests in the root of the memcached-operator project:

  1. $ make packagemanifests
  2. /home/user/go/bin/controller-gen "crd:trivialVersions=true" rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
  3. operator-sdk generate kustomize manifests -q
  4. kustomize build config/manifests | operator-sdk generate packagemanifests -q --version 0.0.1

A versioned manifests directory packagemanifests/0.0.1 containing a CSV and all CRDs in config/crds and a package manifest YAML file packagemanifests/<project-name>.package.yaml have been created in the Operator project.

Deploying an Operator with OLM

At this point in development we’ve generated all files necessary to build a memcached-operator registry. Now we’re ready to test the Operator with OLM.

Testing package manifests

operator-sdk run packagemanifests will create an Operator registry from manifests and metadata in the memcached-operator project, and inform OLM that memcached-operator v0.0.1 is ready to be deployed. This process effectively replicates production deployment in a constrained manner to make sure OLM can deploy our Operator successfully before attempting real production deployment.

run packagemanifests performs some optionally configurable setup under the hood, but for most use cases the following invocation is all we need:

  1. $ operator-sdk run packagemanifests --version 0.0.1
  2. INFO[0000] Running operator from directory packagemanifests
  3. INFO[0000] Creating memcached-operator registry
  4. INFO[0000] Creating ConfigMap "olm/memcached-operator-registry-manifests-package"
  5. INFO[0000] Creating ConfigMap "olm/memcached-operator-registry-manifests-0-0-1"
  6. INFO[0000] Creating Deployment "olm/memcached-operator-registry-server"
  7. INFO[0000] Creating Service "olm/memcached-operator-registry-server"
  8. INFO[0000] Waiting for Deployment "olm/memcached-operator-registry-server" rollout to complete
  9. INFO[0000] Waiting for Deployment "olm/memcached-operator-registry-server" to rollout: 0 of 1 updated replicas are available
  10. INFO[0066] Deployment "olm/memcached-operator-registry-server" successfully rolled out
  11. INFO[0066] Creating resources
  12. INFO[0066] Creating CatalogSource "default/memcached-operator-ocs"
  13. INFO[0066] Creating Subscription "default/memcached-operator-v0-0-1-sub"
  14. INFO[0066] Creating OperatorGroup "default/operator-sdk-og"
  15. INFO[0066] Waiting for ClusterServiceVersion "default/memcached-operator.v0.0.1" to reach 'Succeeded' phase
  16. INFO[0066] Waiting for ClusterServiceVersion "default/memcached-operator.v0.0.1" to appear
  17. INFO[0073] Found ClusterServiceVersion "default/memcached-operator.v0.0.1" phase: Pending
  18. INFO[0077] Found ClusterServiceVersion "default/memcached-operator.v0.0.1" phase: InstallReady
  19. INFO[0078] Found ClusterServiceVersion "default/memcached-operator.v0.0.1" phase: Installing
  20. INFO[0036] Found ClusterServiceVersion "default/memcached-operator.v0.0.1" phase: Succeeded
  21. INFO[0037] Successfully installed "memcached-operator.v0.0.1" on OLM version "0.15.1"
  22. NAME NAMESPACE KIND STATUS
  23. memcacheds.cache.example.com default CustomResourceDefinition Installed
  24. memcached-operator.v0.0.1 default ClusterServiceVersion Installed

As long as both the ClusterServiceVersion and all CustomResourceDefinition‘s return an Installed status, the memcached-operator has been deployed successfully.

Now that we’re done testing the memcached-operator, we should probably clean up the Operator’s resources. operator-sdk cleanup will do this for you:

  1. $ operator-sdk cleanup memcached-operator
  2. INFO[0000] subscription "memcached-operator-v0-0-1-sub" deleted
  3. INFO[0000] customresourcedefinition "memcacheds.cache.example.com" deleted
  4. INFO[0000] clusterserviceversion "memcached-operator.v0.0.1" deleted
  5. INFO[0000] clusterrole "memcached-operator-metrics-reader" deleted
  6. INFO[0000] serviceaccount "default" deleted
  7. INFO[0000] role "memcached-operator.v0.0.1-jhjk7" deleted
  8. INFO[0000] rolebinding "memcached-operator.v0.0.1-jhjk7-default-mxv6m" deleted
  9. INFO[0000] catalogsource "memcached-operator-ocs" deleted
  10. INFO[0000] operatorgroup "operator-sdk-og" deleted
  11. INFO[0001] operator "memcached-operator" uninstalled

Last modified August 7, 2020: internal/plugins: scaffold a vanilla `go.kubebuilder.io/v2` project when `—project-version=2` (#3697) (ccd621b0)