From 67de3e2d56b3d7409d3f5f62fbdad74a5437362f Mon Sep 17 00:00:00 2001 From: Christopher Bradford Date: Mon, 18 May 2020 19:37:21 -0400 Subject: [PATCH] ClusterServiceVersion (CSV) for v1.0.0 --- PACKAGING.md | 6 + operator/.osdk-scorecard.yaml | 16 +- ...operator.v1.0.0.clusterserviceversion.yaml | 372 +++++++++------- ...operator.v1.1.0.clusterserviceversion.yaml | 420 ------------------ .../cassandradatacenters.v1beta1.crd.yaml | 328 -------------- .../cass-operator/cass-operator.package.yaml | 2 +- .../example-cassdc-scorecard.yaml | 23 + .../dse-6.8.0/example-cassdc-scorecard.yaml | 23 + 8 files changed, 282 insertions(+), 908 deletions(-) delete mode 100644 operator/deploy/olm-catalog/cass-operator/1.1.0/cass-operator.v1.1.0.clusterserviceversion.yaml delete mode 100644 operator/deploy/olm-catalog/cass-operator/1.1.0/cassandradatacenters.v1beta1.crd.yaml create mode 100644 operator/example-cassdc-yaml/cassandra-3.11.6/example-cassdc-scorecard.yaml create mode 100644 operator/example-cassdc-yaml/dse-6.8.0/example-cassdc-scorecard.yaml diff --git a/PACKAGING.md b/PACKAGING.md index c74b41308..3834c2a30 100644 --- a/PACKAGING.md +++ b/PACKAGING.md @@ -53,3 +53,9 @@ operator-sdk generate csv --make-manifests=false --csv-version d.e.f --from-vers ```bash operator-sdk generate csv --operator-name cass-operator --csv-version 1.1.0 --make-manifests=false --from-version 1.0.0 ``` + +## Defining Descriptors + +https://github.com/openshift/console/blob/master/frontend/packages/operator-lifecycle-manager/src/components/descriptors/reference/reference.md + +## Validating Operator SDK Manifests diff --git a/operator/.osdk-scorecard.yaml b/operator/.osdk-scorecard.yaml index 0da2e2687..f66f54aa1 100644 --- a/operator/.osdk-scorecard.yaml +++ b/operator/.osdk-scorecard.yaml @@ -5,9 +5,13 @@ scorecard: # `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 + - "example-cassdc-yaml/cassandra-3.11.6/example-cassdc-scorecard.yaml" + # - "example-cassdc-yaml/dse-6.8.0/example-cassdc-scorecard.yaml" + + # OLM tests may only test one CR + # - olm: + # cr-manifest: + # - "example-cassdc-yaml/cassandra-3.11.6/example-cassdc-scorecard.yaml" + # # - "example-cassdc-yaml/dse-6.8.0/example-cassdc-scorecard.yaml" + # csv-path: "deploy/olm-catalog/cass-operator/1.0.0/cass-operator.v1.0.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 index 056d55b49..08cd24301 100644 --- 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 @@ -3,7 +3,7 @@ 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"]}}}}] + [{"apiVersion": "cassandra.datastax.com/v1beta1","kind": "CassandraDatacenter","metadata": {"name": "dc1"},"spec": {"clusterName": "cluster1","size": 3,"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": "1000Gi"}}}},"allowMultipleNodesPerWorker": false,"stopped": false,"rollingRestartRequested": false,"canaryUpgrade": false,"serverType": "dse","serverVersion": "6.8.0","serverImage": "registry.connect.redhat.com/datastax/dse-server:6.8.0","configBuilderImage": "registry.connect.redhat.com/datastax/cass-config-builder:1.0.0","superuserSecretName": "","managementApiAuth": {"insecure": {}},"serviceAccount": "default","replaceNodes": []}}] categories: Database description: > Simple provisioning, turn-key operations, and automated remediation of @@ -21,117 +21,251 @@ spec: customresourcedefinitions: owned: - name: cassandradatacenters.cassandra.datastax.com - displayName: CassandraDatacenter + displayName: Cassandra Datacenter 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 + description: | + This Custom Resource defines the logical topology of a Cassandra Datacenter. + At a minimum users must specify the serverType, serverVersion, size, + and storageConfig details. Optionally a user may define the rack names + and zone identifiers which align with node failure zone labels. + + Configuration of nodes in the DC is kept homogenous. Overrides may be + specified as JSON (or YAML) in the config block. Upon successful + deployment of a cluster the configuration may be changed which will result + in a rolling restart of all nodes. + + # Note, error when specifying any values here within CRC + resources: [] + # - kind: Deployment + # version: v1 + # - kind: Service + # version: v1 + # - kind: StatefulSet + # version: v1beta1 + # - kind: Secret + # version: v1 + 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: [] + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:select:cassandra + - urn:alm:descriptor:com.tectonic.ui:select:dse + - path: serverVersion description: Server Version displayName: Server Version - x-descriptors: [] - - path: serviceAccount - description: Service Account - displayName: Service Account - x-descriptors: [] + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + + - path: clusterName + description: | + Name of the Cassandra cluster. Multiple CassandraDatacenter + objects in the same namespace and Cluster Name + will automatically be wired together as a single cluster. + displayName: Cluster Name + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - path: size description: Size displayName: Size - x-descriptors: [] - - path: stopped - description: Stopped - displayName: Stopped - x-descriptors: [] + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + + - path: racks + description: | + Collection of logical rack identifiers, these may be named + and specify a zone to limit pod deployment. + displayName: Racks + + - path: racks[0].name + description: | + User friendly name of the rack. Limit characters to + alphanumeric values, dashes, and underscores. + displayName: Name + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:arrayFieldGroup:rack + + - path: racks[0].zone + description: | + failure-domain.beta.kubernetes.io/zone node label value + where pods related to this rack will be restricted. Note + the value may be in the topology.kubernetes.io/zone label + as well. + displayName: Zone + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:arrayFieldGroup:rack + + - path: resources + description: | + Resource requests and limits for each Cassandra pod in the + cluster. Note: Only specify CPU and memory limits here. + displayName: Resources + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:resourceRequirements + - path: storageConfig - description: Storage Config + description: | + Storage descriptors used during the provisioning and consumption + of Persistent Volumes. displayName: Storage Config - x-descriptors: [] + + - path: storageConfig.cassandraDataVolumeClaimSpec.storageClassName + description: | + Name of the storage class where data will reside. This must be + defined within the Kubernetes prior to provisioning a datacenter. + displayName: Storage Class + x-descriptors: + - urn:alm:descriptor:io.kubernetes:StorageClass + - urn:alm:descriptor:com.tectonic.ui:fieldGroup:storageConfig + + - path: storageConfig.cassandraDataVolumeClaimSpec.accessModes[0] + description: | + Access mode of the volume + displayName: Access Modes + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:select:ReadWriteOnce + - urn:alm:descriptor:com.tectonic.ui:fieldGroup:storageConfig + + - path: storageConfig.cassandraDataVolumeClaimSpec.resources + description: | + Storage requirements for the Cassandra data volume. Only specify + the Storage column here. + displayName: Resources + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:resourceRequirements + - urn:alm:descriptor:com.tectonic.ui:fieldGroup:storageConfig + - path: superuserSecretName - description: Superuser Secret Name + description: | + Kubernetes Secret containing a username and password for + the initial super user accout. Omitting this field will + result in a secret being created automatically with + random values for each. displayName: Superuser Secret Name - x-descriptors: [] + x-descriptors: + - urn:alm:descriptor:io.kubernetes:Secret + + - path: allowMultipleNodesPerWorker + description: | + Allows multiple Cassandra pods per Kubernetes worker. + Ensure appropriate limits and requests are set in the + resource field to limit the number of pods per worker. + displayName: Allow Multiple Nodes Per Worker + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + + - path: stopped + description: | + When enabled, stops all pods making up the cluster. Storage + is retained, but all compute instances are stopped. + displayName: Stopped + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + + - path: rollingRestartRequested + description: | + Request a restart of all nodes in the cluster in a rolling + fashion to prevent service interuptions. After the restart + is complete this field is set back to false. + displayName: Rolling Restart Requested + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + + - path: canaryUpgrade + description: | + Informs the operator to apply the requested changes to + a single rack. After manual validation set this value + back to false and the operator will continue deployment. + displayName: Canary Upgrade + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + + - path: serverImage + description: | + Optional: Specify the name of the image to use for each + node in the cluster. + displayName: Server Image + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:advanced + + - path: configBuilderImage + description: | + Optional: Specify the name of the image to use when + rendering configuration files as each node in the + cluster is initialized. + displayName: Config Builder Image + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:advanced + + - path: replaceNodes[0] + description: | + A list of pod names that need to be replaced + displayName: Replace Nodes + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:arrayFieldGroup:replaceNodes + - urn:alm:descriptor:com.tectonic.ui:advanced + + - path: serviceAccount + description: Service Account + displayName: Service Account + x-descriptors: + - urn:alm:descriptor:io.kubernetes:ServiceAccount + - urn:alm:descriptor:com.tectonic.ui:advanced + + - path: config + description: | + JSON object representing configuration overrides. + displayName: Config + + - path: managementApiAuth + description: | + Configuration for connectivity between cass-operator and Management API + displayName: Management API Authentication + statusDescriptors: - path: cassandraOperatorProgress description: Cassandra Operator Progress displayName: Cassandra Operator Progress - x-descriptors: [] + x-descriptors: + - urn:alm:descriptor:text + - path: lastRollingRestart description: Last Rolling Restart displayName: Last Rolling Restart - x-descriptors: [] + x-descriptors: + - urn:alm:descriptor:text + - path: lastServerNodeStarted description: Last Server Node Started displayName: Last Server Node Started - x-descriptors: [] + x-descriptors: + - urn:alm:descriptor:text + + - path: superUserUpserted + description: Super User Upserted + displayName: Super User Upserted + x-descriptors: + - urn:alm:descriptor:text + - path: nodeReplacements - description: Node Replacements + description: | + List of all nodes that have been replaced. displayName: Node Replacements - x-descriptors: [] + - path: nodeStatuses - description: Node Statuses + description: | + Data structure containing information around the health + of all pods in the cluster. displayName: Node Statuses - x-descriptors: [] - - path: superUserUpserted - description: Super User Upserted - displayName: Super User Upserted - x-descriptors: [] required: [] description: > ## Apache Cassandra @@ -245,72 +379,6 @@ spec: 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: @@ -338,7 +406,7 @@ spec: value: cass-operator - name: SKIP_VALIDATING_WEBHOOK value: "TRUE" - image: datastax/cass-operator:1.0.0 + image: registry.connect.redhat.com/datastax/cass-operator:1.0.0 imagePullPolicy: IfNotPresent livenessProbe: exec: @@ -452,10 +520,8 @@ spec: - 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 + - name: DataStax Operator Team + email: cass-operator@datastax.com maturity: stable minKubeVersion: 1.13.0 provider: 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 deleted file mode 100644 index 95547fbc3..000000000 --- a/operator/deploy/olm-catalog/cass-operator/1.1.0/cass-operator.v1.1.0.clusterserviceversion.yaml +++ /dev/null @@ -1,420 +0,0 @@ -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 deleted file mode 100644 index 52e149369..000000000 --- a/operator/deploy/olm-catalog/cass-operator/1.1.0/cassandradatacenters.v1beta1.crd.yaml +++ /dev/null @@ -1,328 +0,0 @@ -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 index 6750c0c38..63b690a73 100644 --- a/operator/deploy/olm-catalog/cass-operator/cass-operator.package.yaml +++ b/operator/deploy/olm-catalog/cass-operator/cass-operator.package.yaml @@ -1,5 +1,5 @@ channels: -- currentCSV: cass-operator.v1.1.0 +- currentCSV: cass-operator.v1.0.0 name: stable defaultChannel: stable packageName: cass-operator diff --git a/operator/example-cassdc-yaml/cassandra-3.11.6/example-cassdc-scorecard.yaml b/operator/example-cassdc-yaml/cassandra-3.11.6/example-cassdc-scorecard.yaml new file mode 100644 index 000000000..7bd5b3f1b --- /dev/null +++ b/operator/example-cassdc-yaml/cassandra-3.11.6/example-cassdc-scorecard.yaml @@ -0,0 +1,23 @@ +apiVersion: cassandra.datastax.com/v1beta1 +kind: CassandraDatacenter +metadata: + name: dc1 + namespace: default +spec: + size: 1 + resources: {} + clusterName: cluster1 + serverVersion: 3.11.6 + racks: + - name: r1 + serverType: cassandra + storageConfig: + cassandraDataVolumeClaimSpec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 500Mi + storageClassName: local-storage + managementApiAuth: + insecure: {} diff --git a/operator/example-cassdc-yaml/dse-6.8.0/example-cassdc-scorecard.yaml b/operator/example-cassdc-yaml/dse-6.8.0/example-cassdc-scorecard.yaml new file mode 100644 index 000000000..37c04fbd5 --- /dev/null +++ b/operator/example-cassdc-yaml/dse-6.8.0/example-cassdc-scorecard.yaml @@ -0,0 +1,23 @@ +apiVersion: cassandra.datastax.com/v1beta1 +kind: CassandraDatacenter +metadata: + name: dc1 + namespace: default +spec: + size: 1 + resources: {} + clusterName: cluster1 + serverVersion: 6.8.0 + racks: + - name: r1 + serverType: dse + storageConfig: + cassandraDataVolumeClaimSpec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 500Mi + storageClassName: local-storage + managementApiAuth: + insecure: {}