From 7766488da2bc47ed4629062960df31b346086889 Mon Sep 17 00:00:00 2001 From: Christopher Bradford Date: Fri, 8 May 2020 17:48:45 -0400 Subject: [PATCH] Initial attempts at packaging for OperatorHub / OLM --- PACKAGING.md | 55 +++ operator/.osdk-scorecard.yaml | 13 + ...operator.v1.0.0.clusterserviceversion.yaml | 463 ++++++++++++++++++ .../cassandradatacenters.v1beta1.crd.yaml | 322 ++++++++++++ ...operator.v1.1.0.clusterserviceversion.yaml | 420 ++++++++++++++++ .../cassandradatacenters.v1beta1.crd.yaml | 328 +++++++++++++ .../cass-operator/cass-operator.package.yaml | 5 + 7 files changed, 1606 insertions(+) create mode 100644 PACKAGING.md create mode 100644 operator/.osdk-scorecard.yaml create mode 100644 operator/deploy/olm-catalog/cass-operator/1.0.0/cass-operator.v1.0.0.clusterserviceversion.yaml create mode 100644 operator/deploy/olm-catalog/cass-operator/1.0.0/cassandradatacenters.v1beta1.crd.yaml create mode 100644 operator/deploy/olm-catalog/cass-operator/1.1.0/cass-operator.v1.1.0.clusterserviceversion.yaml create mode 100644 operator/deploy/olm-catalog/cass-operator/1.1.0/cassandradatacenters.v1beta1.crd.yaml create mode 100644 operator/deploy/olm-catalog/cass-operator/cass-operator.package.yaml diff --git a/PACKAGING.md b/PACKAGING.md new file mode 100644 index 000000000..c74b41308 --- /dev/null +++ b/PACKAGING.md @@ -0,0 +1,55 @@ +# Packaging for Operator Hub + +Shamelessly pulled from the [documentation](https://sdk.operatorframework.io/docs/olm-integration/generating-a-csv/). + +## Known Issues + +Currently the OperatorHub.io website generates a slightly different version of the `spec.customresourcedefinitions.owned[]` field compared to `operator-sdk` (v0.17.0). The one generated by the SDK is missing some information. + +You should to use the [Package Builder](https://operatorhub.io/packages) to assist in generating complete files. + +## Create CSV (no previous version) + +Generate Cluster Service Version (CSV) + +```bash +operator-sdk generate csv --make-manifests=false --csv-version a.b.c +``` + +**Example:** + +```bash +operator-sdk generate csv --operator-name cass-operator --csv-version 1.0.0 --make-manifests=false +``` + +Update files under `operator/deploy/olm-catalog/cass-operator/a.b.c` + +## Update CSV + +_Useful when adding a CRD to a project_ + +Run the generate command again and new CRDs will be added to the CSV + +```bash +operator-sdk generate csv --make-manifests=false --csv-version a.b.c +``` + +**Example:** + +```bash +operator-sdk generate csv --operator-name cass-operator --csv-version 1.0.0 --make-manifests=false +``` + +## Upgrade CSV + +Run the generate command and specify the old version to base on + +```bash +operator-sdk generate csv --make-manifests=false --csv-version d.e.f --from-version a.b.c +``` + +**Example:** + +```bash +operator-sdk generate csv --operator-name cass-operator --csv-version 1.1.0 --make-manifests=false --from-version 1.0.0 +``` diff --git a/operator/.osdk-scorecard.yaml b/operator/.osdk-scorecard.yaml new file mode 100644 index 000000000..0da2e2687 --- /dev/null +++ b/operator/.osdk-scorecard.yaml @@ -0,0 +1,13 @@ +scorecard: + # Setting a global scorecard option + output: json + plugins: + # `basic` tests configured to test 2 CRs + - basic: + cr-manifest: + - "example-cassdc-yaml/cassandra-3.11.6/example-cassdc-minimal.yaml" + # `olm` tests configured to test 2 CRs + - olm: + cr-manifest: + - "example-cassdc-yaml/cassandra-3.11.6/example-cassdc-minimal.yaml" + csv-path: "deploy/olm-catalog/cass-operator/1.1.0/cass-operator.v1.1.0.clusterserviceversion.yaml" \ No newline at end of file diff --git a/operator/deploy/olm-catalog/cass-operator/1.0.0/cass-operator.v1.0.0.clusterserviceversion.yaml b/operator/deploy/olm-catalog/cass-operator/1.0.0/cass-operator.v1.0.0.clusterserviceversion.yaml new file mode 100644 index 000000000..056d55b49 --- /dev/null +++ b/operator/deploy/olm-catalog/cass-operator/1.0.0/cass-operator.v1.0.0.clusterserviceversion.yaml @@ -0,0 +1,463 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: >- + [{"apiVersion":"cassandra.datastax.com/v1beta1","kind":"CassandraDatacenter","metadata":{"name":"dc1"},"spec":{"clusterName":"cluster1","size":6,"racks":[{"name":"rack1","zone":"us-central1-a"},{"name":"rack2","zone":"us-central1-b"},{"name":"rack3","zone":"us-central1-c"}],"resources":{"requests":{"memory":"24Gi","cpu":"6000m"},"limits":{"memory":"24Gi","cpu":"6000m"}},"storageConfig":{"cassandraDataVolumeClaimSpec":{"storageClassName":"server-storage","accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"100Gi"}}}},"allowMultipleNodesPerWorker":false,"stopped":false,"rollingRestartRequested":false,"canaryUpgrade":false,"serverType":"cassandra","serverVersion":"3.11.6","serverImage":"","configBuilderImage":"","superuserSecretName":"","managementApiAuth":{"insecure":{}},"serviceAccount":"default","replaceNodes":[],"config":{"cassandra-yaml":{"num_tokens":8,"file_cache_size_in_mb":1000,"authenticator":"org.apache.cassandra.auth.PasswordAuthenticator","authorizer":"org.apache.cassandra.auth.CassandraAuthorizer","role_manager":"org.apache.cassandra.auth.CassandraRoleManager"},"jvm-options":{"initial_heap_size":"14G","max_heap_size":"14G","additional-jvm-opts":["-Dcassandra.system_distributed_replication_dc_names=dc1","-Dcassandra.system_distributed_replication_per_dc=3"]}}}}] + categories: Database + description: > + Simple provisioning, turn-key operations, and automated remediation of + Apache Cassandra clusters + containerImage: datastax/cass-operator + support: '' + capabilities: Auto Pilot + repository: 'https://github.com/datastax/cass-operator' + createdAt: "" + certified: "false" + name: cass-operator.v1.0.0 + namespace: placeholder +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - name: cassandradatacenters.cassandra.datastax.com + displayName: CassandraDatacenter + kind: CassandraDatacenter + version: v1beta1 + description: Cassandra Datacenter + resources: + - version: v1 + kind: Deployment + - version: v1 + kind: Service + - version: v1 + kind: ReplicaSet + - version: v1 + kind: Pod + - version: v1 + kind: Secret + - version: v1 + kind: ConfigMap + specDescriptors: + - path: allowMultipleNodesPerWorker + description: Allow Multiple Nodes Per Worker + displayName: Allow Multiple Nodes Per Worker + x-descriptors: [] + - path: canaryUpgrade + description: Canary Upgrade + displayName: Canary Upgrade + x-descriptors: [] + - path: clusterName + description: Cluster Name + displayName: Cluster Name + x-descriptors: [] + - path: configBuilderImage + description: Config Builder Image + displayName: Config Builder Image + x-descriptors: [] + - path: managementApiAuth + description: Management Api Auth + displayName: Management Api Auth + x-descriptors: [] + - path: racks + description: Racks + displayName: Racks + x-descriptors: [] + - path: replaceNodes + description: Replace Nodes + displayName: Replace Nodes + x-descriptors: [] + - path: resources + description: Resources + displayName: Resources + x-descriptors: [] + - path: rollingRestartRequested + description: Rolling Restart Requested + displayName: Rolling Restart Requested + x-descriptors: [] + - path: serverImage + description: Server Image + displayName: Server Image + x-descriptors: [] + - path: serverType + description: Server Type + displayName: Server Type + x-descriptors: [] + - path: serverVersion + description: Server Version + displayName: Server Version + x-descriptors: [] + - path: serviceAccount + description: Service Account + displayName: Service Account + x-descriptors: [] + - path: size + description: Size + displayName: Size + x-descriptors: [] + - path: stopped + description: Stopped + displayName: Stopped + x-descriptors: [] + - path: storageConfig + description: Storage Config + displayName: Storage Config + x-descriptors: [] + - path: superuserSecretName + description: Superuser Secret Name + displayName: Superuser Secret Name + x-descriptors: [] + statusDescriptors: + - path: cassandraOperatorProgress + description: Cassandra Operator Progress + displayName: Cassandra Operator Progress + x-descriptors: [] + - path: lastRollingRestart + description: Last Rolling Restart + displayName: Last Rolling Restart + x-descriptors: [] + - path: lastServerNodeStarted + description: Last Server Node Started + displayName: Last Server Node Started + x-descriptors: [] + - path: nodeReplacements + description: Node Replacements + displayName: Node Replacements + x-descriptors: [] + - path: nodeStatuses + description: Node Statuses + displayName: Node Statuses + x-descriptors: [] + - path: superUserUpserted + description: Super User Upserted + displayName: Super User Upserted + x-descriptors: [] + required: [] + description: > + ## Apache Cassandra + + + The Apache Cassandra database is the right choice when you need scalability + and high availability without compromising performance. Linear scalability + and proven fault-tolerance on commodity hardware or cloud infrastructure + make it the perfect platform for mission-critical data. Cassandra's support + for replicating across multiple datacenters is best-in-class, providing + lower latency for your users and the peace of mind of knowing that you can + survive regional outages. + + + ## DataStax Enterprise + + The most advanced distribution of Apache Cassandraâ„¢ on the market, with the + enterprise functionality needed for serious production systems and backed up + and supported by the best distributed-experts in the world. It's one + platform for all types of applications anywhere, any cloud, any model: + key-value, graph, tabular, JSON. + + + DataStax Enterprise is a fully integrated and optimized database, with + graph, analytics, and search included, all with a unified security model. + Simply put, it's the only database capable of meeting today's demanding + requirements + + + ## Operator Details + + `cass-operator` is designed as a modular operator for Apache Cassandra and + derived distributions. Apache Cassandra is a distributed database + consisting of multiple nodes working in concert to store data and process + queries along a number of fault domains. `cass-operator` has the + deployment of a Cassandra cluster around the logical domain of a datacenter + with the `CassandraDatacenter` custom resource. Upon submission of one of + these resources it handles provisioning the underlying stateful sets + (analogous to C* logical racks), services, and configuration. Additionally + through monitoring pod state via Kubernetes callbacks it handles day to day + operations such as restarting failed processes, scaling clusters up, and + deploying configuration changes in a rolling, non-disruptive, fashion. + + This operator is designed to be `Namespace` scoped. A single Kubernetes + cluster may be running multiple instances of this operator, in separate + namespaces, to support a number of C* clusters and environments. + Configuration is simple with the usage of YAML based overrides in the Custom + Resource paired with an `init` container. In C* clusters ordering and timing + of certain operations are important to keep the system evenly distributed. + `cass-operator` takes advantage of a sidecar process within the main + container to handle the orchestration of starting our main C* process. + + + ## Pre-requisites + + + Currently there are no pre-requisites to install the operator. + displayName: DataStax Kubernetes Operator for Apache Cassandra + icon: + - base64data: >- + PHN2ZyBpZD0iZjM5NDE5ODctOTk4Ni00ODliLTlkYmQtYWY3ZTMwMjc1NmFhIiBkYXRhLW5hbWU9 + IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAw + IDgwIDgwIj4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgLmIyYzA3Njg0LTk4YmQtNDY1My05 + NWQ5LTRiMDMyMTBmZWIwNSB7CiAgICAgICAgZmlsbDogIzAwNTVhYjsKICAgICAgfQoKICAgICAg + LmZlMmUyOGVhLTczNzctNGUwNy05NDdmLWZlZTIxZDQzNjQwNCB7CiAgICAgICAgZmlsbDogIzFm + MjQzODsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2RlZnM+CiAgPGc+CiAgICA8cGF0aCBjbGFz + cz0iYjJjMDc2ODQtOThiZC00NjUzLTk1ZDktNGIwMzIxMGZlYjA1IiBkPSJNNTIuNTgsNDUuNTFh + Ni4zNSw2LjM1LDAsMSwwLDYuMTktNi40NkE2LjMzLDYuMzMsMCwwLDAsNTIuNTgsNDUuNTFaIi8+ + CiAgICA8cGF0aCBjbGFzcz0iYjJjMDc2ODQtOThiZC00NjUzLTk1ZDktNGIwMzIxMGZlYjA1IiBk + PSJNMjYuNjQsMTUuMmE2LjM1LDYuMzUsMCwxLDAsNi4xOS02LjQ2QTYuMzMsNi4zMywwLDAsMCwy + Ni42NCwxNS4yWiIvPgogICAgPHBhdGggY2xhc3M9ImIyYzA3Njg0LTk4YmQtNDY1My05NWQ5LTRi + MDMyMTBmZWIwNSIgZD0iTTExLjI5LDEwLjc0YTQuOTIsNC45MiwwLDEsMCw0LjgtNUE0LjksNC45 + LDAsMCwwLDExLjI5LDEwLjc0WiIvPgogICAgPHBhdGggY2xhc3M9ImIyYzA3Njg0LTk4YmQtNDY1 + My05NWQ5LTRiMDMyMTBmZWIwNSIgZD0iTTUyLjQ4LDYxLjU4QTQuNSw0LjUsMCwxLDAsNTYuODcs + NTcsNC40OCw0LjQ4LDAsMCwwLDUyLjQ4LDYxLjU4WiIvPgogICAgPHBhdGggY2xhc3M9ImIyYzA3 + Njg0LTk4YmQtNDY1My05NWQ5LTRiMDMyMTBmZWIwNSIgZD0iTTQyLjU2LDY3Ljg2YTIuNjUsMi42 + NSwwLDEsMCwyLjU4LTIuN0EyLjY0LDIuNjQsMCwwLDAsNDIuNTYsNjcuODZaIi8+CiAgICA8cGF0 + aCBjbGFzcz0iYjJjMDc2ODQtOThiZC00NjUzLTk1ZDktNGIwMzIxMGZlYjA1IiBkPSJNMi43Mywx + OC4xYTIuOTIsMi45MiwwLDEsMCwyLjg1LTNBMi45LDIuOSwwLDAsMCwyLjczLDE4LjFaIi8+CiAg + ICA8cGF0aCBjbGFzcz0iYjJjMDc2ODQtOThiZC00NjUzLTk1ZDktNGIwMzIxMGZlYjA1IiBkPSJN + Mi4zOSwyOS41M2EyLjI5LDIuMjksMCwxLDAsMi4yMy0yLjMyQTIuMjksMi4yOSwwLDAsMCwyLjM5 + LDI5LjUzWiIvPgogICAgPHBhdGggY2xhc3M9ImIyYzA3Njg0LTk4YmQtNDY1My05NWQ5LTRiMDMy + MTBmZWIwNSIgZD0iTTQxLDI4LjIzYTcuOTQsNy45NCwwLDEsMCw3Ljc0LTguMDhBNy45Miw3Ljky + LDAsMCwwLDQxLDI4LjIzWiIvPgogIDwvZz4KICA8cGF0aCBjbGFzcz0iZmUyZTI4ZWEtNzM3Ny00 + ZTA3LTk0N2YtZmVlMjFkNDM2NDA0IiBkPSJNMzUuNzEsNjAuNDgsMjYuNDQsNTJsOS4yMi05LjIz + YTIuMzYsMi4zNiwwLDAsMCwuNDMtMi41NiwyLjM4LDIuMzgsMCwwLDAtMy44OC0uNzJsLTkuMTMs + OS4xNi05LjMxLTkuM2EyLjM3LDIuMzcsMCwwLDAtMS42OC0uNywyLjQyLDIuNDIsMCwwLDAtMi4y + LDEuNDcsMi4zMiwyLjMyLDAsMCwwLC41MywyLjU3TDE5LjcyLDUybC05LjE1LDkuMTVBMi4zNCwy + LjM0LDAsMCwwLDEwLDYzLjc3YTIuNDIsMi40MiwwLDAsMCwyLjE5LDEuNDYsMi4zOSwyLjM5LDAs + MCwwLDEuNjgtLjdsOS4xOS05LjE5LDkuMjYsOC41MWEyLjM4LDIuMzgsMCwwLDAsMS42OC43MSwy + LjM4LDIuMzgsMCwwLDAsMS42Ny00LjA4WiIvPgogIDxwYXRoIGNsYXNzPSJmZTJlMjhlYS03Mzc3 + LTRlMDctOTQ3Zi1mZWUyMWQ0MzY0MDQiIGQ9Ik02Ni4xMyw2NmE2LDYsMCwwLDEsMS4yOS0xLjg3 + LDYuMTQsNi4xNCwwLDAsMSwxLjkxLTEuMjUsNiw2LDAsMCwxLDIuMzItLjQ2LDYsNiwwLDAsMSw0 + LjE5LDEuNzFBNiw2LDAsMCwxLDc3LjEzLDY2YTUuNyw1LjcsMCwwLDEsLjQ4LDIuMzQsNS44NSw1 + Ljg1LDAsMCwxLS40OCwyLjM4LDYuMjIsNi4yMiwwLDAsMS0xLjI5LDEuODlBNS45Myw1LjkzLDAs + MCwxLDc0LDczLjgyYTYuMTEsNi4xMSwwLDAsMS0yLjMuNDQsNi4yMiw2LjIyLDAsMCwxLTIuMzIt + LjQ0LDYuMTQsNi4xNCwwLDAsMS0xLjkxLTEuMjUsNi4yMiw2LjIyLDAsMCwxLTEuMjktMS44OSw1 + Ljg1LDUuODUsMCwwLDEtLjQ4LTIuMzhBNS43LDUuNywwLDAsMSw2Ni4xMyw2NlptMSw0LjM3YTQu + ODMsNC44MywwLDAsMCwxLDEuNjFBNC41Nyw0LjU3LDAsMCwwLDY5LjcsNzNhNC44NSw0Ljg1LDAs + MCwwLDIsLjM5QTQuNzQsNC43NCwwLDAsMCw3My41Nyw3M2E0LjYzLDQuNjMsMCwwLDAsMS41NS0x + LjA3LDUsNSwwLDAsMCwxLTEuNjEsNS4zOSw1LjM5LDAsMCwwLC4zOC0yLDUuMjYsNS4yNiwwLDAs + MC0uMzgtMiw0Ljc3LDQuNzcsMCwwLDAtMi41OC0yLjY2LDQuNzQsNC43NCwwLDAsMC0xLjkyLS4z + OSw0Ljg4LDQuODgsMCwwLDAtMy41MSwxLjQ1LDQuNzgsNC43OCwwLDAsMC0xLDEuNiw1LjI2LDUu + MjYsMCwwLDAtLjM4LDJBNS4zOSw1LjM5LDAsMCwwLDY3LjExLDcwLjMzWk03Miw2NC44NWEyLjg1 + LDIuODUsMCwwLDEsMS44NC40OSwxLjgzLDEuODMsMCwwLDEsLjU5LDEuNSwxLjY4LDEuNjgsMCww + LDEtLjUyLDEuMzcsMi4zNywyLjM3LDAsMCwxLTEuMy41MmwyLDMuMDdINzMuNDRsLTEuODktM0g3 + MC40MXYzSDY5LjMydi03Wm0tLjQ4LDMuMDhjLjI1LDAsLjQ4LDAsLjcsMGEyLjA2LDIuMDYsMCww + LDAsLjU4LS4xMy45MS45MSwwLDAsMCwuNC0uMzUsMS4xNywxLjE3LDAsMCwwLC4xNS0uNjQsMSwx + LDAsMCwwLS4xMy0uNTYuODcuODcsMCwwLDAtLjM1LS4zMSwxLjU1LDEuNTUsMCwwLDAtLjUtLjE2 + LDQuOSw0LjksMCwwLDAtLjU0LDBINzAuNDF2Mi4yMVoiLz4KPC9zdmc+Cg== + mediatype: image/svg+xml + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - delete + - create + - get + - list + - watch + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/kube-apiserver-client-kubelet + resources: + - signers + verbs: + - approve + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kube-apiserver-client-kubelet + - kubernetes.io/kubelet-serving + - kubernetes.io/legacy-unknown + resources: + - signers + verbs: + - sign + - apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + verbs: + - create + - apiGroups: + - "" + resources: + - services + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create + - apiGroups: + - "" + - events.k8s.io + resources: + - events + verbs: + - create + - patch + - update + serviceAccountName: cass-operator-cluster-role + deployments: + - name: cass-operator + spec: + replicas: 1 + selector: + matchLabels: + name: cass-operator + strategy: {} + template: + metadata: + labels: + name: cass-operator + spec: + containers: + - env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.annotations['olm.targetNamespaces'] + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: OPERATOR_NAME + value: cass-operator + - name: SKIP_VALIDATING_WEBHOOK + value: "TRUE" + image: datastax/cass-operator:1.0.0 + imagePullPolicy: IfNotPresent + livenessProbe: + exec: + command: + - pgrep + - .*operator + failureThreshold: 3 + initialDelaySeconds: 5 + periodSeconds: 5 + timeoutSeconds: 5 + name: cass-operator + readinessProbe: + exec: + command: + - stat + - /tmp/operator-sdk-ready + failureThreshold: 1 + initialDelaySeconds: 5 + periodSeconds: 5 + timeoutSeconds: 5 + resources: {} + serviceAccountName: cass-operator + permissions: + - rules: + - apiGroups: + - "" + resources: + - pods + - services + - endpoints + - persistentvolumeclaims + - events + - configmaps + - secrets + verbs: + - '*' + - apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - apiGroups: + - apps + resources: + - deployments + - daemonsets + - replicasets + - statefulsets + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + verbs: + - get + - create + - apiGroups: + - apps + resourceNames: + - cass-operator + resources: + - deployments/finalizers + verbs: + - update + - apiGroups: + - datastax.com + resources: + - '*' + verbs: + - '*' + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - '*' + - apiGroups: + - cassandra.datastax.com + resources: + - '*' + verbs: + - '*' + serviceAccountName: cass-operator + strategy: deployment + installModes: + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: false + type: AllNamespaces + keywords: + - DataStax Enterprise + - Apache Cassandra + - DSE + - C* + - Cassandra + links: + - name: DataStax + url: https://datastax.com + - name: Operator GitHub Repo + url: https://github.com/datastax/cass-operator + - name: Config Builder GitHub Repo + url: https://github.com/datastax/cass-config-builder + - name: Documentation [1] + url: https://github.com/datastax/cass-operator/tree/master/docs/user + - name: Documentation [2] + url: https://docs.datastax.com/en/cass-operator/doc/cass-operator/cassOperatorTOC.html + maintainers: + - name: Christopher Bradford + email: christopher.bradford@datastax.com + - name: Jim Dickinson + email: jim.dickinson@datastax.com + maturity: stable + minKubeVersion: 1.13.0 + provider: + name: DataStax + version: 1.0.0 diff --git a/operator/deploy/olm-catalog/cass-operator/1.0.0/cassandradatacenters.v1beta1.crd.yaml b/operator/deploy/olm-catalog/cass-operator/1.0.0/cassandradatacenters.v1beta1.crd.yaml new file mode 100644 index 000000000..c79e63831 --- /dev/null +++ b/operator/deploy/olm-catalog/cass-operator/1.0.0/cassandradatacenters.v1beta1.crd.yaml @@ -0,0 +1,322 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: cassandradatacenters.cassandra.datastax.com +spec: + group: cassandra.datastax.com + names: + kind: CassandraDatacenter + listKind: CassandraDatacenterList + plural: cassandradatacenters + shortNames: + - cassdc + - cassdcs + singular: cassandradatacenter + scope: Namespaced + subresources: + status: {} + validation: + openAPIV3Schema: + description: CassandraDatacenter is the Schema for the cassandradatacenters + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: CassandraDatacenterSpec defines the desired state of a CassandraDatacenter + properties: + allowMultipleNodesPerWorker: + description: Turning this option on allows multiple server pods to be + created on a k8s worker node. By default the operator creates just + one server pod per k8s worker node using k8s podAntiAffinity and requiredDuringSchedulingIgnoredDuringExecution. + type: boolean + canaryUpgrade: + description: Indicates that configuration and container image changes + should only be pushed to the first rack of the datacenter + type: boolean + clusterName: + description: The name by which CQL clients and instances will know the + cluster. If the same cluster name is shared by multiple Datacenters + in the same Kubernetes namespace, they will join together in a multi-datacenter + cluster. + minLength: 2 + type: string + configBuilderImage: + description: Container image for the config builder init container. + type: string + managementApiAuth: + description: Config for the Management API certificates + properties: + insecure: + type: object + manual: + properties: + clientSecretName: + type: string + serverSecretName: + type: string + skipSecretValidation: + type: boolean + required: + - clientSecretName + - serverSecretName + type: object + type: object + racks: + description: A list of the named racks in the datacenter, representing + independent failure domains. The number of racks should match the + replication factor in the keyspaces you plan to create, and the number + of racks cannot easily be changed once a datacenter is deployed. + items: + description: Rack ... + properties: + name: + description: The rack name + minLength: 2 + type: string + zone: + description: Zone name to pin the rack, using node affinity + type: string + required: + - name + type: object + type: array + replaceNodes: + description: A list of pod names that need to be replaced. + items: + type: string + type: array + resources: + description: Kubernetes resource requests and limits, per pod + properties: + limits: + additionalProperties: + type: string + description: 'Limits describes the maximum amount of compute resources + allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + requests: + additionalProperties: + type: string + description: 'Requests describes the minimum amount of compute resources + required. If Requests is omitted for a container, it defaults + to Limits if that is explicitly specified, otherwise to an implementation-defined + value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + type: object + rollingRestartRequested: + description: Whether to do a rolling restart at the next opportunity. + The operator will set this back to false once the restart is in progress. + type: boolean + serverImage: + description: 'Cassandra server image name. More info: https://kubernetes.io/docs/concepts/containers/images' + type: string + serverType: + description: 'Server type: "cassandra" or "dse"' + enum: + - cassandra + - dse + type: string + serverVersion: + description: Version string for config builder, used to generate Cassandra + server configuration + enum: + - 6.8.0 + - 3.11.6 + - 4.0.0 + type: string + serviceAccount: + description: The k8s service account to use for the server pods + type: string + size: + description: Desired number of Cassandra server nodes + format: int32 + minimum: 1 + type: integer + stopped: + description: A stopped CassandraDatacenter will have no running server + pods, like using "stop" with traditional System V init scripts. Other + Kubernetes resources will be left intact, and volumes will re-attach + when the CassandraDatacenter workload is resumed. + type: boolean + storageConfig: + description: Describes the persistent storage request of each server + node + properties: + cassandraDataVolumeClaimSpec: + description: PersistentVolumeClaimSpec describes the common attributes + of storage devices and allows a Source for provider-specific attributes + properties: + accessModes: + description: 'AccessModes contains the desired access modes + the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: This field requires the VolumeSnapshotDataSource + alpha feature gate to be enabled and currently VolumeSnapshot + is the only supported data source. If the provisioner can + support VolumeSnapshot data source, it will create a new volume + and data will be restored to the volume at the same time. + If the provisioner does not support VolumeSnapshot data source, + volume will not be created and the failure will be reported + as an event. In the future, we plan to support more data source + types and the behavior of the provisioner may change. + properties: + apiGroup: + description: APIGroup is the group for the resource being + referenced. If APIGroup is not specified, the specified + Kind must be in the core API group. For any other third-party + types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - kind + - name + type: object + resources: + description: 'Resources represents the minimum resources the + volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + limits: + additionalProperties: + type: string + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + requests: + additionalProperties: + type: string + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, + otherwise to an implementation-defined value. More info: + https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + type: object + selector: + description: A label query over volumes to consider for binding. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + storageClassName: + description: 'Name of the StorageClass required by the claim. + More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what type of volume is required + by the claim. Value of Filesystem is implied when not included + in claim spec. This is a beta feature. + type: string + volumeName: + description: VolumeName is the binding reference to the PersistentVolume + backing this claim. + type: string + type: object + type: object + superuserSecretName: + description: This secret defines the username and password for the Cassandra + server superuser. If it is omitted, we will generate a secret instead. + type: string + required: + - clusterName + - serverType + - serverVersion + - size + - storageConfig + type: object + status: + description: CassandraDatacenterStatus defines the observed state of CassandraDatacenter + properties: + cassandraOperatorProgress: + description: Last known progress state of the Cassandra Operator + type: string + lastRollingRestart: + format: date-time + type: string + lastServerNodeStarted: + description: The timestamp when the operator last started a Server node + with the management API + format: date-time + type: string + nodeReplacements: + items: + type: string + type: array + nodeStatuses: + additionalProperties: + properties: + hostID: + type: string + nodeIP: + type: string + type: object + type: object + superUserUpserted: + description: The timestamp at which CQL superuser credentials were last + upserted to the management API + format: date-time + type: string + type: object + type: object + x-kubernetes-preserve-unknown-fields: true + version: v1beta1 + versions: + - name: v1beta1 + served: true + storage: true diff --git a/operator/deploy/olm-catalog/cass-operator/1.1.0/cass-operator.v1.1.0.clusterserviceversion.yaml b/operator/deploy/olm-catalog/cass-operator/1.1.0/cass-operator.v1.1.0.clusterserviceversion.yaml new file mode 100644 index 000000000..95547fbc3 --- /dev/null +++ b/operator/deploy/olm-catalog/cass-operator/1.1.0/cass-operator.v1.1.0.clusterserviceversion.yaml @@ -0,0 +1,420 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: >- + [{"apiVersion":"cassandra.datastax.com/v1beta1","kind":"CassandraDatacenter","metadata":{"name":"dc1"},"spec":{"clusterName":"cluster1","size":6,"racks":[{"name":"rack1","zone":"us-central1-a"},{"name":"rack2","zone":"us-central1-b"},{"name":"rack3","zone":"us-central1-c"}],"resources":{"requests":{"memory":"24Gi","cpu":"6000m"},"limits":{"memory":"24Gi","cpu":"6000m"}},"storageConfig":{"cassandraDataVolumeClaimSpec":{"storageClassName":"server-storage","accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"100Gi"}}}},"allowMultipleNodesPerWorker":false,"stopped":false,"rollingRestartRequested":false,"canaryUpgrade":false,"serverType":"cassandra","serverVersion":"3.11.6","serverImage":"","configBuilderImage":"","superuserSecretName":"","managementApiAuth":{"insecure":{}},"serviceAccount":"default","replaceNodes":[],"config":{"cassandra-yaml":{"num_tokens":8,"file_cache_size_in_mb":1000,"authenticator":"org.apache.cassandra.auth.PasswordAuthenticator","authorizer":"org.apache.cassandra.auth.CassandraAuthorizer","role_manager":"org.apache.cassandra.auth.CassandraRoleManager"},"jvm-options":{"initial_heap_size":"14G","max_heap_size":"14G","additional-jvm-opts":["-Dcassandra.system_distributed_replication_dc_names=dc1","-Dcassandra.system_distributed_replication_per_dc=3"]}}}}] + categories: Database + description: > + Simple provisioning, turn-key operations, and automated remediation of + Apache Cassandra clusters + containerImage: datastax/cass-operator + support: '' + capabilities: Auto Pilot + repository: 'https://github.com/datastax/cass-operator' + createdAt: "" + certified: "false" + name: cass-operator.v1.1.0 + namespace: placeholder +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - name: cassandradatacenters.cassandra.datastax.com + displayName: CassandraDatacenter + kind: CassandraDatacenter + version: v1beta1 + description: Cassandra Datacenter + resources: + - version: v1 + kind: Deployment + - version: v1 + kind: Service + - version: v1 + kind: ReplicaSet + - version: v1 + kind: Pod + - version: v1 + kind: Secret + - version: v1 + kind: ConfigMap + specDescriptors: + - path: allowMultipleNodesPerWorker + description: Allow Multiple Nodes Per Worker + displayName: Allow Multiple Nodes Per Worker + x-descriptors: [] + - path: canaryUpgrade + description: Canary Upgrade + displayName: Canary Upgrade + x-descriptors: [] + - path: clusterName + description: Cluster Name + displayName: Cluster Name + x-descriptors: [] + - path: configBuilderImage + description: Config Builder Image + displayName: Config Builder Image + x-descriptors: [] + - path: managementApiAuth + description: Management Api Auth + displayName: Management Api Auth + x-descriptors: [] + - path: nodeSelector + description: Node Selector + displayName: Node Selector + x-descriptors: [] + - path: racks + description: Racks + displayName: Racks + x-descriptors: [] + - path: replaceNodes + description: Replace Nodes + displayName: Replace Nodes + x-descriptors: [] + - path: resources + description: Resources + displayName: Resources + x-descriptors: [] + - path: rollingRestartRequested + description: Rolling Restart Requested + displayName: Rolling Restart Requested + x-descriptors: [] + - path: serverImage + description: Server Image + displayName: Server Image + x-descriptors: [] + - path: serverType + description: Server Type + displayName: Server Type + x-descriptors: [] + - path: serverVersion + description: Server Version + displayName: Server Version + x-descriptors: [] + - path: serviceAccount + description: Service Account + displayName: Service Account + x-descriptors: [] + - path: size + description: Size + displayName: Size + x-descriptors: [] + - path: stopped + description: Stopped + displayName: Stopped + x-descriptors: [] + - path: storageConfig + description: Storage Config + displayName: Storage Config + x-descriptors: [] + - path: superuserSecretName + description: Superuser Secret Name + displayName: Superuser Secret Name + x-descriptors: [] + statusDescriptors: + - path: cassandraOperatorProgress + description: Cassandra Operator Progress + displayName: Cassandra Operator Progress + x-descriptors: [] + - path: lastRollingRestart + description: Last Rolling Restart + displayName: Last Rolling Restart + x-descriptors: [] + - path: lastServerNodeStarted + description: Last Server Node Started + displayName: Last Server Node Started + x-descriptors: [] + - path: nodeReplacements + description: Node Replacements + displayName: Node Replacements + x-descriptors: [] + - path: nodeStatuses + description: Node Statuses + displayName: Node Statuses + x-descriptors: [] + - path: superUserUpserted + description: Super User Upserted + displayName: Super User Upserted + x-descriptors: [] + required: [] + description: > + ## Apache Cassandra + + + The Apache Cassandra database is the right choice when you need scalability + and high availability without compromising performance. Linear scalability + and proven fault-tolerance on commodity hardware or cloud infrastructure + make it the perfect platform for mission-critical data. Cassandra's support + for replicating across multiple datacenters is best-in-class, providing + lower latency for your users and the peace of mind of knowing that you can + survive regional outages. + + + ## DataStax Enterprise + + The most advanced distribution of Apache Cassandraâ„¢ on the market, with the + enterprise functionality needed for serious production systems and backed up + and supported by the best distributed-experts in the world. It's one + platform for all types of applications anywhere, any cloud, any model: + key-value, graph, tabular, JSON. + + + DataStax Enterprise is a fully integrated and optimized database, with + graph, analytics, and search included, all with a unified security model. + Simply put, it's the only database capable of meeting today's demanding + requirements + + + ## Operator Details + + `cass-operator` is designed as a modular operator for Apache Cassandra and + derived distributions. Apache Cassandra is a distributed database + consisting of multiple nodes working in concert to store data and process + queries along a number of fault domains. `cass-operator` has the + deployment of a Cassandra cluster around the logical domain of a datacenter + with the `CassandraDatacenter` custom resource. Upon submission of one of + these resources it handles provisioning the underlying stateful sets + (analogous to C* logical racks), services, and configuration. Additionally + through monitoring pod state via Kubernetes callbacks it handles day to day + operations such as restarting failed processes, scaling clusters up, and + deploying configuration changes in a rolling, non-disruptive, fashion. + + This operator is designed to be `Namespace` scoped. A single Kubernetes + cluster may be running multiple instances of this operator, in separate + namespaces, to support a number of C* clusters and environments. + Configuration is simple with the usage of YAML based overrides in the Custom + Resource paired with an `init` container. In C* clusters ordering and timing + of certain operations are important to keep the system evenly distributed. + `cass-operator` takes advantage of a sidecar process within the main + container to handle the orchestration of starting our main C* process. + + + ## Pre-requisites + + + Currently there are no pre-requisites to install the operator. + displayName: DataStax Kubernetes Operator for Apache Cassandra + icon: + - base64data: PHN2ZyBpZD0iZjM5NDE5ODctOTk4Ni00ODliLTlkYmQtYWY3ZTMwMjc1NmFhIiBkYXRhLW5hbWU9 + IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAw + IDgwIDgwIj4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgLmIyYzA3Njg0LTk4YmQtNDY1My05 + NWQ5LTRiMDMyMTBmZWIwNSB7CiAgICAgICAgZmlsbDogIzAwNTVhYjsKICAgICAgfQoKICAgICAg + LmZlMmUyOGVhLTczNzctNGUwNy05NDdmLWZlZTIxZDQzNjQwNCB7CiAgICAgICAgZmlsbDogIzFm + MjQzODsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2RlZnM+CiAgPGc+CiAgICA8cGF0aCBjbGFz + cz0iYjJjMDc2ODQtOThiZC00NjUzLTk1ZDktNGIwMzIxMGZlYjA1IiBkPSJNNTIuNTgsNDUuNTFh + Ni4zNSw2LjM1LDAsMSwwLDYuMTktNi40NkE2LjMzLDYuMzMsMCwwLDAsNTIuNTgsNDUuNTFaIi8+ + CiAgICA8cGF0aCBjbGFzcz0iYjJjMDc2ODQtOThiZC00NjUzLTk1ZDktNGIwMzIxMGZlYjA1IiBk + PSJNMjYuNjQsMTUuMmE2LjM1LDYuMzUsMCwxLDAsNi4xOS02LjQ2QTYuMzMsNi4zMywwLDAsMCwy + Ni42NCwxNS4yWiIvPgogICAgPHBhdGggY2xhc3M9ImIyYzA3Njg0LTk4YmQtNDY1My05NWQ5LTRi + MDMyMTBmZWIwNSIgZD0iTTExLjI5LDEwLjc0YTQuOTIsNC45MiwwLDEsMCw0LjgtNUE0LjksNC45 + LDAsMCwwLDExLjI5LDEwLjc0WiIvPgogICAgPHBhdGggY2xhc3M9ImIyYzA3Njg0LTk4YmQtNDY1 + My05NWQ5LTRiMDMyMTBmZWIwNSIgZD0iTTUyLjQ4LDYxLjU4QTQuNSw0LjUsMCwxLDAsNTYuODcs + NTcsNC40OCw0LjQ4LDAsMCwwLDUyLjQ4LDYxLjU4WiIvPgogICAgPHBhdGggY2xhc3M9ImIyYzA3 + Njg0LTk4YmQtNDY1My05NWQ5LTRiMDMyMTBmZWIwNSIgZD0iTTQyLjU2LDY3Ljg2YTIuNjUsMi42 + NSwwLDEsMCwyLjU4LTIuN0EyLjY0LDIuNjQsMCwwLDAsNDIuNTYsNjcuODZaIi8+CiAgICA8cGF0 + aCBjbGFzcz0iYjJjMDc2ODQtOThiZC00NjUzLTk1ZDktNGIwMzIxMGZlYjA1IiBkPSJNMi43Mywx + OC4xYTIuOTIsMi45MiwwLDEsMCwyLjg1LTNBMi45LDIuOSwwLDAsMCwyLjczLDE4LjFaIi8+CiAg + ICA8cGF0aCBjbGFzcz0iYjJjMDc2ODQtOThiZC00NjUzLTk1ZDktNGIwMzIxMGZlYjA1IiBkPSJN + Mi4zOSwyOS41M2EyLjI5LDIuMjksMCwxLDAsMi4yMy0yLjMyQTIuMjksMi4yOSwwLDAsMCwyLjM5 + LDI5LjUzWiIvPgogICAgPHBhdGggY2xhc3M9ImIyYzA3Njg0LTk4YmQtNDY1My05NWQ5LTRiMDMy + MTBmZWIwNSIgZD0iTTQxLDI4LjIzYTcuOTQsNy45NCwwLDEsMCw3Ljc0LTguMDhBNy45Miw3Ljky + LDAsMCwwLDQxLDI4LjIzWiIvPgogIDwvZz4KICA8cGF0aCBjbGFzcz0iZmUyZTI4ZWEtNzM3Ny00 + ZTA3LTk0N2YtZmVlMjFkNDM2NDA0IiBkPSJNMzUuNzEsNjAuNDgsMjYuNDQsNTJsOS4yMi05LjIz + YTIuMzYsMi4zNiwwLDAsMCwuNDMtMi41NiwyLjM4LDIuMzgsMCwwLDAtMy44OC0uNzJsLTkuMTMs + OS4xNi05LjMxLTkuM2EyLjM3LDIuMzcsMCwwLDAtMS42OC0uNywyLjQyLDIuNDIsMCwwLDAtMi4y + LDEuNDcsMi4zMiwyLjMyLDAsMCwwLC41MywyLjU3TDE5LjcyLDUybC05LjE1LDkuMTVBMi4zNCwy + LjM0LDAsMCwwLDEwLDYzLjc3YTIuNDIsMi40MiwwLDAsMCwyLjE5LDEuNDYsMi4zOSwyLjM5LDAs + MCwwLDEuNjgtLjdsOS4xOS05LjE5LDkuMjYsOC41MWEyLjM4LDIuMzgsMCwwLDAsMS42OC43MSwy + LjM4LDIuMzgsMCwwLDAsMS42Ny00LjA4WiIvPgogIDxwYXRoIGNsYXNzPSJmZTJlMjhlYS03Mzc3 + LTRlMDctOTQ3Zi1mZWUyMWQ0MzY0MDQiIGQ9Ik02Ni4xMyw2NmE2LDYsMCwwLDEsMS4yOS0xLjg3 + LDYuMTQsNi4xNCwwLDAsMSwxLjkxLTEuMjUsNiw2LDAsMCwxLDIuMzItLjQ2LDYsNiwwLDAsMSw0 + LjE5LDEuNzFBNiw2LDAsMCwxLDc3LjEzLDY2YTUuNyw1LjcsMCwwLDEsLjQ4LDIuMzQsNS44NSw1 + Ljg1LDAsMCwxLS40OCwyLjM4LDYuMjIsNi4yMiwwLDAsMS0xLjI5LDEuODlBNS45Myw1LjkzLDAs + MCwxLDc0LDczLjgyYTYuMTEsNi4xMSwwLDAsMS0yLjMuNDQsNi4yMiw2LjIyLDAsMCwxLTIuMzIt + LjQ0LDYuMTQsNi4xNCwwLDAsMS0xLjkxLTEuMjUsNi4yMiw2LjIyLDAsMCwxLTEuMjktMS44OSw1 + Ljg1LDUuODUsMCwwLDEtLjQ4LTIuMzhBNS43LDUuNywwLDAsMSw2Ni4xMyw2NlptMSw0LjM3YTQu + ODMsNC44MywwLDAsMCwxLDEuNjFBNC41Nyw0LjU3LDAsMCwwLDY5LjcsNzNhNC44NSw0Ljg1LDAs + MCwwLDIsLjM5QTQuNzQsNC43NCwwLDAsMCw3My41Nyw3M2E0LjYzLDQuNjMsMCwwLDAsMS41NS0x + LjA3LDUsNSwwLDAsMCwxLTEuNjEsNS4zOSw1LjM5LDAsMCwwLC4zOC0yLDUuMjYsNS4yNiwwLDAs + MC0uMzgtMiw0Ljc3LDQuNzcsMCwwLDAtMi41OC0yLjY2LDQuNzQsNC43NCwwLDAsMC0xLjkyLS4z + OSw0Ljg4LDQuODgsMCwwLDAtMy41MSwxLjQ1LDQuNzgsNC43OCwwLDAsMC0xLDEuNiw1LjI2LDUu + MjYsMCwwLDAtLjM4LDJBNS4zOSw1LjM5LDAsMCwwLDY3LjExLDcwLjMzWk03Miw2NC44NWEyLjg1 + LDIuODUsMCwwLDEsMS44NC40OSwxLjgzLDEuODMsMCwwLDEsLjU5LDEuNSwxLjY4LDEuNjgsMCww + LDEtLjUyLDEuMzcsMi4zNywyLjM3LDAsMCwxLTEuMy41MmwyLDMuMDdINzMuNDRsLTEuODktM0g3 + MC40MXYzSDY5LjMydi03Wm0tLjQ4LDMuMDhjLjI1LDAsLjQ4LDAsLjcsMGEyLjA2LDIuMDYsMCww + LDAsLjU4LS4xMy45MS45MSwwLDAsMCwuNC0uMzUsMS4xNywxLjE3LDAsMCwwLC4xNS0uNjQsMSwx + LDAsMCwwLS4xMy0uNTYuODcuODcsMCwwLDAtLjM1LS4zMSwxLjU1LDEuNTUsMCwwLDAtLjUtLjE2 + LDQuOSw0LjksMCwwLDAtLjU0LDBINzAuNDF2Mi4yMVoiLz4KPC9zdmc+Cg== + mediatype: image/svg+xml + install: + strategy: deployment + spec: + permissions: + - serviceAccountName: cass-operator + rules: + - apiGroups: + - '' + resources: + - pods + - services + - endpoints + - persistentvolumeclaims + - events + - configmaps + - secrets + verbs: + - '*' + - apiGroups: + - '' + resources: + - namespaces + verbs: + - get + - apiGroups: + - apps + resources: + - deployments + - daemonsets + - replicasets + - statefulsets + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + verbs: + - get + - create + - apiGroups: + - apps + resourceNames: + - cass-operator + resources: + - deployments/finalizers + verbs: + - update + - apiGroups: + - datastax.com + resources: + - '*' + verbs: + - '*' + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - '*' + - apiGroups: + - cassandra.datastax.com + resources: + - '*' + verbs: + - '*' + clusterPermissions: + - serviceAccountName: cass-operator + rules: + - apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + verbs: + - create + - get + - update + resourceNames: + - cassandradatacenter-webhook-registration + deployments: + - name: cass-operator + spec: + replicas: 1 + selector: + matchLabels: + name: cass-operator + template: + metadata: + labels: + name: cass-operator + spec: + serviceAccountName: cass-operator + volumes: + - name: cass-operator-certs-volume + secret: + secretName: cass-operator-webhook-config + containers: + - name: cass-operator + image: 'datastax/cass-operator:1.1.0' + imagePullPolicy: IfNotPresent + volumeMounts: + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: cass-operator-certs-volume + readOnly: false + livenessProbe: + exec: + command: + - pgrep + - .*operator + initialDelaySeconds: 5 + periodSeconds: 5 + timeoutSeconds: 5 + failureThreshold: 3 + readinessProbe: + exec: + command: + - stat + - /tmp/operator-sdk-ready + initialDelaySeconds: 5 + periodSeconds: 5 + timeoutSeconds: 5 + failureThreshold: 1 + env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: OPERATOR_NAME + value: cass-operator + - name: SKIP_VALIDATING_WEBHOOK + value: 'FALSE' + installModes: + - type: OwnNamespace + supported: true + - type: SingleNamespace + supported: true + - type: MultiNamespace + supported: false + - type: AllNamespaces + supported: false + keywords: + - DataStax Enterprise + - Apache Cassandra + - DSE + - C* + - Cassandra + links: + - name: DataStax + url: https://datastax.com + - name: Operator GitHub Repo + url: https://github.com/datastax/cass-operator + - name: Config Builder GitHub Repo + url: https://github.com/datastax/cass-config-builder + - name: Documentation [1] + url: https://github.com/datastax/cass-operator/tree/master/docs/user + - name: Documentation [2] + url: https://docs.datastax.com/en/cass-operator/doc/cass-operator/cassOperatorTOC.html + maintainers: + - email: christopher.bradford@datastax.com + name: Christopher Bradford + - email: jim.dickinson@datastax.com + name: Jim Dickinson + maturity: stable + minKubeVersion: 1.13.0 + provider: + name: DataStax + replaces: cass-operator.v1.0.0 + version: 1.1.0 diff --git a/operator/deploy/olm-catalog/cass-operator/1.1.0/cassandradatacenters.v1beta1.crd.yaml b/operator/deploy/olm-catalog/cass-operator/1.1.0/cassandradatacenters.v1beta1.crd.yaml new file mode 100644 index 000000000..52e149369 --- /dev/null +++ b/operator/deploy/olm-catalog/cass-operator/1.1.0/cassandradatacenters.v1beta1.crd.yaml @@ -0,0 +1,328 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: cassandradatacenters.cassandra.datastax.com +spec: + group: cassandra.datastax.com + names: + kind: CassandraDatacenter + listKind: CassandraDatacenterList + plural: cassandradatacenters + shortNames: + - cassdc + - cassdcs + singular: cassandradatacenter + scope: Namespaced + subresources: + status: {} + validation: + openAPIV3Schema: + description: CassandraDatacenter is the Schema for the cassandradatacenters + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: CassandraDatacenterSpec defines the desired state of a CassandraDatacenter + properties: + allowMultipleNodesPerWorker: + description: Turning this option on allows multiple server pods to be + created on a k8s worker node. By default the operator creates just + one server pod per k8s worker node using k8s podAntiAffinity and requiredDuringSchedulingIgnoredDuringExecution. + type: boolean + canaryUpgrade: + description: Indicates that configuration and container image changes + should only be pushed to the first rack of the datacenter + type: boolean + clusterName: + description: The name by which CQL clients and instances will know the + cluster. If the same cluster name is shared by multiple Datacenters + in the same Kubernetes namespace, they will join together in a multi-datacenter + cluster. + minLength: 2 + type: string + configBuilderImage: + description: Container image for the config builder init container. + type: string + managementApiAuth: + description: Config for the Management API certificates + properties: + insecure: + type: object + manual: + properties: + clientSecretName: + type: string + serverSecretName: + type: string + skipSecretValidation: + type: boolean + required: + - clientSecretName + - serverSecretName + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: 'A map of label keys and values to restrict Cassandra node + scheduling to k8s workers with matchiing labels. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector' + type: object + racks: + description: A list of the named racks in the datacenter, representing + independent failure domains. The number of racks should match the + replication factor in the keyspaces you plan to create, and the number + of racks cannot easily be changed once a datacenter is deployed. + items: + description: Rack ... + properties: + name: + description: The rack name + minLength: 2 + type: string + zone: + description: Zone name to pin the rack, using node affinity + type: string + required: + - name + type: object + type: array + replaceNodes: + description: A list of pod names that need to be replaced. + items: + type: string + type: array + resources: + description: Kubernetes resource requests and limits, per pod + properties: + limits: + additionalProperties: + type: string + description: 'Limits describes the maximum amount of compute resources + allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + requests: + additionalProperties: + type: string + description: 'Requests describes the minimum amount of compute resources + required. If Requests is omitted for a container, it defaults + to Limits if that is explicitly specified, otherwise to an implementation-defined + value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + type: object + rollingRestartRequested: + description: Whether to do a rolling restart at the next opportunity. + The operator will set this back to false once the restart is in progress. + type: boolean + serverImage: + description: 'Cassandra server image name. More info: https://kubernetes.io/docs/concepts/containers/images' + type: string + serverType: + description: 'Server type: "cassandra" or "dse"' + enum: + - cassandra + - dse + type: string + serverVersion: + description: Version string for config builder, used to generate Cassandra + server configuration + enum: + - 6.8.0 + - 3.11.6 + - 4.0.0 + type: string + serviceAccount: + description: The k8s service account to use for the server pods + type: string + size: + description: Desired number of Cassandra server nodes + format: int32 + minimum: 1 + type: integer + stopped: + description: A stopped CassandraDatacenter will have no running server + pods, like using "stop" with traditional System V init scripts. Other + Kubernetes resources will be left intact, and volumes will re-attach + when the CassandraDatacenter workload is resumed. + type: boolean + storageConfig: + description: Describes the persistent storage request of each server + node + properties: + cassandraDataVolumeClaimSpec: + description: PersistentVolumeClaimSpec describes the common attributes + of storage devices and allows a Source for provider-specific attributes + properties: + accessModes: + description: 'AccessModes contains the desired access modes + the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: This field requires the VolumeSnapshotDataSource + alpha feature gate to be enabled and currently VolumeSnapshot + is the only supported data source. If the provisioner can + support VolumeSnapshot data source, it will create a new volume + and data will be restored to the volume at the same time. + If the provisioner does not support VolumeSnapshot data source, + volume will not be created and the failure will be reported + as an event. In the future, we plan to support more data source + types and the behavior of the provisioner may change. + properties: + apiGroup: + description: APIGroup is the group for the resource being + referenced. If APIGroup is not specified, the specified + Kind must be in the core API group. For any other third-party + types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - kind + - name + type: object + resources: + description: 'Resources represents the minimum resources the + volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + limits: + additionalProperties: + type: string + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + requests: + additionalProperties: + type: string + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, + otherwise to an implementation-defined value. More info: + https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + type: object + selector: + description: A label query over volumes to consider for binding. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + storageClassName: + description: 'Name of the StorageClass required by the claim. + More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what type of volume is required + by the claim. Value of Filesystem is implied when not included + in claim spec. This is a beta feature. + type: string + volumeName: + description: VolumeName is the binding reference to the PersistentVolume + backing this claim. + type: string + type: object + type: object + superuserSecretName: + description: This secret defines the username and password for the Cassandra + server superuser. If it is omitted, we will generate a secret instead. + type: string + required: + - clusterName + - serverType + - serverVersion + - size + - storageConfig + type: object + status: + description: CassandraDatacenterStatus defines the observed state of CassandraDatacenter + properties: + cassandraOperatorProgress: + description: Last known progress state of the Cassandra Operator + type: string + lastRollingRestart: + format: date-time + type: string + lastServerNodeStarted: + description: The timestamp when the operator last started a Server node + with the management API + format: date-time + type: string + nodeReplacements: + items: + type: string + type: array + nodeStatuses: + additionalProperties: + properties: + hostID: + type: string + nodeIP: + type: string + type: object + type: object + superUserUpserted: + description: The timestamp at which CQL superuser credentials were last + upserted to the management API + format: date-time + type: string + type: object + type: object + x-kubernetes-preserve-unknown-fields: true + version: v1beta1 + versions: + - name: v1beta1 + served: true + storage: true diff --git a/operator/deploy/olm-catalog/cass-operator/cass-operator.package.yaml b/operator/deploy/olm-catalog/cass-operator/cass-operator.package.yaml new file mode 100644 index 000000000..6750c0c38 --- /dev/null +++ b/operator/deploy/olm-catalog/cass-operator/cass-operator.package.yaml @@ -0,0 +1,5 @@ +channels: +- currentCSV: cass-operator.v1.1.0 + name: stable +defaultChannel: stable +packageName: cass-operator