A ClusterServiceVersion (CSV) represents a particular version a running operator on a cluster. It includes metadata such as name, description, version, repository link, labels, icon, etc. It declares
required CRDs, cluster requirements, and install strategy that tells OLM how to create required resources and set up the operator as a deployment.
OLM requires you to provide metadata about your operator in order to ensure that it can be kept running safely on a cluster, and to provide information about how updates should be applied as you publish new versions of your operator.
This is very similar to packaging software for a traditional operating system - think of the packaging step for OLM as the stage at which you make your
Writing your Operator Manifests
OLM uses an api called
ClusterServiceVersion (CSV) to describe a single instance of a version of an operator. This is the main entrypoint for packaging an operator for OLM.
There are two important ways to think about the CSV:
- Like an
deb, it collects metadata about the operator that is required to install it onto the cluster.
- Like a
Deploymentthat can stamp out
Pods from a template, the
ClusterServiceVersiondescribes a template for the operator
Deploymentand can stamp them out.
This is all in service of ensuring that when a user installs an operator from OLM, they can understand what changes are happening to the cluster, and OLM can ensure that installing the operator is a safe operation.
apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: annotations: name: memcached-operator.v0.10.0 spec: # metadata description: This is an operator for memcached. displayName: Memcached Operator keywords: - memcached - app maintainers: - email: firstname.lastname@example.org name: Some Corp maturity: alpha provider: name: Example url: www.example.com version: 0.10.0 minKubeVersion: 1.16.0 # operator scope installModes: - supported: true type: OwnNamespace - supported: true type: SingleNamespace - supported: false type: MultiNamespace - supported: true type: AllNamespaces # installation install: # strategy indicates what type of deployment artifacts are used strategy: deployment # spec for the deployment strategy is a list of deployment specs and required permissions - similar to a pod template used in a deployment spec: permissions: - serviceAccountName: memcached-operator rules: - apiGroups: - "" resources: - pods verbs: - '*' # the rest of the rules # permissions required at the cluster scope clusterPermissions: - serviceAccountName: memcached-operator rules: - apiGroups: - "" resources: - serviceaccounts verbs: - '*' # the rest of the rules deployments: - name: memcached-operator spec: replicas: 1 # the rest of a deployment spec # apis provided by the operator customresourcedefinitions: owned: # a list of CRDs that this operator owns # name is the metadata.name of the CRD (which is of the form <plural>.<group>) - name: memcacheds.cache.example.com # version is the spec.versions.name value defined in the CRD version: v1alpha1 # kind is the CamelCased singular value defined in spec.names.kind of the CRD. kind: Memcached required: # a list of CRDs that this operator requires # see field descriptions above - name: others.example.com version: v1alpha1 kind: Other