diff --git a/docs/examples/kafka/clustering/kf-multinode.yaml b/docs/examples/kafka/clustering/kf-multinode.yaml
index db15b1b2e1..1c32007f8f 100644
--- a/docs/examples/kafka/clustering/kf-multinode.yaml
+++ b/docs/examples/kafka/clustering/kf-multinode.yaml
@@ -5,7 +5,7 @@ metadata:
namespace: demo
spec:
replicas: 3
- version: 3.3.2
+ version: 3.6.1
storage:
accessModes:
- ReadWriteOnce
diff --git a/docs/examples/kafka/clustering/kf-standalone.yaml b/docs/examples/kafka/clustering/kf-standalone.yaml
index 5cb3697dd7..4244760e31 100644
--- a/docs/examples/kafka/clustering/kf-standalone.yaml
+++ b/docs/examples/kafka/clustering/kf-standalone.yaml
@@ -5,7 +5,7 @@ metadata:
namespace: demo
spec:
replicas: 1
- version: 3.3.2
+ version: 3.6.1
storage:
accessModes:
- ReadWriteOnce
diff --git a/docs/examples/kafka/clustering/kf-topology.yaml b/docs/examples/kafka/clustering/kf-topology.yaml
index 21de7703e9..5a50302a52 100644
--- a/docs/examples/kafka/clustering/kf-topology.yaml
+++ b/docs/examples/kafka/clustering/kf-topology.yaml
@@ -4,7 +4,7 @@ metadata:
name: kafka-prod
namespace: demo
spec:
- version: 3.3.2
+ version: 3.6.1
enableSSL: true
tls:
issuerRef:
diff --git a/docs/examples/kafka/monitoring/kf-with-monitoring.yaml b/docs/examples/kafka/monitoring/kf-with-monitoring.yaml
index d152140823..101bfe2567 100644
--- a/docs/examples/kafka/monitoring/kf-with-monitoring.yaml
+++ b/docs/examples/kafka/monitoring/kf-with-monitoring.yaml
@@ -11,7 +11,7 @@ spec:
name: kafka-ca-issuer
kind: Issuer
replicas: 3
- version: 3.4.0
+ version: 3.6.1
storage:
accessModes:
- ReadWriteOnce
diff --git a/docs/examples/mongodb/hidden-node/replicaset.yaml b/docs/examples/mongodb/hidden-node/replicaset.yaml
index ccaa9c4d0e..483c8a488b 100644
--- a/docs/examples/mongodb/hidden-node/replicaset.yaml
+++ b/docs/examples/mongodb/hidden-node/replicaset.yaml
@@ -4,7 +4,7 @@ metadata:
name: mongo-rs-hid
namespace: demo
spec:
- version: "percona-4.4.10"
+ version: "percona-7.0.4"
replicaSet:
name: "replicaset"
podTemplate:
diff --git a/docs/examples/mongodb/hidden-node/sharding.yaml b/docs/examples/mongodb/hidden-node/sharding.yaml
index 9ea4703cba..f95c0a936f 100644
--- a/docs/examples/mongodb/hidden-node/sharding.yaml
+++ b/docs/examples/mongodb/hidden-node/sharding.yaml
@@ -4,7 +4,7 @@ metadata:
name: mongo-sh-hid
namespace: demo
spec:
- version: "percona-4.4.10"
+ version: "percona-7.0.4"
shardTopology:
configServer:
replicas: 3
diff --git a/docs/examples/postgres/custom-version/postgresversion.yaml b/docs/examples/postgres/custom-version/postgresversion.yaml
index 11fb13e1a0..e842c07b88 100644
--- a/docs/examples/postgres/custom-version/postgresversion.yaml
+++ b/docs/examples/postgres/custom-version/postgresversion.yaml
@@ -1,23 +1,39 @@
apiVersion: catalog.kubedb.com/v1alpha1
kind: PostgresVersion
metadata:
- name: timescaledb-2.1.0-pg13
+ name: timescaledb-2.14.2-pg14
spec:
+ archiver:
+ addon:
+ name: postgres-addon
+ tasks:
+ manifestBackup:
+ name: manifest-backup
+ manifestRestore:
+ name: manifest-restore
+ volumeSnapshot:
+ name: volume-snapshot
+ walg:
+ image: ghcr.io/kubedb/postgres-archiver:(v0.6.0)_14.10-alpine
coordinator:
- image: kubedb/pg-coordinator:v0.1.0
+ image: ghcr.io/kubedb/pg-coordinator:v0.29.0
db:
- image: timescale/timescaledb:2.1.0-pg13-oss
+ baseOS: alpine
+ image: timescale/timescaledb:2.14.2-pg14-oss
distribution: TimescaleDB
exporter:
- image: prometheuscommunity/postgres-exporter:v0.9.0
+ image: prometheuscommunity/postgres-exporter:v0.15.0
initContainer:
- image: kubedb/postgres-init:0.1.0
+ image: ghcr.io/kubedb/postgres-init:0.12.0
podSecurityPolicies:
databasePolicyName: postgres-db
+ securityContext:
+ runAsAnyNonRoot: false
+ runAsUser: 70
stash:
addon:
backupTask:
- name: postgres-backup-13.1
+ name: postgres-backup-14.0
restoreTask:
- name: postgres-restore-13.1
- version: "13.13"
+ name: postgres-restore-14.0
+ version: "14.11"
diff --git a/docs/examples/postgres/custom-version/timescale-postgres.yaml b/docs/examples/postgres/custom-version/timescale-postgres.yaml
index db52aca019..028f526f12 100644
--- a/docs/examples/postgres/custom-version/timescale-postgres.yaml
+++ b/docs/examples/postgres/custom-version/timescale-postgres.yaml
@@ -4,7 +4,7 @@ metadata:
name: timescale-postgres
namespace: demo
spec:
- version: "timescaledb-2.1.0-pg13" # points to the name of our custom PostgresVersion
+ version: "timescaledb-2.14.2-pg14" # points to the name of our custom PostgresVersion
storage:
storageClassName: "standard"
accessModes:
diff --git a/docs/examples/singlestore/quickstart/quickstart.yaml b/docs/examples/singlestore/quickstart/quickstart.yaml
new file mode 100644
index 0000000000..7c5b695c7e
--- /dev/null
+++ b/docs/examples/singlestore/quickstart/quickstart.yaml
@@ -0,0 +1,52 @@
+apiVersion: kubedb.com/v1alpha2
+kind: Singlestore
+metadata:
+ name: sdb-quickstart
+ namespace: demo
+spec:
+ version: 8.5.7
+ topology:
+ aggregator:
+ replicas: 3
+ podTemplate:
+ spec:
+ containers:
+ - name: singlestore
+ resources:
+ limits:
+ memory: "2Gi"
+ cpu: "0.5"
+ requests:
+ memory: "2Gi"
+ cpu: "0.5"
+ storage:
+ storageClassName: "standard"
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 1Gi
+ leaf:
+ replicas: 2
+ podTemplate:
+ spec:
+ containers:
+ - name: singlestore
+ resources:
+ limits:
+ memory: "2Gi"
+ cpu: "0.5"
+ requests:
+ memory: "2Gi"
+ cpu: "0.5"
+ storage:
+ storageClassName: "standard"
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 10Gi
+ licenseSecret:
+ name: license-secret
+ storageType: Durable
+ terminationPolicy: WipeOut
\ No newline at end of file
diff --git a/docs/guides/README.md b/docs/guides/README.md
index d0b9521ba8..c4f18f9f5e 100644
--- a/docs/guides/README.md
+++ b/docs/guides/README.md
@@ -27,4 +27,5 @@ Guides to show you how to perform tasks with KubeDB:
- [PostgreSQL](/docs/guides/postgres/README.md). Shows how to manage PostgreSQL using KubeDB.
- [ProxySQL](/docs/guides/proxysql/README.md). Shows how to manage ProxySQL using KubeDB.
- [Redis](/docs/guides/redis/README.md). Shows how to manage Redis using KubeDB.
-- [Kafka](/docs/guides/kafka/README.md). Shows how to manage Redis using KubeDB.
+- [Kafka](/docs/guides/kafka/README.md). Shows how to manage Kafka using KubeDB.
+- [SingleStore](/docs/guides/singlestore/README.md). Shows how to manage SingleStore using KubeDB.
diff --git a/docs/guides/kafka/concepts/appbinding.md b/docs/guides/kafka/concepts/appbinding.md
index 41344d365e..012ce5f488 100644
--- a/docs/guides/kafka/concepts/appbinding.md
+++ b/docs/guides/kafka/concepts/appbinding.md
@@ -70,7 +70,7 @@ spec:
tlsSecret:
name: kafka-client-cert
type: kubedb.com/kafka
- version: 3.4.0
+ version: 3.6.1
```
Here, we are going to describe the sections of an `AppBinding` crd.
diff --git a/docs/guides/kafka/concepts/catalog.md b/docs/guides/kafka/concepts/catalog.md
index 353ed094ee..6d42662279 100644
--- a/docs/guides/kafka/concepts/catalog.md
+++ b/docs/guides/kafka/concepts/catalog.md
@@ -30,30 +30,19 @@ As with all other Kubernetes objects, a KafkaVersion needs `apiVersion`, `kind`,
apiVersion: catalog.kubedb.com/v1alpha1
kind: KafkaVersion
metadata:
- annotations:
- meta.helm.sh/release-name: kubedb-catalog
- meta.helm.sh/release-namespace: kubedb
- creationTimestamp: "2023-03-23T10:15:24Z"
- generation: 2
- labels:
- app.kubernetes.io/instance: kubedb-catalog
- app.kubernetes.io/managed-by: Helm
- app.kubernetes.io/name: kubedb-catalog
- app.kubernetes.io/version: v2023.02.28
- helm.sh/chart: kubedb-catalog-v2023.02.28
- name: 3.4.0
- resourceVersion: "472767"
- uid: 36a167a3-5218-4e32-b96d-d6b5b0c86125
+ name: 3.6.1
spec:
connectCluster:
image: ghcr.io/appscode-images/kafka-connect-cluster:3.6.1
+ cruiseControl:
+ image: ghcr.io/appscode-images/kafka-cruise-control:3.6.1
db:
- image: kubedb/kafka-kraft:3.4.0
+ image: ghcr.io/appscode-images/kafka-kraft:3.6.1
podSecurityPolicies:
databasePolicyName: kafka-db
- version: 3.4.0
- cruiseControl:
- image: ghcr.io/kubedb/cruise-control:3.4.0
+ securityContext:
+ runAsUser: 1001
+ version: 3.6.1
```
### metadata.name
diff --git a/docs/guides/kafka/concepts/kafka.md b/docs/guides/kafka/concepts/kafka.md
index beb578b833..b08edf729a 100644
--- a/docs/guides/kafka/concepts/kafka.md
+++ b/docs/guides/kafka/concepts/kafka.md
@@ -103,7 +103,7 @@ spec:
labels:
release: prometheus
interval: 10s
- version: 3.4.0
+ version: 3.6.1
```
### spec.version
diff --git a/docs/guides/kafka/monitoring/overview.md b/docs/guides/kafka/monitoring/overview.md
index 2c643dcfb9..12427cbdd1 100644
--- a/docs/guides/kafka/monitoring/overview.md
+++ b/docs/guides/kafka/monitoring/overview.md
@@ -60,7 +60,7 @@ spec:
name: kafka-ca-issuer
kind: Issuer
replicas: 3
- version: 3.4.0
+ version: 3.6.1
storage:
accessModes:
- ReadWriteOnce
diff --git a/docs/guides/kafka/monitoring/using-prometheus-operator.md b/docs/guides/kafka/monitoring/using-prometheus-operator.md
index efbd20ce9d..99a45168af 100644
--- a/docs/guides/kafka/monitoring/using-prometheus-operator.md
+++ b/docs/guides/kafka/monitoring/using-prometheus-operator.md
@@ -167,7 +167,7 @@ spec:
name: kafka-ca-issuer
kind: Issuer
replicas: 3
- version: 3.4.0
+ version: 3.6.1
storage:
accessModes:
- ReadWriteOnce
@@ -206,7 +206,7 @@ Now, wait for the database to go into `Running` state.
```bash
$ kubectl get kf -n demo kafka
NAME TYPE VERSION STATUS AGE
-kafka kubedb.com/v1alpha2 3.4.0 Ready 2m24s
+kafka kubedb.com/v1alpha2 3.6.1 Ready 2m24s
```
KubeDB will create a separate stats service with name `{Kafka crd name}-stats` for monitoring purpose.
diff --git a/docs/guides/kafka/quickstart/overview/index.md b/docs/guides/kafka/quickstart/overview/index.md
index ea8c84068a..0ebc781b30 100644
--- a/docs/guides/kafka/quickstart/overview/index.md
+++ b/docs/guides/kafka/quickstart/overview/index.md
@@ -80,7 +80,7 @@ metadata:
namespace: demo
spec:
replicas: 3
- version: 3.3.0
+ version: 3.6.1
storage:
accessModes:
- ReadWriteOnce
diff --git a/docs/guides/kafka/quickstart/overview/yamls/kafka.yaml b/docs/guides/kafka/quickstart/overview/yamls/kafka.yaml
index c81e479377..7ce3511004 100644
--- a/docs/guides/kafka/quickstart/overview/yamls/kafka.yaml
+++ b/docs/guides/kafka/quickstart/overview/yamls/kafka.yaml
@@ -5,7 +5,7 @@ metadata:
namespace: demo
spec:
replicas: 3
- version: 3.3.0
+ version: 3.6.1
storage:
accessModes:
- ReadWriteOnce
diff --git a/docs/guides/mongodb/hidden-node/replicaset.md b/docs/guides/mongodb/hidden-node/replicaset.md
index 6abe47f9ef..e040da10b9 100644
--- a/docs/guides/mongodb/hidden-node/replicaset.md
+++ b/docs/guides/mongodb/hidden-node/replicaset.md
@@ -48,7 +48,7 @@ metadata:
name: mongo-rs-hid
namespace: demo
spec:
- version: "percona-4.4.10"
+ version: "percona-7.0.4"
replicaSet:
name: "replicaset"
podTemplate:
@@ -184,7 +184,7 @@ Auth Secret:
AppBinding:
Metadata:
Annotations:
- kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"kubedb.com/v1alpha2","kind":"MongoDB","metadata":{"annotations":{},"name":"mongo-rs-hid","namespace":"demo"},"spec":{"ephemeralStorage":{"sizeLimit":"900Mi"},"hidden":{"podTemplate":{"spec":{"resources":{"requests":{"cpu":"400m","memory":"400Mi"}}}},"replicas":2,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"2Gi"}},"storageClassName":"standard"}},"podTemplate":{"spec":{"resources":{"requests":{"cpu":"600m","memory":"600Mi"}}}},"replicaSet":{"name":"replicaset"},"replicas":3,"storageEngine":"inMemory","storageType":"Ephemeral","terminationPolicy":"WipeOut","version":"percona-4.4.10"}}
+ kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"kubedb.com/v1alpha2","kind":"MongoDB","metadata":{"annotations":{},"name":"mongo-rs-hid","namespace":"demo"},"spec":{"ephemeralStorage":{"sizeLimit":"900Mi"},"hidden":{"podTemplate":{"spec":{"resources":{"requests":{"cpu":"400m","memory":"400Mi"}}}},"replicas":2,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"2Gi"}},"storageClassName":"standard"}},"podTemplate":{"spec":{"resources":{"requests":{"cpu":"600m","memory":"600Mi"}}}},"replicaSet":{"name":"replicaset"},"replicas":3,"storageEngine":"inMemory","storageType":"Ephemeral","terminationPolicy":"WipeOut","version":"percona-7.0.4"}}
Creation Timestamp: 2022-10-31T05:05:38Z
Labels:
@@ -214,7 +214,7 @@ AppBinding:
Secret:
Name: mongo-rs-hid-auth
Type: kubedb.com/mongodb
- Version: 4.4.10
+ Version: 7.0.4
Events:
Type Reason Age From Message
@@ -283,7 +283,7 @@ kind: MongoDB
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"MongoDB","metadata":{"annotations":{},"name":"mongo-rs-hid","namespace":"demo"},"spec":{"ephemeralStorage":{"sizeLimit":"900Mi"},"hidden":{"podTemplate":{"spec":{"resources":{"requests":{"cpu":"400m","memory":"400Mi"}}}},"replicas":2,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"2Gi"}},"storageClassName":"standard"}},"podTemplate":{"spec":{"resources":{"requests":{"cpu":"600m","memory":"600Mi"}}}},"replicaSet":{"name":"replicaset"},"replicas":3,"storageEngine":"inMemory","storageType":"Ephemeral","terminationPolicy":"WipeOut","version":"percona-4.4.10"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"MongoDB","metadata":{"annotations":{},"name":"mongo-rs-hid","namespace":"demo"},"spec":{"ephemeralStorage":{"sizeLimit":"900Mi"},"hidden":{"podTemplate":{"spec":{"resources":{"requests":{"cpu":"400m","memory":"400Mi"}}}},"replicas":2,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"2Gi"}},"storageClassName":"standard"}},"podTemplate":{"spec":{"resources":{"requests":{"cpu":"600m","memory":"600Mi"}}}},"replicaSet":{"name":"replicaset"},"replicas":3,"storageEngine":"inMemory","storageType":"Ephemeral","terminationPolicy":"WipeOut","version":"percona-7.0.4"}}
creationTimestamp: "2022-10-31T05:03:50Z"
finalizers:
- kubedb.com
@@ -445,7 +445,7 @@ spec:
storageEngine: inMemory
storageType: Ephemeral
terminationPolicy: WipeOut
- version: percona-4.4.10
+ version: percona-7.0.4
status:
conditions:
- lastTransitionTime: "2022-10-31T05:03:50Z"
@@ -500,10 +500,10 @@ OX4yb!IFm;~yAHkD
$ kubectl exec -it mongo-rs-hid-0 -n demo bash
bash-4.4$ mongo admin -u root -p 'OX4yb!IFm;~yAHkD'
-Percona Server for MongoDB shell version v4.4.10-11
+Percona Server for MongoDB shell version v7.0.4-11
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("11890d64-37da-43dd-acb6-0f36a3678875") }
-Percona Server for MongoDB server version: v4.4.10-11
+Percona Server for MongoDB server version: v7.0.4-11
Welcome to the Percona Server for MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
@@ -856,9 +856,9 @@ We will exec in `mongo-rs-hid-hidden-0`(which is a hidden node right now) to che
```bash
$ kubectl exec -it mongo-rs-hid-hidden-0 -n demo bash
bash-4.4$ mongo admin -u root -p 'OX4yb!IFm;~yAHkD'
-Percona Server for MongoDB server version: v4.4.10-11
+Percona Server for MongoDB server version: v7.0.4-11
connecting to: mongodb://127.0.0.1:27017/admin
-MongoDB server version: 4.4.10
+MongoDB server version: 7.0.4
Welcome to the MongoDB shell.
replicaset:SECONDARY> rs.slaveOk()
@@ -935,9 +935,9 @@ Now verify the automatic failover, Let's exec in `mongo-rs-hid-0` pod,
```bash
$ kubectl exec -it mongo-rs-hid-0 -n demo bash
bash-4.4:/$ mongo admin -u root -p 'OX4yb!IFm;~yAHkD'
-Percona Server for MongoDB server version: v4.4.10-11
+Percona Server for MongoDB server version: v7.0.4-11
connecting to: mongodb://127.0.0.1:27017/admin
-MongoDB server version: 4.4.10
+MongoDB server version: 7.0.4
Welcome to the MongoDB shell.
replicaset:SECONDARY> rs.isMaster().primary
diff --git a/docs/guides/mongodb/hidden-node/sharding.md b/docs/guides/mongodb/hidden-node/sharding.md
index d969f141e4..c4699ef356 100644
--- a/docs/guides/mongodb/hidden-node/sharding.md
+++ b/docs/guides/mongodb/hidden-node/sharding.md
@@ -48,7 +48,7 @@ metadata:
name: mongo-sh-hid
namespace: demo
spec:
- version: "percona-4.4.10"
+ version: "percona-7.0.4"
shardTopology:
configServer:
replicas: 3
@@ -122,7 +122,7 @@ All the types of nodes `Shard`, `ConfigServer` & `Mongos` are deployed as statef
```bash
$ kubectl get mg,sts,svc,pvc,pv -n demo
NAME VERSION STATUS AGE
-mongodb.kubedb.com/mongo-sh-hid percona-4.4.10 Ready 4m46s
+mongodb.kubedb.com/mongo-sh-hid percona-7.0.4 Ready 4m46s
NAME READY AGE
statefulset.apps/mongo-sh-hid-configsvr 3/3 4m46s
@@ -163,7 +163,7 @@ kind: MongoDB
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"MongoDB","metadata":{"annotations":{},"name":"mongo-sh-hid","namespace":"demo"},"spec":{"hidden":{"podTemplate":{"spec":{"resources":{"requests":{"cpu":"400m","memory":"400Mi"}}}},"replicas":2,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"2Gi"}},"storageClassName":"standard"}},"shardTopology":{"configServer":{"ephemeralStorage":{},"replicas":3},"mongos":{"replicas":2},"shard":{"ephemeralStorage":{},"replicas":3,"shards":2}},"storageEngine":"inMemory","storageType":"Ephemeral","terminationPolicy":"WipeOut","version":"percona-4.4.10"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"MongoDB","metadata":{"annotations":{},"name":"mongo-sh-hid","namespace":"demo"},"spec":{"hidden":{"podTemplate":{"spec":{"resources":{"requests":{"cpu":"400m","memory":"400Mi"}}}},"replicas":2,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"2Gi"}},"storageClassName":"standard"}},"shardTopology":{"configServer":{"ephemeralStorage":{},"replicas":3},"mongos":{"replicas":2},"shard":{"ephemeralStorage":{},"replicas":3,"shards":2}},"storageEngine":"inMemory","storageType":"Ephemeral","terminationPolicy":"WipeOut","version":"percona-7.0.4"}}
creationTimestamp: "2022-10-31T05:59:43Z"
finalizers:
- kubedb.com
@@ -466,7 +466,7 @@ spec:
storageEngine: inMemory
storageType: Ephemeral
terminationPolicy: WipeOut
- version: percona-4.4.10
+ version: percona-7.0.4
status:
conditions:
- lastTransitionTime: "2022-10-31T05:59:43Z"
@@ -541,10 +541,10 @@ mongo-sh-hid-mongos-1 1/1 Running 0 6m20s
$ kubectl exec -it mongo-sh-hid-mongos-0 -n demo bash
mongodb@mongo-sh-mongos-0:/$ mongo admin -u root -p '6&UiN5;qq)Tnai=7'
-Percona Server for MongoDB shell version v4.4.10-11
+Percona Server for MongoDB shell version v7.0.4-11
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("e6979884-81b0-41c9-9745-50654f6fb39b") }
-Percona Server for MongoDB server version: v4.4.10-11
+Percona Server for MongoDB server version: v7.0.4-11
Welcome to the Percona Server for MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
@@ -600,7 +600,7 @@ mongos> sh.status()
{ "_id" : "shard0", "host" : "shard0/mongo-sh-hid-shard0-0.mongo-sh-hid-shard0-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard0-1.mongo-sh-hid-shard0-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard0-2.mongo-sh-hid-shard0-pods.demo.svc.cluster.local:27017", "state" : 1, "tags" : [ "shard0" ] }
{ "_id" : "shard1", "host" : "shard1/mongo-sh-hid-shard1-0.mongo-sh-hid-shard1-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard1-1.mongo-sh-hid-shard1-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard1-2.mongo-sh-hid-shard1-pods.demo.svc.cluster.local:27017", "state" : 1, "tags" : [ "shard1" ] }
active mongoses:
- "4.4.10-11" : 2
+ "7.0.4-11" : 2
autosplit:
Currently enabled: yes
balancer:
@@ -648,10 +648,10 @@ kubectl exec -it -n demo pod/mongo-sh-hid-shard1-0 -- bash
root@mongo-sh-hid-shard0-1:/ mongo admin -u root -p '6&UiN5;qq)Tnai=7'
Defaulted container "mongodb" out of: mongodb, copy-config (init)
-Percona Server for MongoDB shell version v4.4.10-11
+Percona Server for MongoDB shell version v7.0.4-11
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("86dadf16-fff2-4483-b3ee-1ca7fc94229f") }
-Percona Server for MongoDB server version: v4.4.10-11
+Percona Server for MongoDB server version: v7.0.4-11
Welcome to the Percona Server for MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
@@ -816,7 +816,7 @@ mongos> sh.status()
{ "_id" : "shard0", "host" : "shard0/mongo-sh-hid-shard0-0.mongo-sh-hid-shard0-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard0-1.mongo-sh-hid-shard0-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard0-2.mongo-sh-hid-shard0-pods.demo.svc.cluster.local:27017", "state" : 1, "tags" : [ "shard0" ] }
{ "_id" : "shard1", "host" : "shard1/mongo-sh-hid-shard1-0.mongo-sh-hid-shard1-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard1-1.mongo-sh-hid-shard1-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard1-2.mongo-sh-hid-shard1-pods.demo.svc.cluster.local:27017", "state" : 1, "tags" : [ "shard1" ] }
active mongoses:
- "4.4.10-11" : 2
+ "7.0.4-11" : 2
autosplit:
Currently enabled: yes
balancer:
@@ -893,7 +893,7 @@ mongos> sh.status()
{ "_id" : "shard0", "host" : "shard0/mongo-sh-hid-shard0-0.mongo-sh-hid-shard0-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard0-1.mongo-sh-hid-shard0-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard0-2.mongo-sh-hid-shard0-pods.demo.svc.cluster.local:27017", "state" : 1, "tags" : [ "shard0" ] }
{ "_id" : "shard1", "host" : "shard1/mongo-sh-hid-shard1-0.mongo-sh-hid-shard1-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard1-1.mongo-sh-hid-shard1-pods.demo.svc.cluster.local:27017,mongo-sh-hid-shard1-2.mongo-sh-hid-shard1-pods.demo.svc.cluster.local:27017", "state" : 1, "tags" : [ "shard1" ] }
active mongoses:
- "4.4.10-11" : 2
+ "7.0.4-11" : 2
autosplit:
Currently enabled: yes
balancer:
diff --git a/docs/guides/mysql/quickstart/index.md b/docs/guides/mysql/quickstart/index.md
index 057f087f1e..368c6e984f 100644
--- a/docs/guides/mysql/quickstart/index.md
+++ b/docs/guides/mysql/quickstart/index.md
@@ -356,7 +356,7 @@ root
$ kubectl get secrets -n demo mysql-quickstart-auth -o jsonpath='{.data.\password}' | base64 -d
H(Y.s)pg&cX1Ds3J
```
-we will exec into the pod `mysql-quickstart-0` and connect to the database uisng username and password
+we will exec into the pod `mysql-quickstart-0` and connect to the database using username and password
```bash
$ kubectl exec -it -n demo mysql-quickstart-0 -- bash
diff --git a/docs/guides/postgres/custom-versions/setup.md b/docs/guides/postgres/custom-versions/setup.md
index d5e469e6db..8c1978af99 100644
--- a/docs/guides/postgres/custom-versions/setup.md
+++ b/docs/guides/postgres/custom-versions/setup.md
@@ -61,29 +61,42 @@ From there, we would define a PostgresVersion that contains this new image. Let'
apiVersion: catalog.kubedb.com/v1alpha1
kind: PostgresVersion
metadata:
- name: timescaledb-2.1.0-pg13
+ name: timescaledb-2.14.2-pg14
spec:
+ archiver:
+ addon:
+ name: postgres-addon
+ tasks:
+ manifestBackup:
+ name: manifest-backup
+ manifestRestore:
+ name: manifest-restore
+ volumeSnapshot:
+ name: volume-snapshot
+ walg:
+ image: ghcr.io/kubedb/postgres-archiver:(v0.6.0)_14.10-alpine
coordinator:
- image: kubedb/pg-coordinator:v0.8.0
+ image: ghcr.io/kubedb/pg-coordinator:v0.29.0
db:
- image: timescale/timescaledb:2.1.0-pg13-oss
+ baseOS: alpine
+ image: timescale/timescaledb:2.14.2-pg14-oss
distribution: TimescaleDB
exporter:
- image: prometheuscommunity/postgres-exporter:v0.9.0
+ image: prometheuscommunity/postgres-exporter:v0.15.0
initContainer:
- image: kubedb/postgres-init:0.4.0
+ image: ghcr.io/kubedb/postgres-init:0.12.0
podSecurityPolicies:
databasePolicyName: postgres-db
securityContext:
- runAsAnyNonRoot: true
+ runAsAnyNonRoot: false
runAsUser: 70
stash:
addon:
backupTask:
- name: postgres-backup-13.1
+ name: postgres-backup-14.0
restoreTask:
- name: postgres-restore-13.1
- version: "13.13"
+ name: postgres-restore-14.0
+ version: "14.11"
```
Once we add this PostgresVersion we can use it in a new Postgres like:
@@ -95,7 +108,7 @@ metadata:
name: timescale-postgres
namespace: demo
spec:
- version: "timescaledb-2.1.0-pg13" # points to the name of our custom PostgresVersion
+ version: "timescaledb-2.14.2-pg14" # points to the name of our custom PostgresVersion
storage:
storageClassName: "standard"
accessModes:
diff --git a/docs/guides/singlestore/README.md b/docs/guides/singlestore/README.md
new file mode 100644
index 0000000000..b5cfacad89
--- /dev/null
+++ b/docs/guides/singlestore/README.md
@@ -0,0 +1,60 @@
+---
+title: SingleStore
+menu:
+ docs_{{ .version }}:
+ identifier: guides-singlestore-readme
+ name: SingleStore
+ parent: guides-singlestore
+ weight: 10
+menu_name: docs_{{ .version }}
+section_menu_id: guides
+url: /docs/{{ .version }}/guides/singlestore/
+aliases:
+ - /docs/{{ .version }}/guides/singlestore/README/
+---
+> New to KubeDB? Please start [here](/docs/README.md).
+
+# Overview
+
+SingleStore, a distributed SQL database for real-time analytics, transactional workloads, and operational applications. With its in-memory processing and scalable architecture, SingleStore enables organizations to achieve high-performance and low-latency data processing across diverse data sets, making it ideal for modern data-intensive applications and analytical workflows.
+
+## Supported SingleStore Features
+
+| Features | Availability |
+|----------------------------------------------------------------------------|:------------:|
+| Clustering | ✓ |
+| Authentication & Authorization | ✓ |
+| Initialize using Script (\*.sql, \*sql.gz and/or \*.sh) | ✓ |
+| Backup/Recovery: Instant, Scheduled ( [KubeStash](https://kubestash.com/)) | ✓ |
+| Custom Configuration | ✓ |
+| Initializing from Snapshot ( [KubeStash](https://kubestash.com/)) | ✓ |
+| TLS: Add ( [Cert Manager]((https://cert-manager.io/docs/))) | ✓ |
+| Monitoring with Prometheus & Grafana | ✓ |
+| Builtin Prometheus Discovery | ✓ |
+| Using Prometheus operator | ✓ |
+| Externally manageable Auth Secret | ✓ |
+| Reconfigurable Health Checker | ✓ |
+| Persistent volume | ✓ |
+| SingleStore Studio (UI) | ✓ |
+
+
+## Supported SingleStore Versions
+
+KubeDB supports the following SingleSore Versions.
+- `8.1.32`
+- `8.5.7`
+
+## Life Cycle of a SingleStore Object
+
+
+
+
+
+
+
+## User Guide
+
+- [Quickstart SingleStore](/docs/guides/singlestore/quickstart/quickstart.md) with KubeDB Operator.
+- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md).
\ No newline at end of file
diff --git a/docs/guides/singlestore/_index.md b/docs/guides/singlestore/_index.md
new file mode 100644
index 0000000000..e2c78dcb4c
--- /dev/null
+++ b/docs/guides/singlestore/_index.md
@@ -0,0 +1,10 @@
+---
+title: SingleStore
+menu:
+ docs_{{ .version }}:
+ identifier: guides-singlestore
+ name: SingleStore
+ parent: guides
+ weight: 40
+menu_name: docs_{{ .version }}
+---
diff --git a/docs/guides/singlestore/images/singlestore-lifecycle.png b/docs/guides/singlestore/images/singlestore-lifecycle.png
new file mode 100644
index 0000000000..edf0f03569
Binary files /dev/null and b/docs/guides/singlestore/images/singlestore-lifecycle.png differ
diff --git a/docs/guides/singlestore/quickstart/_index.md b/docs/guides/singlestore/quickstart/_index.md
new file mode 100644
index 0000000000..e0f4483219
--- /dev/null
+++ b/docs/guides/singlestore/quickstart/_index.md
@@ -0,0 +1,10 @@
+---
+title: SingleStore Quickstart
+menu:
+ docs_{{ .version }}:
+ identifier: sdb-quickstart-singlestore
+ name: Quickstart
+ parent: guides-singlestore
+ weight: 15
+menu_name: docs_{{ .version }}
+---
diff --git a/docs/guides/singlestore/quickstart/images/singlestore-lifecycle.png b/docs/guides/singlestore/quickstart/images/singlestore-lifecycle.png
new file mode 100644
index 0000000000..edf0f03569
Binary files /dev/null and b/docs/guides/singlestore/quickstart/images/singlestore-lifecycle.png differ
diff --git a/docs/guides/singlestore/quickstart/images/studio-1.png b/docs/guides/singlestore/quickstart/images/studio-1.png
new file mode 100644
index 0000000000..43fce07685
Binary files /dev/null and b/docs/guides/singlestore/quickstart/images/studio-1.png differ
diff --git a/docs/guides/singlestore/quickstart/images/studio-2.png b/docs/guides/singlestore/quickstart/images/studio-2.png
new file mode 100644
index 0000000000..7c89425291
Binary files /dev/null and b/docs/guides/singlestore/quickstart/images/studio-2.png differ
diff --git a/docs/guides/singlestore/quickstart/quickstart.md b/docs/guides/singlestore/quickstart/quickstart.md
new file mode 100644
index 0000000000..a35ac11aac
--- /dev/null
+++ b/docs/guides/singlestore/quickstart/quickstart.md
@@ -0,0 +1,577 @@
+---
+title: SingleStore Quickstart
+menu:
+ docs_{{ .version }}:
+ identifier: sdb-quickstart-quickstart
+ name: Overview
+ parent: sdb-quickstart-singlestore
+ weight: 15
+menu_name: docs_{{ .version }}
+section_menu_id: guides
+---
+
+> New to KubeDB? Please start [here](/docs/README.md).
+
+# SingleStore QuickStart
+
+This tutorial will show you how to use KubeDB to run a SingleStore database.
+
+
+
+
+
+> Note: The yaml files used in this tutorial are stored in [docs/guides/singlestore/quickstart/yamls](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/guides/singlestore/quickstart/yamls) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs).
+
+## Before You Begin
+
+- At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/).
+
+- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md) and make sure install with helm command including `--set global.featureGates.Singlestore=true` to ensure SingleStore crd.
+- [StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/) is required to run KubeDB. Check the available StorageClass in cluster.
+
+ ```bash
+ $ kubectl get storageclasses
+ NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
+ standard (default) rancher.io/local-path Delete WaitForFirstConsumer false 6h22m
+ ```
+
+- To keep things isolated, this tutorial uses a separate namespace called `demo` throughout this tutorial.
+
+ ```bash
+ $ kubectl create ns demo
+ namespace/demo created
+ ```
+
+## Find Available SingleStoreVersion
+
+When you have installed KubeDB, it has created `SinglestoreVersion` crd for all supported SingleStore versions. Check it by using the `kubectl get singlestoreversions` command. You can also use `sdbv` shorthand instead of `singlestoreversions`.
+
+```bash
+$ kubectl get singlestoreversions
+NAME VERSION DB_IMAGE DEPRECATED AGE
+8.1.32 8.1.32 ghcr.io/appscode-images/singlestore-node:alma-8.1.32-e3d3cde6da 72m
+8.5.7 8.5.7 ghcr.io/appscode-images/singlestore-node:alma-8.5.7-bf633c1a54 72m
+
+```
+## Create SingleStore License Secret
+
+We need SingleStore License to create SingleStore Database. So, Ensure that you have acquired a license and then simply pass the license by secret.
+
+```bash
+$ kubectl create secret generic -n demo license-secret \
+ --from-literal=username=license \
+ --from-literal=password='your-license-set-here'
+secret/license-secret created
+```
+
+## Create a SingleStore database
+
+KubeDB implements a `Singlestore` CRD to define the specification of a SingleStore database. Below is the `Singlestore` object created in this tutorial.
+
+```yaml
+apiVersion: kubedb.com/v1alpha2
+kind: Singlestore
+metadata:
+ name: sdb-quickstart
+ namespace: demo
+spec:
+ version: "8.5.7"
+ topology:
+ aggregator:
+ replicas: 1
+ podTemplate:
+ spec:
+ containers:
+ - name: singlestore
+ resources:
+ limits:
+ memory: "2Gi"
+ cpu: "0.5"
+ requests:
+ memory: "2Gi"
+ cpu: "0.5"
+ storage:
+ storageClassName: "standard"
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 1Gi
+ leaf:
+ replicas: 2
+ podTemplate:
+ spec:
+ containers:
+ - name: singlestore
+ resources:
+ limits:
+ memory: "2Gi"
+ cpu: "0.5"
+ requests:
+ memory: "2Gi"
+ cpu: "0.5"
+ storage:
+ storageClassName: "standard"
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 10Gi
+ licenseSecret:
+ name: license-secret
+ storageType: Durable
+ terminationPolicy: WipeOut
+ serviceTemplates:
+ - alias: primary
+ spec:
+ type: LoadBalancer
+ ports:
+ - name: http
+ port: 9999
+```
+
+```bash
+$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/singlestore/quickstart/yamls/quickstart.yaml
+singlestore.kubedb.com/sdb-quickstart created
+```
+Here,
+
+- `spec.version` is the name of the SinglestoreVersion CRD where the docker images are specified. In this tutorial, a SingleStore `8.5.37` database is going to be created.
+- `spec.topology` specifies that it will be used as cluster mode. If this field is nil it will be work as standalone mode.
+- `spec.topology.aggregator.replicas` or `spec.topology.leaf.replicas` specifies that the number replicas that will be used for aggregator or leaf.
+- `spec.storageType` specifies the type of storage that will be used for SingleStore database. It can be `Durable` or `Ephemeral`. Default value of this field is `Durable`. If `Ephemeral` is used then KubeDB will create SingleStore database using `EmptyDir` volume. In this case, you don't have to specify `spec.storage` field. This is useful for testing purposes.
+- `spec.topology.aggregator.storage` or `spec.topology.leaf.storage` specifies the StorageClass of PVC dynamically allocated to store data for this database. This storage spec will be passed to the StatefulSet created by KubeDB operator to run database pods. You can specify any StorageClass available in your cluster with appropriate resource requests.
+- `spec.terminationPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `Singlestore` crd or which resources KubeDB should keep or delete when you delete `Singlestore` crd. If admission webhook is enabled, It prevents users from deleting the database as long as the `spec.terminationPolicy` is set to `DoNotTerminate`. Learn details of all `TerminationPolicy` [here](/docs/guides/mysql/concepts/database/index.md#specterminationpolicy)
+
+> Note: `spec.storage` section is used to create PVC for database pod. It will create PVC with storage size specified in `storage.resources.requests` field. Don't specify limits here. PVC does not get resized automatically.
+
+KubeDB operator watches for `Singlestore` objects using Kubernetes api. When a `Singlestore` object is created, KubeDB operator will create new StatefulSet and Service with the matching SingleStore object name. KubeDB operator will also create a governing service for StatefulSets, if one is not already present.
+
+```bash
+$ kubectl get petset -n demo
+NAME READY AGE
+sdb-quickstart-leaf 2/2 33s
+sdb-quickstart-aggregator 1/1 37s
+$ kubectl get pvc -n demo
+NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
+data-sdb-quickstart-leaf-0 Bound pvc-4f45c51b-47d4-4254-8275-782bf3588667 10Gi RWO standard 42s
+data-sdb-quickstart-leaf-1 Bound pvc-769e68f4-80a9-4e3e-b2bc-e974534b9dee 10Gi RWO standard 35s
+data-sdb-quickstart-aggregator-0 Bound pvc-75057e3d-e1d7-4770-905b-6049f2edbcde 1Gi RWO standard 46s
+$ kubectl get pv -n demo
+NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
+pvc-4f45c51b-47d4-4254-8275-782bf3588667 10Gi RWO Delete Bound demo/data-sdb-quickstart-leaf-0 standard 87s
+pvc-75057e3d-e1d7-4770-905b-6049f2edbcde 1Gi RWO Delete Bound demo/data-sdb-quickstart-master-aggregator-0 standard 91s
+pvc-769e68f4-80a9-4e3e-b2bc-e974534b9dee 10Gi RWO Delete Bound demo/data-sdb-quickstart-leaf-1 standard 80s
+$ kubectl get service -n demo
+NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
+sdb-quickstart LoadBalancer 10.96.27.144 192.10.25.36 3306:32076/TCP,8081:30910/TCP 2m1s
+sdb-quickstart-pods ClusterIP None 3306/TCP 2m1s
+
+```
+
+KubeDB operator sets the `status.phase` to `Running` once the database is successfully created. Run the following command to see the modified Singlestore object:
+
+```yaml
+➤ kubectl get sdb -n demo sdb-quickstart -oyaml
+
+ apiVersion: kubedb.com/v1alpha2
+kind: Singlestore
+metadata:
+ annotations:
+ kubectl.kubernetes.io/last-applied-configuration: |
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"Singlestore","metadata":{"annotations":{},"name":"sdb-quickstart","namespace":"demo"},"spec":{"licenseSecret":{"name":"license-secret"},"serviceTemplates":[{"alias":"primary","spec":{"ports":[{"name":"http","port":9999}],"type":"LoadBalancer"}}],"storageType":"Durable","terminationPolicy":"WipeOut","topology":{"aggregator":{"podTemplate":{"spec":{"containers":[{"name":"singlestore","resources":{"limits":{"cpu":"0.5","memory":"2Gi"},"requests":{"cpu":"0.5","memory":"2Gi"}}}]}},"replicas":1,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"}},"leaf":{"podTemplate":{"spec":{"containers":[{"name":"singlestore","resources":{"limits":{"cpu":"0.5","memory":"2Gi"},"requests":{"cpu":"0.5","memory":"2Gi"}}}]}},"replicas":2,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"10Gi"}},"storageClassName":"standard"}}},"version":"8.5.7"}}
+ creationTimestamp: "2024-05-06T06:52:58Z"
+ finalizers:
+ - kubedb.com
+ generation: 2
+ name: sdb-quickstart
+ namespace: demo
+ resourceVersion: "448498"
+ uid: 29d6a814-e801-45b5-8217-b59fc77d84e5
+spec:
+ authSecret:
+ name: sdb-quickstart-root-cred
+ healthChecker:
+ failureThreshold: 1
+ periodSeconds: 10
+ timeoutSeconds: 10
+ licenseSecret:
+ name: license-secret
+ podPlacementPolicy:
+ name: default
+ serviceTemplates:
+ - alias: primary
+ metadata: {}
+ spec:
+ ports:
+ - name: http
+ port: 9999
+ type: LoadBalancer
+ storageType: Durable
+ terminationPolicy: WipeOut
+ topology:
+ aggregator:
+ podPlacementPolicy:
+ name: default
+ podTemplate:
+ controller: {}
+ metadata: {}
+ spec:
+ containers:
+ - name: singlestore
+ resources:
+ limits:
+ cpu: 500m
+ memory: 2Gi
+ requests:
+ cpu: 500m
+ memory: 2Gi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ runAsGroup: 998
+ runAsNonRoot: true
+ runAsUser: 999
+ seccompProfile:
+ type: RuntimeDefault
+ - name: singlestore-coordinator
+ resources:
+ limits:
+ memory: 256Mi
+ requests:
+ cpu: 200m
+ memory: 256Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ runAsGroup: 998
+ runAsNonRoot: true
+ runAsUser: 999
+ seccompProfile:
+ type: RuntimeDefault
+ initContainers:
+ - name: singlestore-init
+ resources:
+ limits:
+ memory: 512Mi
+ requests:
+ cpu: 200m
+ memory: 512Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ runAsGroup: 998
+ runAsNonRoot: true
+ runAsUser: 999
+ seccompProfile:
+ type: RuntimeDefault
+ securityContext:
+ fsGroup: 999
+ replicas: 1
+ storage:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 1Gi
+ storageClassName: standard
+ leaf:
+ podPlacementPolicy:
+ name: default
+ podTemplate:
+ controller: {}
+ metadata: {}
+ spec:
+ containers:
+ - name: singlestore
+ resources:
+ limits:
+ cpu: 500m
+ memory: 2Gi
+ requests:
+ cpu: 500m
+ memory: 2Gi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ runAsGroup: 998
+ runAsNonRoot: true
+ runAsUser: 999
+ seccompProfile:
+ type: RuntimeDefault
+ - name: singlestore-coordinator
+ resources:
+ limits:
+ memory: 256Mi
+ requests:
+ cpu: 200m
+ memory: 256Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ runAsGroup: 998
+ runAsNonRoot: true
+ runAsUser: 999
+ seccompProfile:
+ type: RuntimeDefault
+ initContainers:
+ - name: singlestore-init
+ resources:
+ limits:
+ memory: 512Mi
+ requests:
+ cpu: 200m
+ memory: 512Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ runAsGroup: 998
+ runAsNonRoot: true
+ runAsUser: 999
+ seccompProfile:
+ type: RuntimeDefault
+ securityContext:
+ fsGroup: 999
+ replicas: 2
+ storage:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 10Gi
+ storageClassName: standard
+ version: 8.5.7
+status:
+ conditions:
+ - lastTransitionTime: "2024-05-06T06:53:06Z"
+ message: 'The KubeDB operator has started the provisioning of Singlestore: demo/sdb-quickstart'
+ observedGeneration: 2
+ reason: DatabaseProvisioningStartedSuccessfully
+ status: "True"
+ type: ProvisioningStarted
+ - lastTransitionTime: "2024-05-06T06:56:05Z"
+ message: All Aggregator replicas are ready for Singlestore demo/sdb-quickstart
+ observedGeneration: 2
+ reason: AllReplicasReady
+ status: "True"
+ type: ReplicaReady
+ - lastTransitionTime: "2024-05-06T06:54:17Z"
+ message: database demo/sdb-quickstart is accepting connection
+ observedGeneration: 2
+ reason: AcceptingConnection
+ status: "True"
+ type: AcceptingConnection
+ - lastTransitionTime: "2024-05-06T06:54:17Z"
+ message: database demo/sdb-quickstart is ready
+ observedGeneration: 2
+ reason: AllReplicasReady
+ status: "True"
+ type: Ready
+ - lastTransitionTime: "2024-05-06T06:54:18Z"
+ message: 'The Singlestore: demo/sdb-quickstart is successfully provisioned.'
+ observedGeneration: 2
+ reason: DatabaseSuccessfullyProvisioned
+ status: "True"
+ type: Provisioned
+ phase: Ready
+
+
+```
+
+## Connect with SingleStore database
+
+KubeDB operator has created a new Secret called `sdb-quickstart-root-cred` *(format: {singlestore-object-name}-root-cred)* for storing the password for `singlestore` superuser. This secret contains a `username` key which contains the *username* for SingleStore superuser and a `password` key which contains the *password* for SingleStore superuser.
+
+If you want to use an existing secret please specify that when creating the SingleStore object using `spec.authSecret.name`. While creating this secret manually, make sure the secret contains these two keys containing data `username` and `password` and also make sure of using `root` as value of `username`. For more details see [here](/docs/guides/mysql/concepts/database/index.md#specdatabasesecret).
+
+Now, we need `username` and `password` to connect to this database from `kubectl exec` command. In this example `sdb-quickstart-root-cred` secret holds username and password
+
+```bash
+$ kubectl get pod -n demo sdb-quickstart-master-aggregator-0 -oyaml | grep podIP
+ podIP: 10.244.0.14
+$ kubectl get secrets -n demo sdb-quickstart-root-cred -o jsonpath='{.data.\username}' | base64 -d
+ root
+$ kubectl get secrets -n demo sdb-quickstart-root-cred -o jsonpath='{.data.\password}' | base64 -d
+ J0h_BUdJB8mDO31u
+```
+we will exec into the pod `sdb-quickstart-master-aggregator-0` and connect to the database using username and password
+
+```bash
+$ kubectl exec -it -n demo sdb-quickstart-aggregator-0 -- bash
+ Defaulting container name to singlestore.
+ Use 'kubectl describe pod/sdb-quickstart-aggregator-0 -n demo' to see all of the containers in this pod.
+
+ [memsql@sdb-quickstart-master-aggregator-0 /]$ memsql -uroot -p"J0h_BUdJB8mDO31u"
+ singlestore-client: [Warning] Using a password on the command line interface can be insecure.
+ Welcome to the MySQL monitor. Commands end with ; or \g.
+ Your MySQL connection id is 1114
+ Server version: 5.7.32 SingleStoreDB source distribution (compatible; MySQL Enterprise & MySQL Commercial)
+
+ Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
+
+ Oracle is a registered trademark of Oracle Corporation and/or its
+ affiliates. Other names may be trademarks of their respective
+ owners.
+
+ Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+
+ singlestore> show databases;
+ +--------------------+
+ | Database |
+ +--------------------+
+ | cluster |
+ | information_schema |
+ | memsql |
+ | singlestore_health |
+ +--------------------+
+ 4 rows in set (0.00 sec)
+
+```
+You can also connect with database management tools like [singlestore-studio](https://docs.singlestore.com/db/v8.5/reference/singlestore-tools-reference/singlestore-studio/)
+
+You can simply access to SingleStore studio by forwarding the Primary service port to any of your localhost port. Or, Accessing through ExternalP's 8081 port is also an option.
+
+```bash
+$ kubectl port-forward -n demo service/sdb-quickstart 8081
+Forwarding from 127.0.0.1:8081 -> 8081
+Forwarding from [::1]:8081 -> 8081
+```
+Lets, open your browser and go to the http://localhost:8081 or with TLS https://localhost:8081 then click on `Add or Create Cluster` option.
+Then choose `Add Existing Cluster` and click on `next` and you will get an interface like that below:
+
+
+
+
+
+After giving the all information you can see like this below UI image.
+
+
+
+
+
+## Database TerminationPolicy
+
+This field is used to regulate the deletion process of the related resources when `Singlestore` object is deleted. User can set the value of this field according to their needs. The available options and their use case scenario is described below:
+
+**DoNotTerminate:**
+
+When `terminationPolicy` is set to `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, It prevents users from deleting the database as long as the `spec.terminationPolicy` is set to `DoNotTerminate`. You can see this below:
+
+```bash
+$ kubectl delete sdb sdb-quickstart -n demo
+The Singlestore "sdb-quickstart" is invalid: spec.terminationPolicy: Invalid value: "sdb-quickstart": Can not delete as terminationPolicy is set to "DoNotTerminate"
+```
+
+Now, run `kubectl patch -n demo sdb sdb-quickstart -p '{"spec":{"terminationPolicy":"Halt"}}' --type="merge"` to set `spec.terminationPolicy` to `Halt` (which deletes the singlestore object and keeps PVC, snapshots, Secrets intact) or remove this field (which default to `Delete`). Then you will be able to delete/halt the database.
+
+Learn details of all `TerminationPolicy` [here](/docs/guides/mysql/concepts/database/index.md#specterminationpolicy).
+
+**Halt:**
+
+Suppose you want to reuse your database volume and credential to deploy your database in future using the same configurations. But, right now you just want to delete the database except the database volumes and credentials. In this scenario, you must set the `Singlestore` object `terminationPolicy` to `Halt`.
+
+When the [TerminationPolicy](/docs/guides/mysql/concepts/database/index.md#specterminationpolicy) is set to `halt` and the Singlestore object is deleted, the KubeDB operator will delete the StatefulSet and its pods but leaves the `PVCs`, `secrets` and database backup data(`snapshots`) intact. You can set the `terminationPolicy` to `halt` in existing database using `patch` command for testing.
+
+At first, run `kubectl patch -n demo sdb sdb-quickstart -p '{"spec":{"terminationPolicy":"Halt"}}' --type="merge"`. Then delete the singlestore object,
+
+```bash
+$ kubectl delete sdb sdb-quickstart -n demo
+singlestore.kubedb.com "sdb-quickstart" deleted
+```
+
+Now, run the following command to get all singlestore resources in `demo` namespaces,
+
+```bash
+$ kubectl get petset,svc,secret,pvc -n demo
+NAME TYPE DATA AGE
+secret/sdb-quickstart-root-cred kubernetes.io/basic-auth 2 3m35s
+
+NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
+persistentvolumeclaim/data-sdb-quickstart-leaf-0 Bound pvc-389f40a8-09bc-4724-aa52-94705d56ff77 1Gi RWO standard 3m18s
+persistentvolumeclaim/data-sdb-quickstart-leaf-1 Bound pvc-8dfbf04e-41a8-4cdd-ba14-7ad42d8701bb 1Gi RWO standard 3m11s
+persistentvolumeclaim/data-sdb-quickstart-master-aggregator-0 Bound pvc-c4f7d255-7307-4455-b195-70c71b81706f 1Gi RWO standard 3m29s
+
+```
+
+From the above output, you can see that all singlestore resources(`StatefulSet`, `Service`, etc.) are deleted except `PVC` and `Secret`. You can recreate your singlestore again using this resources.
+
+>You can also set the `terminationPolicy` to `Halt`(deprecated). It's behavior same as `halt` and right now `Halt` is replaced by `Halt`.
+
+**Delete:**
+
+If you want to delete the existing database along with the volumes used, but want to restore the database from previously taken `snapshots` and `secrets` then you might want to set the `Singlestore` object `terminationPolicy` to `Delete`. In this setting, `StatefulSet` and the volumes will be deleted. If you decide to restore the database, you can do so using the snapshots and the credentials.
+
+When the [TerminationPolicy](/docs/guides/mysql/concepts/database/index.md#specterminationpolicy) is set to `Delete` and the Singlestore object is deleted, the KubeDB operator will delete the StatefulSet and its pods along with PVCs but leaves the `secret` and database backup data(`snapshots`) intact.
+
+Suppose, we have a database with `terminationPolicy` set to `Delete`. Now, are going to delete the database using the following command:
+
+```bash
+$ kubectl delete sdb sdb-quickstart -n demo
+singlestore.kubedb.com "sdb-quickstart" deleted
+```
+
+Now, run the following command to get all singlestore resources in `demo` namespaces,
+
+```bash
+$ kubectl get petset,svc,secret,pvc -n demo
+NAME TYPE DATA AGE
+secret/sdb-quickstart-root-cred kubernetes.io/basic-auth 2 17m
+
+```
+
+From the above output, you can see that all singlestore resources(`StatefulSet`, `Service`, `PVCs` etc.) are deleted except `Secret`.
+
+>If you don't set the terminationPolicy then the kubeDB set the TerminationPolicy to Delete by-default.
+
+**WipeOut:**
+
+You can totally delete the `Singlestore` database and relevant resources without any tracking by setting `terminationPolicy` to `WipeOut`. KubeDB operator will delete all relevant resources of this `Singlestore` database (i.e, `PVCs`, `Secrets`, `Snapshots`) when the `terminationPolicy` is set to `WipeOut`.
+
+Suppose, we have a database with `terminationPolicy` set to `WipeOut`. Now, are going to delete the database using the following command:
+
+```yaml
+$ kubectl delete sdb sdb-quickstart -n demo
+singlestore.kubedb.com "singlestore-quickstart" deleted
+```
+
+Now, run the following command to get all singlestore resources in `demo` namespaces,
+
+```bash
+$ kubectl get petset,svc,secret,pvc -n demo
+No resources found in demo namespace.
+```
+
+From the above output, you can see that all singlestore resources are deleted. There is no option to recreate/reinitialize your database if `terminationPolicy` is set to `Delete`.
+
+>Be careful when you set the `terminationPolicy` to `Delete`. Because there is no option to trace the database resources if once deleted the database.
+
+## Cleaning up
+
+To cleanup the Kubernetes resources created by this tutorial, run:
+
+```bash
+kubectl patch -n demo singlestore/sdb-quickstart -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+kubectl delete -n demo singlestore/sdb-quickstart
+kubectl delete ns demo
+```
+
+## Tips for Testing
+
+If you are just testing some basic functionalities, you might want to avoid additional hassles due to some safety features that are great for production environment. You can follow these tips to avoid them.
+
+1. **Use `storageType: Ephemeral`**. Databases are precious. You might not want to lose your data in your production environment if database pod fail. So, we recommend to use `spec.storageType: Durable` and provide storage spec in `spec.storage` section. For testing purpose, you can just use `spec.storageType: Ephemeral`. KubeDB will use [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) for storage. You will not require to provide `spec.storage` section.
+2. **Use `terminationPolicy: WipeOut`**. It is nice to be able to delete everything created by KubeDB for a particular Singlestore crd when you delete the crd. For more details about termination policy, please visit [here](/docs/guides/mysql/concepts/database/index.md#specterminationpolicy).
+
+## Next Steps
\ No newline at end of file
diff --git a/docs/guides/singlestore/quickstart/yamls/quickstart.yaml b/docs/guides/singlestore/quickstart/yamls/quickstart.yaml
new file mode 100644
index 0000000000..c6c91daec4
--- /dev/null
+++ b/docs/guides/singlestore/quickstart/yamls/quickstart.yaml
@@ -0,0 +1,59 @@
+apiVersion: kubedb.com/v1alpha2
+kind: Singlestore
+metadata:
+ name: sdb-quickstart
+ namespace: demo
+spec:
+ version: "8.5.7"
+ topology:
+ aggregator:
+ replicas: 1
+ podTemplate:
+ spec:
+ containers:
+ - name: singlestore
+ resources:
+ limits:
+ memory: "2Gi"
+ cpu: "0.5"
+ requests:
+ memory: "2Gi"
+ cpu: "0.5"
+ storage:
+ storageClassName: "standard"
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 1Gi
+ leaf:
+ replicas: 2
+ podTemplate:
+ spec:
+ containers:
+ - name: singlestore
+ resources:
+ limits:
+ memory: "2Gi"
+ cpu: "0.5"
+ requests:
+ memory: "2Gi"
+ cpu: "0.5"
+ storage:
+ storageClassName: "standard"
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 10Gi
+ licenseSecret:
+ name: license-secret
+ storageType: Durable
+ terminationPolicy: WipeOut
+ serviceTemplates:
+ - alias: primary
+ spec:
+ type: LoadBalancer
+ ports:
+ - name: http
+ port: 9999
\ No newline at end of file
diff --git a/docs/images/singlestore/singlestore-lifecycle.png b/docs/images/singlestore/singlestore-lifecycle.png
new file mode 100644
index 0000000000..edf0f03569
Binary files /dev/null and b/docs/images/singlestore/singlestore-lifecycle.png differ