h2. POC steps
* Use operator-sdk to do it.
{code:java} operator-sdk olm-catalog gen-csv --csv-version 0.0.1 --csv-config memcached-operator.0.0.1.clusterserviceversion.yaml {code}
* Update the file created regards the missing information and also its details.
{code:java} # This file defines the ClusterServiceVersion (CSV) to tell the catalog how to display, create and # manage the application as a whole. If changes are made to the CRD for this application kind, # make sure to replace those references below as well. apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: annotations: capabilities: Basic Install name: memcachedoperator memcached-operator .v0.0.1 namespace: memcached-operator spec: install apiservicedefinitions : {} strategy customresourcedefinitions : deployment spec owned : permissions - kind : Memcached - serviceAccountName name : memcached-operator memcacheds.cache.example.com rules version : v1alpha1 - apiGroups description : Operator Memcached Desc - "*" displayName: Memcached Operator resources description : Operator Camila description - "*" displayName: Memcached Operator verbs install : - "*" spec: deployments: - name: memcached- app- operator spec: replicas: 1 selector: matchLabels: app name : memcached- app- operator strategy: {} template: metadata: labels: app name : memcached- app- operator spec: containers: - name command : memcached image: cmacedo/ - memcached-operator :v0.0.1 command env : - /usr/local/bin/memcached-operator name: WATCH_NAMESPACE ports valueFrom : fieldRef: fieldPath: metadata.namespace - containerPort name : 8080 POD_NAME protocol valueFrom : TCP imagePullPolicy fieldRef : Always restartPolicy fieldPath : Always metadata.name terminationGracePeriodSeconds - name : 5 OPERATOR_NAME serviceAccountName value : memcached-operator serviceAccount image : cmacedo/ memcached-operator customresourcedefinitions : v0.0.1 owned imagePullPolicy : Always name: memcached - description operator resources : Represents a cluster of Memcached apps {} displayName serviceAccountName : Memcached App memcached-operator kind permissions : Memcached name - rules : memcacheds.cache.example.com version - apiGroups : v1alpha1 - "" resources: - kind: Deployment pods version: v1beta2 - services - kind: ReplicaSet endpoints version: v1beta2 - persistentvolumeclaims - kind events - configmaps - secrets verbs : Pod version - '*' - apiGroups : v1 specDescriptors - "" resources : - description namespaces verbs : The desired number of member Pods for the deployment. displayName - get - apiGroups : Size path - apps resources : size x - descriptors deployments - daemonsets - replicasets - statefulsets verbs : - ' urn:alm:descriptor:com.tectonic.ui:podCount * ' statusDescriptors - apiGroups : - description: The current status of the application monitoring . coreos.com displayName resources : Status path - servicemonitors verbs : phase x - descriptors: get - 'urn:alm:descriptor:io.kubernetes.phase' create - description apiGroups : Explanation for the current status of the application. displayName - apps resourceNames : Status Details path - memcached-operator resources : reason x - descriptors deployments/finalizers verbs : - 'urn update - apiGroups : alm:descriptor:io - cache . kubernetes example . phase com resources : reason - ' *' keywords verbs : - memcached '*' serviceAccountName: memcached - app operator strategy: deployment installModes: - supported: true type: OwnNamespace - supported: true type: SingleNamespace - supported: true false type: MultiNamespace - supported: true type: AllNamespaces displayName maturity : Memcached Application alpha provider: name: Example Camila, Inc url: www.example.com maturity: alpha version: 0.0.1 keywords: - memcached - app maintainers: - email: corp@example.com name: Some Corp description: Main enterprise application providing business critical features with high availabilty and no manual intervention. labels: alm-owner-enterprise-app: memcached- app- operator alm-status-descriptors: memcached- app- operator.v0.0.1 {code}
* Create the namespace memcached-operator (oc new-project memcached-operator )
* Add ClusterServiceVersion
It will add the operator in the Developer Catalogue
{code:java} $ kubectl apply -f memcachedoperator.0.0.1.csv.yaml {code}
* Add CRD - ( Customer Resource Definition) It will add the type of the operator in the cluster/namespace
{code:java} kubectl create -f deploy/crds/cache_v1alpha1_memcached_crd.yaml {code}
* Add the RBAC rules created for the operator
{code:java} $ kubectl create -f deploy/service_account.yaml $ kubectl create -f deploy/role.yaml $ kubectl create -f deploy/role_binding.yaml {code}
* Create the following resources and apply them.
{code:java}
apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: memcached-operator namespace: memcached-operator spec: displayName: Memcached Operator image: "" publisher: community-operators sourceType: grpc {code}
{code:java} apiVersion: operators.coreos.com/v1alpha2 kind: OperatorGroup metadata: name: memcached-operator namespace: memcached-operator spec: serviceaccount: memcached-operator targetNamespaces: - memcached-operator {code}
{code:java} apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: memcached-operator namespace: memcached-operator spec: name: memcached-operator source: memcached-operator sourceNamespace: memcached-operator startingCSV: memcached-operator.0.0.1 installPlanApproval: Automatic channel: alpha {code} |
|