From 4b75bbfaa566448a46406f63f0ddf62777b225f1 Mon Sep 17 00:00:00 2001
From: Tamal Saha
Date: Tue, 25 Jun 2024 22:32:02 -0700
Subject: [PATCH] Update docs
Signed-off-by: Tamal Saha
---
.../druid/quickstart/druid-quickstart.yaml | 5 +-
.../examples/druid/quickstart/mysql-demo.yaml | 2 +-
.../examples/druid/quickstart/zk-demo.yaml | 4 +-
.../quickstart/ferretdb-external.yaml | 2 +-
.../quickstart/ferretdb-internal.yaml | 2 +-
.../kafka/clustering/kf-multinode.yaml | 2 +-
.../kafka/clustering/kf-standalone.yaml | 2 +-
.../kafka/clustering/kf-topology.yaml | 2 +-
.../kafka/connectcluster/kcc-distributed.yaml | 2 +-
.../kafka/monitoring/kf-with-monitoring.yaml | 2 +-
.../quickstart/mssqlserver-quickstart.yaml | 8 +-
.../pgbouncer/custom-version/pgbouncer.yaml | 12 +--
.../monitoring/builtin-prom-pgbouncer.yaml | 12 +--
.../monitoring/coreos-prom-pgbouncer.yaml | 12 +--
.../examples/pgbouncer/pb-overview.yaml | 17 ++-
.../private-registry/pvt-reg-pgbouncer.yaml | 4 +-
.../quickstart/pgbouncer-server-mod.yaml | 17 ++-
.../quickstart/pgbouncer-server.yaml | 4 +-
.../pgpool/quickstart/quick-pgpool.yaml | 2 +-
.../rabbitmq/quickstart/quickstart.yaml | 2 +-
.../singlestore/quickstart/quickstart.yaml | 2 +-
.../examples/zookeeper/quickstart/zoo.yaml | 2 +-
.../guides/druid/quickstart/overview/index.md | 20 ++--
.../guides/ferretdb/quickstart/quickstart.md | 18 ++--
.../docs/v2024.6.4/guides/kafka/cli/cli.md | 12 +--
.../clustering/combined-cluster/index.md | 8 +-
.../clustering/topology-cluster/index.md | 6 +-
.../guides/kafka/concepts/appbinding.md | 2 +-
.../guides/kafka/concepts/connectcluster.md | 8 +-
.../guides/kafka/concepts/connector.md | 10 +-
.../v2024.6.4/guides/kafka/concepts/kafka.md | 10 +-
.../kafka/connectcluster/connectcluster.md | 13 +--
.../guides/kafka/monitoring/overview.md | 2 +-
.../monitoring/using-prometheus-operator.md | 2 +-
.../overview/connectcluster/index.md | 14 +--
.../connectcluster/yamls/connectcluster.yaml | 2 +-
.../yamls/mongodb-source-connector.yaml | 2 +-
.../kafka/quickstart/overview/kafka/index.md | 12 +--
.../overview/kafka/yamls/kafka.yaml | 2 +-
.../mssqlserver/quickstart/quickstart.md | 98 +++++++++++-------
.../docs/v2024.6.4/guides/pgbouncer/README.md | 4 +-
.../v2024.6.4/guides/pgbouncer/cli/cli.md | 20 ++--
.../guides/pgbouncer/concepts/pgbouncer.md | 10 +-
.../guides/pgbouncer/custom-versions/setup.md | 8 +-
.../monitoring/using-builtin-prometheus.md | 4 +-
.../monitoring/using-prometheus-operator.md | 4 +-
.../using-private-registry.md | 6 +-
.../guides/pgbouncer/quickstart/quickstart.md | 19 ++--
.../guides/pgpool/concepts/pgpool.md | 2 +-
.../guides/pgpool/custom-versions/setup.md | 2 +-
.../guides/pgpool/quickstart/quickstart.md | 18 ++--
.../guides/rabbitmq/quickstart/quickstart.md | 48 ++++-----
.../singlestore/quickstart/quickstart.md | 46 ++++----
.../quickstart/yamls/quickstart.yaml | 2 +-
.../guides/solr/concepts/appbinding.md | 2 +-
.../v2024.6.4/guides/solr/concepts/solr.md | 28 ++---
.../guides/solr/quickstart/overview/index.md | 22 ++--
.../quickstart/overview/yamls/solr/solr.yaml | 2 +-
.../overview/yamls/zookeeper/zookeeper.yaml | 2 +-
.../guides/zookeeper/concepts/appbinding.md | 2 +-
.../guides/zookeeper/concepts/zookeeper.md | 16 +--
.../guides/zookeeper/quickstart/quickstart.md | 20 ++--
.../connectcluster-crd-lifecycle.png | Bin 79220 -> 79214 bytes
.../images/kafka/kafka-crd-lifecycle.png | Bin 61883 -> 91666 bytes
.../images/pgpool/quickstart/lifecycle.png | Bin 83653 -> 78659 bytes
data/products/configsyncer.json | 7 +-
data/products/kubedb/databases/kafka.json | 2 +-
.../kubedb/databases/mssqlserver.json | 12 ++-
data/products/kubedb/databases/pgpool.json | 2 +-
data/products/kubedb/databases/rabbitmq.json | 2 +-
.../kubedb/databases/singlestore.json | 2 +-
data/products/kubedb/databases/zookeeper.json | 2 +-
72 files changed, 355 insertions(+), 321 deletions(-)
diff --git a/content/docs/v2024.6.4/examples/druid/quickstart/druid-quickstart.yaml b/content/docs/v2024.6.4/examples/druid/quickstart/druid-quickstart.yaml
index 2d1683e731..bf7b38e913 100644
--- a/content/docs/v2024.6.4/examples/druid/quickstart/druid-quickstart.yaml
+++ b/content/docs/v2024.6.4/examples/druid/quickstart/druid-quickstart.yaml
@@ -23,6 +23,7 @@ spec:
replicas: 1
historicals:
replicas: 1
+ storageType: Durable
storage:
accessModes:
- ReadWriteOnce
@@ -32,6 +33,7 @@ spec:
storageClassName: standard
middleManagers:
replicas: 1
+ storageType: Durable
storage:
accessModes:
- ReadWriteOnce
@@ -41,8 +43,7 @@ spec:
storageClassName: standard
routers:
replicas: 1
- storageType: Durable
- terminationPolicy: Delete
+ deletionPolicy: Delete
serviceTemplates:
- alias: primary
spec:
diff --git a/content/docs/v2024.6.4/examples/druid/quickstart/mysql-demo.yaml b/content/docs/v2024.6.4/examples/druid/quickstart/mysql-demo.yaml
index c77f9a2c4f..5106ad9d72 100644
--- a/content/docs/v2024.6.4/examples/druid/quickstart/mysql-demo.yaml
+++ b/content/docs/v2024.6.4/examples/druid/quickstart/mysql-demo.yaml
@@ -11,7 +11,7 @@ spec:
- ReadWriteOnce
resources:
requests:
- storage: 100Mi
+ storage: 1Gi
init:
script:
configMap:
diff --git a/content/docs/v2024.6.4/examples/druid/quickstart/zk-demo.yaml b/content/docs/v2024.6.4/examples/druid/quickstart/zk-demo.yaml
index 87fd9c3f12..375800d14e 100644
--- a/content/docs/v2024.6.4/examples/druid/quickstart/zk-demo.yaml
+++ b/content/docs/v2024.6.4/examples/druid/quickstart/zk-demo.yaml
@@ -10,8 +10,8 @@ spec:
storage:
resources:
requests:
- storage: "100Mi"
+ storage: 1Gi
storageClassName: "standard"
accessModes:
- ReadWriteOnce
- terminationPolicy: "WipeOut"
+ deletionPolicy: "WipeOut"
diff --git a/content/docs/v2024.6.4/examples/ferretdb/quickstart/ferretdb-external.yaml b/content/docs/v2024.6.4/examples/ferretdb/quickstart/ferretdb-external.yaml
index 9f3cbadcd2..cbec46234c 100644
--- a/content/docs/v2024.6.4/examples/ferretdb/quickstart/ferretdb-external.yaml
+++ b/content/docs/v2024.6.4/examples/ferretdb/quickstart/ferretdb-external.yaml
@@ -24,4 +24,4 @@ spec:
name: ha-postgres
namespace: demo
pgPort: 5432
- terminationPolicy: WipeOut
\ No newline at end of file
+ deletionPolicy: WipeOut
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/examples/ferretdb/quickstart/ferretdb-internal.yaml b/content/docs/v2024.6.4/examples/ferretdb/quickstart/ferretdb-internal.yaml
index f0875aadc3..854e5b1cb2 100644
--- a/content/docs/v2024.6.4/examples/ferretdb/quickstart/ferretdb-internal.yaml
+++ b/content/docs/v2024.6.4/examples/ferretdb/quickstart/ferretdb-internal.yaml
@@ -17,4 +17,4 @@ spec:
storage: 500Mi
backend:
externallyManaged: false
- terminationPolicy: WipeOut
\ No newline at end of file
+ deletionPolicy: WipeOut
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/examples/kafka/clustering/kf-multinode.yaml b/content/docs/v2024.6.4/examples/kafka/clustering/kf-multinode.yaml
index 1c32007f8f..5c4bda964a 100644
--- a/content/docs/v2024.6.4/examples/kafka/clustering/kf-multinode.yaml
+++ b/content/docs/v2024.6.4/examples/kafka/clustering/kf-multinode.yaml
@@ -14,4 +14,4 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: DoNotTerminate
\ No newline at end of file
+ deletionPolicy: DoNotTerminate
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/examples/kafka/clustering/kf-standalone.yaml b/content/docs/v2024.6.4/examples/kafka/clustering/kf-standalone.yaml
index 4244760e31..7b2e09c0f1 100644
--- a/content/docs/v2024.6.4/examples/kafka/clustering/kf-standalone.yaml
+++ b/content/docs/v2024.6.4/examples/kafka/clustering/kf-standalone.yaml
@@ -14,4 +14,4 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: DoNotTerminate
\ No newline at end of file
+ deletionPolicy: DoNotTerminate
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/examples/kafka/clustering/kf-topology.yaml b/content/docs/v2024.6.4/examples/kafka/clustering/kf-topology.yaml
index 5a50302a52..d8fbb207ec 100644
--- a/content/docs/v2024.6.4/examples/kafka/clustering/kf-topology.yaml
+++ b/content/docs/v2024.6.4/examples/kafka/clustering/kf-topology.yaml
@@ -31,4 +31,4 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: DoNotTerminate
\ No newline at end of file
+ deletionPolicy: DoNotTerminate
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/examples/kafka/connectcluster/kcc-distributed.yaml b/content/docs/v2024.6.4/examples/kafka/connectcluster/kcc-distributed.yaml
index d1be6ac72c..6fb6b8900e 100644
--- a/content/docs/v2024.6.4/examples/kafka/connectcluster/kcc-distributed.yaml
+++ b/content/docs/v2024.6.4/examples/kafka/connectcluster/kcc-distributed.yaml
@@ -20,4 +20,4 @@ spec:
kafkaRef:
name: kafka-prod
namespace: demo
- terminationPolicy: WipeOut
\ No newline at end of file
+ deletionPolicy: WipeOut
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/examples/kafka/monitoring/kf-with-monitoring.yaml b/content/docs/v2024.6.4/examples/kafka/monitoring/kf-with-monitoring.yaml
index 101bfe2567..b799d9f005 100644
--- a/content/docs/v2024.6.4/examples/kafka/monitoring/kf-with-monitoring.yaml
+++ b/content/docs/v2024.6.4/examples/kafka/monitoring/kf-with-monitoring.yaml
@@ -29,4 +29,4 @@ spec:
release: prometheus
interval: 10s
storageType: Durable
- terminationPolicy: WipeOut
\ No newline at end of file
+ deletionPolicy: WipeOut
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/examples/mssqlserver/quickstart/mssqlserver-quickstart.yaml b/content/docs/v2024.6.4/examples/mssqlserver/quickstart/mssqlserver-quickstart.yaml
index f5c4914fa6..1e3f2482fb 100644
--- a/content/docs/v2024.6.4/examples/mssqlserver/quickstart/mssqlserver-quickstart.yaml
+++ b/content/docs/v2024.6.4/examples/mssqlserver/quickstart/mssqlserver-quickstart.yaml
@@ -7,6 +7,12 @@ spec:
version: "2022-cu12"
replicas: 1
storageType: Durable
+ tls:
+ issuerRef:
+ name: mssqlserver-issuer
+ kind: Issuer
+ apiGroup: "cert-manager.io"
+ clientTLS: false
storage:
storageClassName: "standard"
accessModes:
@@ -14,4 +20,4 @@ spec:
resources:
requests:
storage: 1Gi
- terminationPolicy: Delete
+ deletionPolicy: WipeOut
diff --git a/content/docs/v2024.6.4/examples/pgbouncer/custom-version/pgbouncer.yaml b/content/docs/v2024.6.4/examples/pgbouncer/custom-version/pgbouncer.yaml
index 2535f4aa29..b7bf832d41 100644
--- a/content/docs/v2024.6.4/examples/pgbouncer/custom-version/pgbouncer.yaml
+++ b/content/docs/v2024.6.4/examples/pgbouncer/custom-version/pgbouncer.yaml
@@ -6,12 +6,12 @@ metadata:
spec:
version: "1.17.0"
replicas: 1
- databases:
- - alias: "postgres"
- databaseName: "postgres"
- databaseRef:
- name: "quick-postgres"
- namespace: demo
+ database:
+ syncUsers: true
+ databaseName: "postgres"
+ databaseRef:
+ name: "quick-postgres"
+ namespace: demo
connectionPool:
port: 2580
reservePoolSize: 5
diff --git a/content/docs/v2024.6.4/examples/pgbouncer/monitoring/builtin-prom-pgbouncer.yaml b/content/docs/v2024.6.4/examples/pgbouncer/monitoring/builtin-prom-pgbouncer.yaml
index 65708dc530..f4ab58ebe5 100644
--- a/content/docs/v2024.6.4/examples/pgbouncer/monitoring/builtin-prom-pgbouncer.yaml
+++ b/content/docs/v2024.6.4/examples/pgbouncer/monitoring/builtin-prom-pgbouncer.yaml
@@ -6,12 +6,12 @@ metadata:
spec:
version: "1.17.0"
replicas: 1
- databases:
- - alias: "postgres"
- databaseName: "postgres"
- databaseRef:
- name: "quick-postgres"
- namespace: demo
+ database:
+ syncUsers: true
+ databaseName: "postgres"
+ databaseRef:
+ name: "quick-postgres"
+ namespace: demo
connectionPool:
maxClientConnections: 20
reservePoolSize: 5
diff --git a/content/docs/v2024.6.4/examples/pgbouncer/monitoring/coreos-prom-pgbouncer.yaml b/content/docs/v2024.6.4/examples/pgbouncer/monitoring/coreos-prom-pgbouncer.yaml
index f30d92faf0..4c2d84f158 100644
--- a/content/docs/v2024.6.4/examples/pgbouncer/monitoring/coreos-prom-pgbouncer.yaml
+++ b/content/docs/v2024.6.4/examples/pgbouncer/monitoring/coreos-prom-pgbouncer.yaml
@@ -6,12 +6,12 @@ metadata:
spec:
version: "1.17.0"
replicas: 1
- databases:
- - alias: "postgres"
- databaseName: "postgres"
- databaseRef:
- name: "quick-postgres"
- namespace: demo
+ database:
+ syncUsers: true
+ databaseName: "postgres"
+ databaseRef:
+ name: "quick-postgres"
+ namespace: demo
connectionPool:
maxClientConnections: 20
reservePoolSize: 5
diff --git a/content/docs/v2024.6.4/examples/pgbouncer/pb-overview.yaml b/content/docs/v2024.6.4/examples/pgbouncer/pb-overview.yaml
index 9a25c1bc40..b540afc277 100644
--- a/content/docs/v2024.6.4/examples/pgbouncer/pb-overview.yaml
+++ b/content/docs/v2024.6.4/examples/pgbouncer/pb-overview.yaml
@@ -6,17 +6,12 @@ metadata:
spec:
version: "1.17.0"
replicas: 1
- databases:
- - alias: "postgres"
- databaseName: "postgres"
- databaseRef:
- name: "quick-postgres"
- namespace: demo
- - alias: "mydb"
- databaseName: "tmpdb"
- databaseRef:
- name: "quick-postgres"
- namespace: demo
+ database:
+ syncUsers: true
+ databaseName: "postgres"
+ databaseRef:
+ name: "quick-postgres"
+ namespace: demo
connectionPool:
maxClientConnections: 20
reservePoolSize: 5
diff --git a/content/docs/v2024.6.4/examples/pgbouncer/private-registry/pvt-reg-pgbouncer.yaml b/content/docs/v2024.6.4/examples/pgbouncer/private-registry/pvt-reg-pgbouncer.yaml
index c064474fa0..c5211ce650 100644
--- a/content/docs/v2024.6.4/examples/pgbouncer/private-registry/pvt-reg-pgbouncer.yaml
+++ b/content/docs/v2024.6.4/examples/pgbouncer/private-registry/pvt-reg-pgbouncer.yaml
@@ -5,8 +5,8 @@ metadata:
namespace: demo
spec:
version: "1.17.0"
- databases:
- - alias: "postgres"
+ database:
+ syncUsers: true
databaseName: "postgres"
databaseRef:
name: "quick-postgres"
diff --git a/content/docs/v2024.6.4/examples/pgbouncer/quickstart/pgbouncer-server-mod.yaml b/content/docs/v2024.6.4/examples/pgbouncer/quickstart/pgbouncer-server-mod.yaml
index 59a897fccc..ffb0b7569d 100644
--- a/content/docs/v2024.6.4/examples/pgbouncer/quickstart/pgbouncer-server-mod.yaml
+++ b/content/docs/v2024.6.4/examples/pgbouncer/quickstart/pgbouncer-server-mod.yaml
@@ -6,17 +6,12 @@ metadata:
spec:
version: "1.17.0"
replicas: 1
- databases:
- - alias: "postgres"
- databaseName: "postgres"
- databaseRef:
- name: "quick-postgres"
- namespace: demo
- - alias: "tmpdb"
- databaseName: "mydb"
- databaseRef:
- name: "quick-postgres"
- namespace: demo
+ database:
+ syncUsers: true
+ databaseName: "postgres"
+ databaseRef:
+ name: "quick-postgres"
+ namespace: demo
connectionPool:
maxClientConnections: 20
reservePoolSize: 5
diff --git a/content/docs/v2024.6.4/examples/pgbouncer/quickstart/pgbouncer-server.yaml b/content/docs/v2024.6.4/examples/pgbouncer/quickstart/pgbouncer-server.yaml
index 92e4097aef..40739f0cf7 100644
--- a/content/docs/v2024.6.4/examples/pgbouncer/quickstart/pgbouncer-server.yaml
+++ b/content/docs/v2024.6.4/examples/pgbouncer/quickstart/pgbouncer-server.yaml
@@ -6,8 +6,8 @@ metadata:
spec:
version: "1.18.0"
replicas: 1
- databases:
- - alias: "postgres"
+ database:
+ syncUsers: true
databaseName: "postgres"
databaseRef:
name: "quick-postgres"
diff --git a/content/docs/v2024.6.4/examples/pgpool/quickstart/quick-pgpool.yaml b/content/docs/v2024.6.4/examples/pgpool/quickstart/quick-pgpool.yaml
index 0012a59905..e3f730c3f6 100644
--- a/content/docs/v2024.6.4/examples/pgpool/quickstart/quick-pgpool.yaml
+++ b/content/docs/v2024.6.4/examples/pgpool/quickstart/quick-pgpool.yaml
@@ -12,4 +12,4 @@ spec:
sslMode: disable
clientAuthMode: md5
syncUsers: true
- terminationPolicy: WipeOut
\ No newline at end of file
+ deletionPolicy: WipeOut
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/examples/rabbitmq/quickstart/quickstart.yaml b/content/docs/v2024.6.4/examples/rabbitmq/quickstart/quickstart.yaml
index 9d8e18a3aa..5933e579ed 100644
--- a/content/docs/v2024.6.4/examples/rabbitmq/quickstart/quickstart.yaml
+++ b/content/docs/v2024.6.4/examples/rabbitmq/quickstart/quickstart.yaml
@@ -14,7 +14,7 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: WipeOut # DoNotTerminate(blocks deletion), Halt( retains pvc,secret), Delete (retains secret)
+ deletionPolicy: WipeOut # DoNotTerminate(blocks deletion), Halt( retains pvc,secret), Delete (retains secret)
podTemplate:
spec:
containers:
diff --git a/content/docs/v2024.6.4/examples/singlestore/quickstart/quickstart.yaml b/content/docs/v2024.6.4/examples/singlestore/quickstart/quickstart.yaml
index 7c5b695c7e..4796bfc30e 100644
--- a/content/docs/v2024.6.4/examples/singlestore/quickstart/quickstart.yaml
+++ b/content/docs/v2024.6.4/examples/singlestore/quickstart/quickstart.yaml
@@ -49,4 +49,4 @@ spec:
licenseSecret:
name: license-secret
storageType: Durable
- terminationPolicy: WipeOut
\ No newline at end of file
+ deletionPolicy: WipeOut
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/examples/zookeeper/quickstart/zoo.yaml b/content/docs/v2024.6.4/examples/zookeeper/quickstart/zoo.yaml
index 9de97d65ef..a7238c48d2 100644
--- a/content/docs/v2024.6.4/examples/zookeeper/quickstart/zoo.yaml
+++ b/content/docs/v2024.6.4/examples/zookeeper/quickstart/zoo.yaml
@@ -14,4 +14,4 @@ spec:
storageClassName: "standard"
accessModes:
- ReadWriteOnce
- terminationPolicy: "WipeOut"
+ deletionPolicy: "WipeOut"
diff --git a/content/docs/v2024.6.4/guides/druid/quickstart/overview/index.md b/content/docs/v2024.6.4/guides/druid/quickstart/overview/index.md
index 90bc0a3ca6..2ddf283082 100644
--- a/content/docs/v2024.6.4/guides/druid/quickstart/overview/index.md
+++ b/content/docs/v2024.6.4/guides/druid/quickstart/overview/index.md
@@ -118,6 +118,9 @@ Another external dependency of Druid is deep storage where the segments are stor
In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use.
```bash
+
+$ helm repo add minio https://operator.min.io/
+$ helm repo update minio
$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1
$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \
@@ -125,7 +128,8 @@ $ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio
--set tenant.pools[0].volumesPerServer=1 \
--set tenant.pools[0].size=1Gi \
--set tenant.certificate.requestAutoCert=false \
---set tenant.buckets[0].name="druid"
+--set tenant.buckets[0].name="druid" \
+--set tenant.pools[0].name="default"
```
@@ -144,6 +148,7 @@ stringData:
druid.s3.accessKey: "minio"
druid.s3.secretKey: "minio123"
druid.s3.protocol: "http"
+ druid.s3.enablePathStyleAccess: "true"
druid.s3.endpoint.signingRegion: "us-east-1"
druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/"
```
@@ -189,6 +194,7 @@ spec:
replicas: 1
historicals:
replicas: 1
+ storageType: Durable
storage:
accessModes:
- ReadWriteOnce
@@ -198,6 +204,7 @@ spec:
storageClassName: standard
middleManagers:
replicas: 1
+ storageType: Durable
storage:
accessModes:
- ReadWriteOnce
@@ -207,8 +214,7 @@ spec:
storageClassName: standard
routers:
replicas: 1
- storageType: Durable
- terminationPolicy: Delete
+ deletionPolicy: Delete
serviceTemplates:
- alias: primary
spec:
@@ -223,7 +229,7 @@ Here,
- `spec.version` - is the name of the DruidVersion CR. Here, a Druid of version `28.0.1` will be created.
- `spec.storageType` - specifies the type of storage that will be used for Kafka. It can be `Durable` or `Ephemeral`. The default value of this field is `Durable`. If `Ephemeral` is used then KubeDB will create the Druid using `EmptyDir` volume. In this case, you don't have to specify `spec.storage` field. This is useful for testing purposes.
- `spec.storage` specifies the StorageClass of PVC dynamically allocated to store data for this Druid instance. This storage spec will be passed to the PetSet created by the KubeDB operator to run Druid pods. You can specify any StorageClass available in your cluster with appropriate resource requests. If you don't specify `spec.storageType: Ephemeral`, then this field is required.
-- `spec.terminationPolicy` specifies what KubeDB should do when a user try to delete Druid CR. Termination policy `Delete` will delete the database pods and PVC when the Druid CR is deleted.
+- `spec.deletionPolicy` specifies what KubeDB should do when a user try to delete Druid CR. Deletion policy `Delete` will delete the database pods and PVC when the Druid CR is deleted.
> Note: `spec.storage` section is used to create PVC for database pod. It will create PVC with storage size specified in the `storage.resources.requests` field. Don't specify `limits` here. PVC does not get resized automatically.
@@ -378,7 +384,7 @@ Spec:
Metadata:
Spec:
Storage Type: Ephemeral
- Termination Policy: Delete
+ Deletion Policy: Delete
Topology:
Brokers:
Pod Placement Policy:
@@ -755,7 +761,7 @@ You can use this web console for loading data, managing datasources and tasks, a
To clean up the Kubernetes resources created by this tutorial, run:
```bash
-$ kubectl patch -n demo druid druid-quickstart -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n demo druid druid-quickstart -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
kafka.kubedb.com/druid-quickstart patched
$ kubectl delete dr druid-quickstart -n demo
@@ -770,7 +776,7 @@ namespace "demo" deleted
If you are just testing some basic functionalities, you might want to avoid additional hassles due to some safety features that are great for the 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 the database pod fails. So, we recommend to use `spec.storageType: Durable` and provide storage spec in `spec.storage` section. For testing purposes, 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 resume the database from the previous one. So, we preserve all your `PVCs` and auth `Secrets`. If you don't want to resume the database, you can just use `spec.terminationPolicy: WipeOut`. It will clean up every resource that was created with the Druid CR. For more details, please visit [here](/docs/v2024.6.4/guides/kafka/concepts/kafka#specterminationpolicy).
+2. **Use `deletionPolicy: WipeOut`**. It is nice to be able to resume the database from the previous one. So, we preserve all your `PVCs` and auth `Secrets`. If you don't want to resume the database, you can just use `spec.deletionPolicy: WipeOut`. It will clean up every resource that was created with the Druid CR. For more details, please visit [here](/docs/v2024.6.4/guides/kafka/concepts/kafka#specdeletionPolicy).
## Next Steps
diff --git a/content/docs/v2024.6.4/guides/ferretdb/quickstart/quickstart.md b/content/docs/v2024.6.4/guides/ferretdb/quickstart/quickstart.md
index a8346cab89..62b9bd5425 100644
--- a/content/docs/v2024.6.4/guides/ferretdb/quickstart/quickstart.md
+++ b/content/docs/v2024.6.4/guides/ferretdb/quickstart/quickstart.md
@@ -92,7 +92,7 @@ spec:
storage: 500Mi
backend:
externallyManaged: false
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
```bash
@@ -105,7 +105,7 @@ Here,
- `spec.version` is name of the FerretDBVersion CR where the docker images are specified. In this tutorial, a FerretDB 1.18.0 database is created.
- `spec.storageType` specifies the type of storage that will be used for FerretDB database. It can be `Durable` or `Ephemeral`. Default value of this field is `Durable`. If `Ephemeral` is used then KubeDB will create FerretDB database using `EmptyDir` volume. In this case, you don't have to specify `spec.storage` field. This is useful for testing purposes.
- `spec.storage` specifies PVC spec that will be 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 `FerretDB` CR or which resources KubeDB should keep or delete when you delete `FerretDB` CR. 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/v2024.6.4/guides/mongodb/concepts/mongodb#specterminationpolicy)
+- `spec.deletionPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `FerretDB` CR or which resources KubeDB should keep or delete when you delete `FerretDB` CR. If admission webhook is enabled, It prevents users from deleting the database as long as the `spec.deletionPolicy` is set to `DoNotTerminate`. Learn details of all `DeletionPolicy` [here](/docs/v2024.6.4/guides/mongodb/concepts/mongodb#specterminationpolicy)
- `spec.backend` denotes the backend database information for FerretDB instance.
- `spec.replicas` denotes the number of replicas in the replica-set.
@@ -195,7 +195,7 @@ Spec:
Requests:
Storage: 500Mi
Storage Type: Durable
- Termination Policy: WipeOut
+ Deletion Policy: WipeOut
Version: 1.18.0
Status:
Conditions:
@@ -276,7 +276,7 @@ kind: FerretDB
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"FerretDB","metadata":{"annotations":{},"name":"ferret","namespace":"demo"},"spec":{"authSecret":{"externallyManaged":false},"backend":{"externallyManaged":false},"sslMode":"disabled","storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"500Mi"}}},"terminationPolicy":"WipeOut","version":"1.18.0"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"FerretDB","metadata":{"annotations":{},"name":"ferret","namespace":"demo"},"spec":{"authSecret":{"externallyManaged":false},"backend":{"externallyManaged":false},"sslMode":"disabled","storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"500Mi"}}},"deletionPolicy":"WipeOut","version":"1.18.0"}}
creationTimestamp: "2024-03-12T05:04:34Z"
finalizers:
- kubedb.com
@@ -335,7 +335,7 @@ spec:
requests:
storage: 500Mi
storageType: Durable
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
version: 1.18.0
status:
conditions:
@@ -469,7 +469,7 @@ spec:
name: ha-postgres
namespace: demo
pgPort: 5432
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
```bash
@@ -492,7 +492,7 @@ kind: FerretDB
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"FerretDB","metadata":{"annotations":{},"name":"ferretdb-external","namespace":"demo"},"spec":{"authSecret":{"externallyManaged":true,"name":"ha-postgres-auth"},"backend":{"externallyManaged":true,"postgres":{"service":{"name":"ha-postgres","namespace":"demo","pgPort":5432}}},"sslMode":"disabled","storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"100Mi"}},"storageClassName":"standard"},"storageType":"Durable","terminationPolicy":"WipeOut","version":"1.18.0"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"FerretDB","metadata":{"annotations":{},"name":"ferretdb-external","namespace":"demo"},"spec":{"authSecret":{"externallyManaged":true,"name":"ha-postgres-auth"},"backend":{"externallyManaged":true,"postgres":{"service":{"name":"ha-postgres","namespace":"demo","pgPort":5432}}},"sslMode":"disabled","storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"100Mi"}},"storageClassName":"standard"},"storageType":"Durable","deletionPolicy":"WipeOut","version":"1.18.0"}}
creationTimestamp: "2024-03-12T06:30:22Z"
finalizers:
- kubedb.com
@@ -552,7 +552,7 @@ spec:
storage: 500Mi
storageClassName: standard
storageType: Durable
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
version: 1.18.0
status:
conditions:
@@ -591,7 +591,7 @@ status:
## Cleaning up
-If you don't set the terminationPolicy, then the kubeDB set the TerminationPolicy to `WipeOut` by-default for `FerretDB`.
+If you don't set the deletionPolicy, then the kubeDB set the DeletionPolicy to `WipeOut` by-default for `FerretDB`.
### WipeOut
If you want to cleanup each of the Kubernetes resources created by this tutorial, run:
diff --git a/content/docs/v2024.6.4/guides/kafka/cli/cli.md b/content/docs/v2024.6.4/guides/kafka/cli/cli.md
index ac4074bca9..cb2559e044 100644
--- a/content/docs/v2024.6.4/guides/kafka/cli/cli.md
+++ b/content/docs/v2024.6.4/guides/kafka/cli/cli.md
@@ -78,7 +78,7 @@ kind: Kafka
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"Kafka","metadata":{"annotations":{},"name":"kafka","namespace":"demo"},"spec":{"authSecret":{"name":"kafka-admin-cred"},"enableSSL":true,"healthChecker":{"failureThreshold":3,"periodSeconds":20,"timeoutSeconds":10},"keystoreCredSecret":{"name":"kafka-keystore-cred"},"storageType":"Durable","terminationPolicy":"DoNotTerminate","tls":{"certificates":[{"alias":"server","secretName":"kafka-server-cert"},{"alias":"client","secretName":"kafka-client-cert"}],"issuerRef":{"apiGroup":"cert-manager.io","kind":"Issuer","name":"kafka-ca-issuer"}},"topology":{"broker":{"replicas":3,"resources":{"limits":{"memory":"1Gi"},"requests":{"cpu":"500m","memory":"1Gi"}},"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"suffix":"broker"},"controller":{"replicas":3,"resources":{"limits":{"memory":"1Gi"},"requests":{"cpu":"500m","memory":"1Gi"}},"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"suffix":"controller"}},"version":"3.6.1"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"Kafka","metadata":{"annotations":{},"name":"kafka","namespace":"demo"},"spec":{"authSecret":{"name":"kafka-admin-cred"},"enableSSL":true,"healthChecker":{"failureThreshold":3,"periodSeconds":20,"timeoutSeconds":10},"keystoreCredSecret":{"name":"kafka-keystore-cred"},"storageType":"Durable","deletionPolicy":"DoNotTerminate","tls":{"certificates":[{"alias":"server","secretName":"kafka-server-cert"},{"alias":"client","secretName":"kafka-client-cert"}],"issuerRef":{"apiGroup":"cert-manager.io","kind":"Issuer","name":"kafka-ca-issuer"}},"topology":{"broker":{"replicas":3,"resources":{"limits":{"memory":"1Gi"},"requests":{"cpu":"500m","memory":"1Gi"}},"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"suffix":"broker"},"controller":{"replicas":3,"resources":{"limits":{"memory":"1Gi"},"requests":{"cpu":"500m","memory":"1Gi"}},"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"suffix":"controller"}},"version":"3.6.1"}}
creationTimestamp: "2023-03-29T07:01:29Z"
finalizers:
- kubedb.com
@@ -103,7 +103,7 @@ spec:
spec:
resources: {}
storageType: Durable
- terminationPolicy: DoNotTerminate
+ deletionPolicy: DoNotTerminate
tls:
certificates:
- alias: server
@@ -192,7 +192,7 @@ $ kubectl get kf kafka -n demo -ojson
"kind": "Kafka",
"metadata": {
"annotations": {
- "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"kubedb.com/v1alpha2\",\"kind\":\"Kafka\",\"metadata\":{\"annotations\":{},\"name\":\"kafka\",\"namespace\":\"demo\"},\"spec\":{\"authSecret\":{\"name\":\"kafka-admin-cred\"},\"enableSSL\":true,\"healthChecker\":{\"failureThreshold\":3,\"periodSeconds\":20,\"timeoutSeconds\":10},\"keystoreCredSecret\":{\"name\":\"kafka-keystore-cred\"},\"storageType\":\"Durable\",\"terminationPolicy\":\"DoNotTerminate\",\"tls\":{\"certificates\":[{\"alias\":\"server\",\"secretName\":\"kafka-server-cert\"},{\"alias\":\"client\",\"secretName\":\"kafka-client-cert\"}],\"issuerRef\":{\"apiGroup\":\"cert-manager.io\",\"kind\":\"Issuer\",\"name\":\"kafka-ca-issuer\"}},\"topology\":{\"broker\":{\"replicas\":3,\"resources\":{\"limits\":{\"memory\":\"1Gi\"},\"requests\":{\"cpu\":\"500m\",\"memory\":\"1Gi\"}},\"storage\":{\"accessModes\":[\"ReadWriteOnce\"],\"resources\":{\"requests\":{\"storage\":\"1Gi\"}},\"storageClassName\":\"standard\"},\"suffix\":\"broker\"},\"controller\":{\"replicas\":3,\"resources\":{\"limits\":{\"memory\":\"1Gi\"},\"requests\":{\"cpu\":\"500m\",\"memory\":\"1Gi\"}},\"storage\":{\"accessModes\":[\"ReadWriteOnce\"],\"resources\":{\"requests\":{\"storage\":\"1Gi\"}},\"storageClassName\":\"standard\"},\"suffix\":\"controller\"}},\"version\":\"3.6.1\"}}\n"
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"kubedb.com/v1alpha2\",\"kind\":\"Kafka\",\"metadata\":{\"annotations\":{},\"name\":\"kafka\",\"namespace\":\"demo\"},\"spec\":{\"authSecret\":{\"name\":\"kafka-admin-cred\"},\"enableSSL\":true,\"healthChecker\":{\"failureThreshold\":3,\"periodSeconds\":20,\"timeoutSeconds\":10},\"keystoreCredSecret\":{\"name\":\"kafka-keystore-cred\"},\"storageType\":\"Durable\",\"deletionPolicy\":\"DoNotTerminate\",\"tls\":{\"certificates\":[{\"alias\":\"server\",\"secretName\":\"kafka-server-cert\"},{\"alias\":\"client\",\"secretName\":\"kafka-client-cert\"}],\"issuerRef\":{\"apiGroup\":\"cert-manager.io\",\"kind\":\"Issuer\",\"name\":\"kafka-ca-issuer\"}},\"topology\":{\"broker\":{\"replicas\":3,\"resources\":{\"limits\":{\"memory\":\"1Gi\"},\"requests\":{\"cpu\":\"500m\",\"memory\":\"1Gi\"}},\"storage\":{\"accessModes\":[\"ReadWriteOnce\"],\"resources\":{\"requests\":{\"storage\":\"1Gi\"}},\"storageClassName\":\"standard\"},\"suffix\":\"broker\"},\"controller\":{\"replicas\":3,\"resources\":{\"limits\":{\"memory\":\"1Gi\"},\"requests\":{\"cpu\":\"500m\",\"memory\":\"1Gi\"}},\"storage\":{\"accessModes\":[\"ReadWriteOnce\"],\"resources\":{\"requests\":{\"storage\":\"1Gi\"}},\"storageClassName\":\"standard\"},\"suffix\":\"controller\"}},\"version\":\"3.6.1\"}}\n"
},
"creationTimestamp": "2023-03-29T07:01:29Z",
"finalizers": [
@@ -225,7 +225,7 @@ $ kubectl get kf kafka -n demo -ojson
}
},
"storageType": "Durable",
- "terminationPolicy": "DoNotTerminate",
+ "deletionPolicy": "DoNotTerminate",
"tls": {
"certificates": [
{
@@ -462,7 +462,7 @@ Metadata:
f:timeoutSeconds:
f:keystoreCredSecret:
f:storageType:
- f:terminationPolicy:
+ f:deletionPolicy:
f:tls:
.:
f:certificates:
@@ -546,7 +546,7 @@ Spec:
Spec:
Resources:
Storage Type: Durable
- Termination Policy: DoNotTerminate
+ Deletion Policy: DoNotTerminate
Tls:
Certificates:
Alias: server
diff --git a/content/docs/v2024.6.4/guides/kafka/clustering/combined-cluster/index.md b/content/docs/v2024.6.4/guides/kafka/clustering/combined-cluster/index.md
index 9681a6a3bd..ab2c33f9c5 100644
--- a/content/docs/v2024.6.4/guides/kafka/clustering/combined-cluster/index.md
+++ b/content/docs/v2024.6.4/guides/kafka/clustering/combined-cluster/index.md
@@ -67,7 +67,7 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: DoNotTerminate
+ deletionPolicy: DoNotTerminate
```
Let's deploy the above example by the following command:
@@ -136,7 +136,7 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: DoNotTerminate
+ deletionPolicy: DoNotTerminate
```
Let's deploy the above example by the following command:
@@ -305,11 +305,11 @@ TO clean up the k8s resources created by this tutorial, run:
```bash
# standalone cluster
-$ kubectl patch -n demo kf kafka-standalone -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n demo kf kafka-standalone -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
$ kubectl delete kf -n demo kafka-standalone
# multinode cluster
-$ kubectl patch -n demo kf kafka-multinode -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n demo kf kafka-multinode -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
$ kubectl delete kf -n demo kafka-multinode
# delete namespace
diff --git a/content/docs/v2024.6.4/guides/kafka/clustering/topology-cluster/index.md b/content/docs/v2024.6.4/guides/kafka/clustering/topology-cluster/index.md
index 7d522bbf72..b4f07ccef4 100644
--- a/content/docs/v2024.6.4/guides/kafka/clustering/topology-cluster/index.md
+++ b/content/docs/v2024.6.4/guides/kafka/clustering/topology-cluster/index.md
@@ -127,7 +127,7 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: DoNotTerminate
+ deletionPolicy: DoNotTerminate
```
Let's deploy the above example by the following command:
@@ -308,11 +308,11 @@ TO clean up the k8s resources created by this tutorial, run:
```bash
# standalone cluster
-$ kubectl patch -n demo kf kafka-prod -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n demo kf kafka-prod -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
$ kubectl delete kf -n demo kafka-prod
# multinode cluster
-$ kubectl patch -n demo kf kafka-prod -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n demo kf kafka-prod -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
$ kubectl delete kf -n demo kafka-prod
# delete namespace
diff --git a/content/docs/v2024.6.4/guides/kafka/concepts/appbinding.md b/content/docs/v2024.6.4/guides/kafka/concepts/appbinding.md
index 4a241f1613..bde859ec7d 100644
--- a/content/docs/v2024.6.4/guides/kafka/concepts/appbinding.md
+++ b/content/docs/v2024.6.4/guides/kafka/concepts/appbinding.md
@@ -45,7 +45,7 @@ kind: AppBinding
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"Kafka","metadata":{"annotations":{},"name":"kafka","namespace":"demo"},"spec":{"enableSSL":true,"monitor":{"agent":"prometheus.io/operator","prometheus":{"exporter":{"port":9091},"serviceMonitor":{"interval":"10s","labels":{"release":"prometheus"}}}},"replicas":3,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"storageType":"Durable","terminationPolicy":"WipeOut","tls":{"issuerRef":{"apiGroup":"cert-manager.io","kind":"Issuer","name":"kafka-ca-issuer"}},"version":"3.6.1"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"Kafka","metadata":{"annotations":{},"name":"kafka","namespace":"demo"},"spec":{"enableSSL":true,"monitor":{"agent":"prometheus.io/operator","prometheus":{"exporter":{"port":9091},"serviceMonitor":{"interval":"10s","labels":{"release":"prometheus"}}}},"replicas":3,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"storageType":"Durable","deletionPolicy":"WipeOut","tls":{"issuerRef":{"apiGroup":"cert-manager.io","kind":"Issuer","name":"kafka-ca-issuer"}},"version":"3.6.1"}}
creationTimestamp: "2023-03-27T08:04:43Z"
generation: 1
labels:
diff --git a/content/docs/v2024.6.4/guides/kafka/concepts/connectcluster.md b/content/docs/v2024.6.4/guides/kafka/concepts/connectcluster.md
index 398f4aedb7..9f13ec98a9 100644
--- a/content/docs/v2024.6.4/guides/kafka/concepts/connectcluster.md
+++ b/content/docs/v2024.6.4/guides/kafka/concepts/connectcluster.md
@@ -94,7 +94,7 @@ spec:
labels:
release: prometheus
interval: 10s
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
### spec.version
@@ -339,15 +339,15 @@ KubeDB allows following fields to set in `spec.serviceTemplates`:
See [here](https://github.com/kmodules/offshoot-api/blob/kubernetes-1.21.1/api/v1/types.go#L237) to understand these fields in detail.
-### spec.terminationPolicy
+### spec.deletionPolicy
-`spec.terminationPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `ConnectCluster` crd or which resources KubeDB should keep or delete when you delete `ConnectCluster` crd. KubeDB provides following four termination policies:
+`spec.deletionPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `ConnectCluster` crd or which resources KubeDB should keep or delete when you delete `ConnectCluster` crd. KubeDB provides following four deletion policies:
- Delete
- DoNotTerminate
- WipeOut
-When `terminationPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the database as long as the `spec.terminationPolicy` is set to `DoNotTerminate`.
+When `deletionPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the database as long as the `spec.deletionPolicy` is set to `DoNotTerminate`.
## spec.healthChecker
It defines the attributes for the health checker.
diff --git a/content/docs/v2024.6.4/guides/kafka/concepts/connector.md b/content/docs/v2024.6.4/guides/kafka/concepts/connector.md
index c8e68467f7..b56a0a6f19 100644
--- a/content/docs/v2024.6.4/guides/kafka/concepts/connector.md
+++ b/content/docs/v2024.6.4/guides/kafka/concepts/connector.md
@@ -45,7 +45,7 @@ spec:
connectClusterRef:
name: connectcluster-quickstart
namespace: demo
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
### spec.configSecret
@@ -67,17 +67,17 @@ spec:
namespace:
```
-### spec.terminationPolicy
+### spec.deletionPolicy
-`spec.terminationPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `Connector` CR or which resources KubeDB should keep or delete when you delete `Connector` CR. KubeDB provides following four termination policies:
+`spec.deletionPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `Connector` CR or which resources KubeDB should keep or delete when you delete `Connector` CR. KubeDB provides following three deletion policies:
- Delete
- DoNotTerminate
- WipeOut
-When `terminationPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the resource as long as the `spec.terminationPolicy` is set to `DoNotTerminate`.
+When `deletionPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the resource as long as the `spec.deletionPolicy` is set to `DoNotTerminate`.
-Termination policy `WipeOut` will delete the connector from the ConnectCluster when the Connector CR is deleted and `Delete` keep the connector after deleting the Connector CR.
+Deletion policy `WipeOut` will delete the connector from the ConnectCluster when the Connector CR is deleted and `Delete` keep the connector after deleting the Connector CR.
## Next Steps
diff --git a/content/docs/v2024.6.4/guides/kafka/concepts/kafka.md b/content/docs/v2024.6.4/guides/kafka/concepts/kafka.md
index 0b17beb42b..2795efa28d 100644
--- a/content/docs/v2024.6.4/guides/kafka/concepts/kafka.md
+++ b/content/docs/v2024.6.4/guides/kafka/concepts/kafka.md
@@ -63,7 +63,7 @@ spec:
labels:
thisLabel: willGoToSts
storageType: Durable
- terminationPolicy: DoNotTerminate
+ deletionPolicy: DoNotTerminate
tls:
certificates:
- alias: server
@@ -379,14 +379,16 @@ KubeDB allows following fields to set in `spec.serviceTemplates`:
See [here](https://github.com/kmodules/offshoot-api/blob/kubernetes-1.21.1/api/v1/types.go#L237) to understand these fields in detail.
-### spec.terminationPolicy
+### spec.deletionPolicy
-`terminationPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `Kafka` crd or which resources KubeDB should keep or delete when you delete `Kafka` crd. KubeDB provides following four termination policies:
+`deletionPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `Kafka` crd or which resources KubeDB should keep or delete when you delete `Kafka` crd. KubeDB provides following four deletion policies:
- DoNotTerminate
- WipeOut
+- Halt
+- Delete
-When `terminationPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the database as long as the `spec.terminationPolicy` is set to `DoNotTerminate`.
+When `deletionPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the database as long as the `spec.deletionPolicy` is set to `DoNotTerminate`.
## spec.healthChecker
It defines the attributes for the health checker.
diff --git a/content/docs/v2024.6.4/guides/kafka/connectcluster/connectcluster.md b/content/docs/v2024.6.4/guides/kafka/connectcluster/connectcluster.md
index b52da2971b..36713f0f02 100644
--- a/content/docs/v2024.6.4/guides/kafka/connectcluster/connectcluster.md
+++ b/content/docs/v2024.6.4/guides/kafka/connectcluster/connectcluster.md
@@ -7,6 +7,7 @@ menu:
parent: kf-connectcluster-guides
weight: 10
menu_name: docs_v2024.6.4
+section_menu_id: guides
info:
autoscaler: v0.31.0
cli: v0.46.0
@@ -118,7 +119,7 @@ spec:
kafkaRef:
name: kafka-prod
namespace: demo
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
Here,
- `spec.version` - is the name of the KafkaVersion CR. Here, a ConnectCluster of version `3.6.1` will be created.
@@ -128,7 +129,7 @@ Here,
- `spec.configSecret` - specifies the name of the secret that contains the custom configuration for the ConnectCluster. Here, the ConnectCluster will use the `connectcluster-custom-config` secret for custom configuration.
- `spec.connectorPlugins` - is the name of the KafkaConnectorVersion CR. Here, mongodb, mysql, postgres, and jdbc connector-plugins will be loaded to the ConnectCluster worker nodes.
- `spec.kafkaRef` specifies the Kafka instance that the ConnectCluster will connect to. Here, the ConnectCluster will connect to the Kafka instance named `kafka-prod` in the `demo` namespace.
-- `spec.terminationPolicy` specifies what KubeDB should do when a user try to delete ConnectCluster CR. Termination policy `WipeOut` will delete the worker pods, secret when the ConnectCluster CR is deleted.
+- `spec.deletionPolicy` specifies what KubeDB should do when a user try to delete ConnectCluster CR. Deletion policy `WipeOut` will delete the worker pods, secret when the ConnectCluster CR is deleted.
## N.B:
1. If replicas are set to 1, the ConnectCluster will run in standalone mode, you can't scale replica after provision the cluster.
@@ -282,7 +283,7 @@ spec:
connectClusterRef:
name: connectcluster-distributed
namespace: demo
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
```bash
@@ -432,7 +433,7 @@ spec:
connectClusterRef:
name: connectcluster-distributed
namespace: demo
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
```bash
@@ -494,7 +495,7 @@ You can customize the connector configuration by updating the `config.properties
To clean up the Kubernetes resources created by this tutorial, run:
```bash
-$ kubectl patch -n demo connectcluster connectcluster-distributed -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n demo connectcluster connectcluster-distributed -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
connectcluster.kafka.kubedb.com/connectcluster-distributed patched
$ kubectl delete kf connectcluster-distributed -n demo
@@ -508,7 +509,7 @@ namespace "demo" deleted
If you are just testing some basic functionalities, you might want to avoid additional hassles due to some safety features that are great for the production environment. You can follow these tips to avoid them.
-1 **Use `terminationPolicy: Delete`**. It is nice to be able to resume the cluster from the previous one. So, we preserve auth `Secrets`. If you don't want to resume the cluster, you can just use `spec.terminationPolicy: WipeOut`. It will clean up every resource that was created with the ConnectCluster CR. For more details, please visit [here](/docs/v2024.6.4/guides/kafka/concepts/connectcluster#specterminationpolicy).
+1 **Use `deletionPolicy: Delete`**. It is nice to be able to resume the cluster from the previous one. So, we preserve auth `Secrets`. If you don't want to resume the cluster, you can just use `spec.deletionPolicy: WipeOut`. It will clean up every resource that was created with the ConnectCluster CR. For more details, please visit [here](/docs/v2024.6.4/guides/kafka/concepts/connectcluster#specdeletionpolicy).
## Next Steps
diff --git a/content/docs/v2024.6.4/guides/kafka/monitoring/overview.md b/content/docs/v2024.6.4/guides/kafka/monitoring/overview.md
index 6b25b72a1f..08efbc9387 100644
--- a/content/docs/v2024.6.4/guides/kafka/monitoring/overview.md
+++ b/content/docs/v2024.6.4/guides/kafka/monitoring/overview.md
@@ -89,7 +89,7 @@ spec:
release: prometheus
interval: 10s
storageType: Durable
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
Let's deploy the above example by the following command:
diff --git a/content/docs/v2024.6.4/guides/kafka/monitoring/using-prometheus-operator.md b/content/docs/v2024.6.4/guides/kafka/monitoring/using-prometheus-operator.md
index ceb7ee57e6..ed74f972a4 100644
--- a/content/docs/v2024.6.4/guides/kafka/monitoring/using-prometheus-operator.md
+++ b/content/docs/v2024.6.4/guides/kafka/monitoring/using-prometheus-operator.md
@@ -196,7 +196,7 @@ spec:
release: prometheus
interval: 10s
storageType: Durable
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
Here,
diff --git a/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/index.md b/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/index.md
index 7c2659ae84..780ea4893c 100644
--- a/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/index.md
+++ b/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/index.md
@@ -127,7 +127,7 @@ spec:
kafkaRef:
name: kafka-quickstart
namespace: demo
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
Here,
@@ -136,7 +136,7 @@ Here,
- `spec.replicas` - specifies the number of ConnectCluster workers.
- `spec.connectorPlugins` - is the name of the KafkaConnectorVersion CR. Here, mongodb, mysql, postgres, and jdbc connector-plugins will be loaded to the ConnectCluster worker nodes.
- `spec.kafkaRef` specifies the Kafka instance that the ConnectCluster will connect to. Here, the ConnectCluster will connect to the Kafka instance named `kafka-quickstart` in the `demo` namespace.
-- `spec.terminationPolicy` specifies what KubeDB should do when a user try to delete ConnectCluster CR. Termination policy `WipeOut` will delete the worker pods, secret when the ConnectCluster CR is deleted.
+- `spec.deletionPolicy` specifies what KubeDB should do when a user try to delete ConnectCluster CR. Deletion policy `WipeOut` will delete the worker pods, secret when the ConnectCluster CR is deleted.
## N.B:
1. If replicas are set to 1, the ConnectCluster will run in standalone mode, you can't scale replica after provision the cluster.
@@ -303,7 +303,7 @@ Spec:
Security Context:
Fs Group: 1001
Replicas: 3
- Termination Policy: WipeOut
+ Deletion Policy: WipeOut
Version: 3.6.1
Status:
Conditions:
@@ -429,14 +429,14 @@ spec:
connectClusterRef:
name: connectcluster-quickstart
namespace: demo
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
Here,
- `spec.configSecret` - is the name of the secret containing the connector configuration.
- `spec.connectClusterRef` - is the name of the ConnectCluster instance that the connector will run on. This is an appbinding reference of the ConnectCluster instance.
-- `spec.terminationPolicy` - specifies what KubeDB should do when a user try to delete Connector CR. Termination policy `WipeOut` will delete the connector from the ConnectCluster when the Connector CR is deleted. If you want to keep the connector after deleting the Connector CR, you can set the termination policy to `Delete`.
+- `spec.deletionPolicy` - specifies what KubeDB should do when a user try to delete Connector CR. Deletion policy `WipeOut` will delete the connector from the ConnectCluster when the Connector CR is deleted. If you want to keep the connector after deleting the Connector CR, you can set the deletion policy to `Delete`.
Now, create the `Connector` CR that is shown above:
@@ -507,7 +507,7 @@ You can see the data inserted in the MongoDB collection is fetched by the MongoD
To clean up the Kubernetes resources created by this tutorial, run:
```bash
-$ kubectl patch -n demo connectcluster connectcluster-quickstart -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n demo connectcluster connectcluster-quickstart -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
connectcluster.kafka.kubedb.com/connectcluster-quickstart patched
$ kubectl delete kf connectcluster-quickstart -n demo
@@ -521,7 +521,7 @@ namespace "demo" deleted
If you are just testing some basic functionalities, you might want to avoid additional hassles due to some safety features that are great for the production environment. You can follow these tips to avoid them.
-1 **Use `terminationPolicy: Delete`**. It is nice to be able to resume the cluster from the previous one. So, we preserve auth `Secrets`. If you don't want to resume the cluster, you can just use `spec.terminationPolicy: WipeOut`. It will clean up every resource that was created with the ConnectCluster CR. For more details, please visit [here](/docs/v2024.6.4/guides/kafka/concepts/connectcluster#specterminationpolicy).
+1 **Use `deletionPolicy: Delete`**. It is nice to be able to resume the cluster from the previous one. So, we preserve auth `Secrets`. If you don't want to resume the cluster, you can just use `spec.deletionPolicy: WipeOut`. It will clean up every resource that was created with the ConnectCluster CR. For more details, please visit [here](/docs/v2024.6.4/guides/kafka/concepts/connectcluster#specdeletionpolicy).
## Next Steps
diff --git a/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/yamls/connectcluster.yaml b/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/yamls/connectcluster.yaml
index 80874a6453..923b4c2dcf 100644
--- a/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/yamls/connectcluster.yaml
+++ b/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/yamls/connectcluster.yaml
@@ -14,4 +14,4 @@ spec:
kafkaRef:
name: kafka-quickstart
namespace: demo
- terminationPolicy: DoNotTerminate
\ No newline at end of file
+ deletionPolicy: DoNotTerminate
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/yamls/mongodb-source-connector.yaml b/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/yamls/mongodb-source-connector.yaml
index 37933b4fee..0a537ac57c 100644
--- a/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/yamls/mongodb-source-connector.yaml
+++ b/content/docs/v2024.6.4/guides/kafka/quickstart/overview/connectcluster/yamls/mongodb-source-connector.yaml
@@ -9,4 +9,4 @@ spec:
connectClusterRef:
name: connectcluster-quickstart
namespace: demo
- terminationPolicy: WipeOut
\ No newline at end of file
+ deletionPolicy: WipeOut
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/guides/kafka/quickstart/overview/kafka/index.md b/content/docs/v2024.6.4/guides/kafka/quickstart/overview/kafka/index.md
index 9b8e0e356d..de43105f26 100644
--- a/content/docs/v2024.6.4/guides/kafka/quickstart/overview/kafka/index.md
+++ b/content/docs/v2024.6.4/guides/kafka/quickstart/overview/kafka/index.md
@@ -107,7 +107,7 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: DoNotTerminate
+ deletionPolicy: DoNotTerminate
```
Here,
@@ -116,7 +116,7 @@ Here,
- `spec.replicas` - specifies the number of Kafka brokers.
- `spec.storageType` - specifies the type of storage that will be used for Kafka. It can be `Durable` or `Ephemeral`. The default value of this field is `Durable`. If `Ephemeral` is used then KubeDB will create the Kafka using `EmptyDir` volume. In this case, you don't have to specify `spec.storage` field. This is useful for testing purposes.
- `spec.storage` specifies the StorageClass of PVC dynamically allocated to store data for this Kafka instance. This storage spec will be passed to the StatefulSet created by the KubeDB operator to run Kafka pods. You can specify any StorageClass available in your cluster with appropriate resource requests. If you don't specify `spec.storageType: Ephemeral`, then this field is required.
-- `spec.terminationPolicy` specifies what KubeDB should do when a user try to delete Kafka CR. Termination policy `Delete` will delete the database pods, secret and PVC when the Kafka CR is deleted.
+- `spec.deletionPolicy` specifies what KubeDB should do when a user try to delete Kafka CR. Deletion policy `Delete` will delete the database pods, secret and PVC when the Kafka CR is deleted.
> Note: `spec.storage` section is used to create PVC for database pod. It will create PVC with storage size specified in the `storage.resources.requests` field. Don't specify `limits` here. PVC does not get resized automatically.
@@ -181,7 +181,7 @@ Metadata:
f:storage:
f:storageClassName:
f:storageType:
- f:terminationPolicy:
+ f:deletionPolicy:
f:version:
Manager: kubectl-client-side-apply
Operation: Update
@@ -237,7 +237,7 @@ Spec:
Storage: 1Gi
Storage Class Name: standard
Storage Type: Durable
- Termination Policy: DoNotTerminate
+ Deletion Policy: DoNotTerminate
Version: 3.6.1
Status:
Conditions:
@@ -401,7 +401,7 @@ Notice that, messages are coming to the consumer as you continue sending message
To clean up the Kubernetes resources created by this tutorial, run:
```bash
-$ kubectl patch -n demo kafka kafka-quickstart -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n demo kafka kafka-quickstart -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
kafka.kubedb.com/kafka-quickstart patched
$ kubectl delete kf kafka-quickstart -n demo
@@ -416,7 +416,7 @@ namespace "demo" deleted
If you are just testing some basic functionalities, you might want to avoid additional hassles due to some safety features that are great for the 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 the database pod fails. So, we recommend to use `spec.storageType: Durable` and provide storage spec in `spec.storage` section. For testing purposes, 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 resume the database from the previous one. So, we preserve all your `PVCs` and auth `Secrets`. If you don't want to resume the database, you can just use `spec.terminationPolicy: WipeOut`. It will clean up every resource that was created with the Elasticsearch CR. For more details, please visit [here](/docs/v2024.6.4/guides/kafka/concepts/kafka#specterminationpolicy).
+2. Use **`deletionPolicy: WipeOut`**. It is nice to be able to resume the database from the previous one. So, we preserve all your `PVCs` and auth `Secrets`. If you don't want to resume the database, you can just use `spec.deletionPolicy: WipeOut`. It will clean up every resource that was created with the Elasticsearch CR. For more details, please visit [here](/docs/v2024.6.4/guides/kafka/concepts/kafka#specdeletionpolicy).
## Next Steps
diff --git a/content/docs/v2024.6.4/guides/kafka/quickstart/overview/kafka/yamls/kafka.yaml b/content/docs/v2024.6.4/guides/kafka/quickstart/overview/kafka/yamls/kafka.yaml
index 7ce3511004..d939425b1e 100644
--- a/content/docs/v2024.6.4/guides/kafka/quickstart/overview/kafka/yamls/kafka.yaml
+++ b/content/docs/v2024.6.4/guides/kafka/quickstart/overview/kafka/yamls/kafka.yaml
@@ -14,4 +14,4 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: DoNotTerminate
\ No newline at end of file
+ deletionPolicy: DoNotTerminate
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/guides/mssqlserver/quickstart/quickstart.md b/content/docs/v2024.6.4/guides/mssqlserver/quickstart/quickstart.md
index 3870a7cd8d..e7e0b9f551 100644
--- a/content/docs/v2024.6.4/guides/mssqlserver/quickstart/quickstart.md
+++ b/content/docs/v2024.6.4/guides/mssqlserver/quickstart/quickstart.md
@@ -79,6 +79,12 @@ spec:
version: "2022-cu12"
replicas: 1
storageType: Durable
+ tls:
+ issuerRef:
+ name: mssqlserver-issuer
+ kind: Issuer
+ apiGroup: "cert-manager.io"
+ clientTLS: false
storage:
storageClassName: "standard"
accessModes:
@@ -86,8 +92,7 @@ spec:
resources:
requests:
storage: 1Gi
- terminationPolicy: Delete
-
+ deletionPolicy: WipeOut
```
```bash
@@ -99,8 +104,9 @@ Here,
- `spec.version` is the name of the MSSQLServerVersion CR where the docker images are specified. In this tutorial, a MSSQLServer `2022-cu12` database is going to be created.
- `spec.storageType` specifies the type of storage that will be used for MSSQLServer database. It can be `Durable` or `Ephemeral`. Default value of this field is `Durable`. If `Ephemeral` is used then KubeDB will create MSSQLServer database using `EmptyDir` volume. In this case, you don't have to specify `spec.storage` field. This is useful for testing purposes.
+- `spec.tls` specifies the TLS/SSL configurations. The KubeDB operator supports TLS management by using the [cert-manager](https://cert-manager.io/). Here `tls.clientTLS: false` means tls will not be enabled for SQL Server but the Issuer will be used to configure tls enabled wal-g proxy-server which is required for SQL Server backup operation.
- `spec.storage` specifies the StorageClass of PVC dynamically allocated to store data for this database. This storage spec will be passed to the PetSet 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 `MSSQLServer` CR or which resources KubeDB should keep or delete when you delete `MSSQLServer` CR. 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/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy)
+- `spec.deletionPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `MSSQLServer` CR or which resources KubeDB should keep or delete when you delete `MSSQLServer` CR. If admission webhook is enabled, It prevents users from deleting the database as long as the `spec.deletionPolicy` is set to `DoNotTerminate`. Learn details of all `DeletionPolicy` [here](/docs/v2024.6.4/guides/mysql/concepts/database/#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.
@@ -141,26 +147,25 @@ kind: MSSQLServer
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"MSSQLServer","metadata":{"annotations":{},"name":"mssqlserver-quickstart","namespace":"demo"},"spec":{"replicas":1,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"storageType":"Durable","terminationPolicy":"Delete","version":"2022-cu12"}}
- creationTimestamp: "2024-05-02T13:42:30Z"
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"MSSQLServer","metadata":{"annotations":{},"name":"mssqlserver-quickstart","namespace":"demo"},"spec":{"deletionPolicy":"WipeOut","replicas":1,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}}},"storageType":"Durable","tls":{"clientTLS":false,"issuerRef":{"apiGroup":"cert-manager.io","kind":"Issuer","name":"mssqlserver-issuer"}},"version":"2022-cu12"}}
+ creationTimestamp: "2024-06-25T06:12:57Z"
finalizers:
- kubedb.com
generation: 2
name: mssqlserver-quickstart
namespace: demo
- resourceVersion: "191795"
- uid: af908d5e-31ba-4ac5-9d9b-b49f697fceab
+ resourceVersion: "60663"
+ uid: e0fbca5f-b699-489b-a218-4c5b35025394
spec:
authSecret:
name: mssqlserver-quickstart-auth
coordinator:
resources: {}
+ deletionPolicy: WipeOut
healthChecker:
failureThreshold: 1
periodSeconds: 10
timeoutSeconds: 10
- podPlacementPolicy:
- name: default
podTemplate:
controller: {}
metadata: {}
@@ -203,6 +208,8 @@ spec:
runAsUser: 10001
seccompProfile:
type: RuntimeDefault
+ podPlacementPolicy:
+ name: default
securityContext:
fsGroup: 10001
replicas: 1
@@ -214,42 +221,61 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: Delete
+ tls:
+ certificates:
+ - alias: server
+ secretName: mssqlserver-quickstart-server-cert
+ subject:
+ organizationalUnits:
+ - server
+ organizations:
+ - kubedb
+ - alias: client
+ secretName: mssqlserver-quickstart-client-cert
+ subject:
+ organizationalUnits:
+ - client
+ organizations:
+ - kubedb
+ clientTLS: false
+ issuerRef:
+ apiGroup: cert-manager.io
+ kind: Issuer
+ name: mssqlserver-issuer
version: 2022-cu12
status:
conditions:
- - lastTransitionTime: "2024-05-02T13:42:30Z"
+ - lastTransitionTime: "2024-06-25T06:12:57Z"
message: 'The KubeDB operator has started the provisioning of MSSQL: demo/mssqlserver-quickstart'
observedGeneration: 1
reason: DatabaseProvisioningStartedSuccessfully
status: "True"
type: ProvisioningStarted
- - lastTransitionTime: "2024-05-02T13:42:50Z"
+ - lastTransitionTime: "2024-06-25T06:15:02Z"
message: All replicas are ready for MSSQL demo/mssqlserver-quickstart
observedGeneration: 2
reason: AllReplicasReady
status: "True"
type: ReplicaReady
- - lastTransitionTime: "2024-05-02T13:43:10Z"
+ - lastTransitionTime: "2024-06-25T06:15:13Z"
message: database demo/mssqlserver-quickstart is accepting connection
observedGeneration: 2
reason: AcceptingConnection
status: "True"
type: AcceptingConnection
- - lastTransitionTime: "2024-05-02T13:43:10Z"
+ - lastTransitionTime: "2024-06-25T06:15:13Z"
message: database demo/mssqlserver-quickstart is ready
observedGeneration: 2
reason: AllReplicasReady
status: "True"
type: Ready
- - lastTransitionTime: "2024-05-02T13:43:10Z"
+ - lastTransitionTime: "2024-06-25T06:16:04Z"
message: 'The MSSQL: demo/mssqlserver-quickstart is successfully provisioned.'
observedGeneration: 2
reason: DatabaseSuccessfullyProvisioned
status: "True"
type: Provisioned
phase: Ready
-
```
## Connect with MSSQLServer database
@@ -345,7 +371,7 @@ items:
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"MSSQLServer","metadata":{"annotations":{},"name":"mssqlserver-quickstart","namespace":"demo"},"spec":{"replicas":1,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"storageType":"Durable","terminationPolicy":"Delete","version":"2022-cu12"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"MSSQLServer","metadata":{"annotations":{},"name":"mssqlserver-quickstart","namespace":"demo"},"spec":{"replicas":1,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"storageType":"Durable","deletionPolicy":"Delete","version":"2022-cu12"}}
creationTimestamp: "2024-05-08T06:43:45Z"
generation: 1
labels:
@@ -390,30 +416,30 @@ You can use this appbinding to connect with the mssql server from external
-## Database TerminationPolicy
+## Database DeletionPolicy
This field is used to regulate the deletion process of the related resources when `MSSQLServer` 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:
+When `deletionPolicy` 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.deletionPolicy` is set to `DoNotTerminate`. You can see this below:
```bash
$ kubectl delete ms -n demo mssqlserver-quickstart
-The MSSQLServer "mssqlserver-quickstart" is invalid: spec.terminationPolicy: Invalid value: "mssqlserver-quickstart": Can not delete as terminationPolicy is set to "DoNotTerminate"
+The MSSQLServer "mssqlserver-quickstart" is invalid: spec.deletionPolicy: Invalid value: "mssqlserver-quickstart": Can not delete as deletionPolicy is set to "DoNotTerminate"
```
-Now, run `kubectl patch -n demo ms mssqlserver-quickstart -p '{"spec":{"terminationPolicy":"Halt"}}' --type="merge"` to set `spec.terminationPolicy` to `Halt` (which deletes the mssqlserver 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.
+Now, run `kubectl patch -n demo ms mssqlserver-quickstart -p '{"spec":{"deletionPolicy":"Halt"}}' --type="merge"` to set `spec.deletionPolicy` to `Halt` (which deletes the mssqlserver 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/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy).
+Learn details of all `DeletionPolicy` [here](/docs/v2024.6.4/guides/mysql/concepts/database/#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 `MSSQLServer` object `terminationPolicy` to `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 `MSSQLServer` object `deletionPolicy` to `Halt`.
-When the [TerminationPolicy](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy) is set to `halt` and the MSSQLServer object is deleted, the KubeDB operator will delete the PetSet 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.
+When the [DeletionPolicy](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy) is set to `halt` and the MSSQLServer object is deleted, the KubeDB operator will delete the PetSet and its pods but leaves the `PVCs`, `secrets` and database backup data(`snapshots`) intact. You can set the `deletionPolicy` to `halt` in existing database using `patch` command for testing.
-At first, run `kubectl patch -n demo ms mssqlserver-quickstart -p '{"spec":{"terminationPolicy":"Halt"}}' --type="merge"`. Then delete the mssqlserver object,
+At first, run `kubectl patch -n demo ms mssqlserver-quickstart -p '{"spec":{"deletionPolicy":"Halt"}}' --type="merge"`. Then delete the mssqlserver object,
```bash
$ kubectl delete ms -n demo mssqlserver-quickstart
@@ -434,15 +460,15 @@ persistentvolumeclaim/data-mssqlserver-quickstart-0 Bound pvc-0e6a361e-9195
From the above output, you can see that all mssqlserver resources(`PetSet`, `Service`, etc.) are deleted except `PVC` and `Secret`. You can recreate your mssqlserver again using these resources.
->You can also set the `terminationPolicy` to `Halt`(deprecated). It's behavior same as `halt` and right now `halt` is replaced by `Halt`.
+>You can also set the `deletionPolicy` 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 `MSSQLServer` object `terminationPolicy` to `Delete`. In this setting, `PetSet` and the volumes will be deleted. If you decide to restore the database, you can do so using the snapshots and the credentials.
+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 `MSSQLServer` object `deletionPolicy` to `Delete`. In this setting, `PetSet` 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/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy) is set to `Delete` and the MSSQLServer object is deleted, the KubeDB operator will delete the PetSet and its pods along with PVCs but leaves the `secret` and database backup data(`snapshots`) intact.
+When the [DeletionPolicy](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy) is set to `Delete` and the MSSQLServer object is deleted, the KubeDB operator will delete the PetSet 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:
+Suppose, we have a database with `deletionPolicy` set to `Delete`. Now, are going to delete the database using the following command:
```bash
$ kubectl delete ms -n demo mssqlserver-quickstart
@@ -460,13 +486,13 @@ secret/mssqlserver-quickstart-auth kubernetes.io/basic-auth 2 58m
From the above output, you can see that all mssqlserver resources(`PetSet`, `Service`, `PVCs` etc.) are deleted except `Secret`. You can initialize your mssqlserver using `snapshots`(if previously taken) and `secret`.
->If you don't set the terminationPolicy then the kubeDB set the TerminationPolicy to Delete by-default.
+>If you don't set the deletionPolicy then the kubeDB set the DeletionPolicy to Delete by-default.
**WipeOut:**
-You can totally delete the `MSSQLServer` database and relevant resources without any tracking by setting `terminationPolicy` to `WipeOut`. KubeDB operator will delete all relevant resources of this `MSSQLServer` database (i.e, `PVCs`, `Secrets`, `Snapshots`) when the `terminationPolicy` is set to `WipeOut`.
+You can totally delete the `MSSQLServer` database and relevant resources without any tracking by setting `deletionPolicy` to `WipeOut`. KubeDB operator will delete all relevant resources of this `MSSQLServer` database (i.e, `PVCs`, `Secrets`, `Snapshots`) when the `deletionPolicy` 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:
+Suppose, we have a database with `deletionPolicy` set to `WipeOut`. Now, are going to delete the database using the following command:
```yaml
$ kubectl delete ms -n demo mssqlserver-quickstart
@@ -480,16 +506,16 @@ $ kubectl get petset,svc,secret,pvc -n demo
No resources found in demo namespace.
```
-From the above output, you can see that all mssqlserver resources are deleted. there is no option to recreate/reinitialize your database if `terminationPolicy` is set to `WipeOut`.
+From the above output, you can see that all mssqlserver resources are deleted. there is no option to recreate/reinitialize your database if `deletionPolicy` is set to `WipeOut`.
->Be careful when you set the `terminationPolicy` to `WipeOut`. Because there is no option to trace the database resources if once deleted the database.
+>Be careful when you set the `deletionPolicy` to `WipeOut`. Because there is no option to trace the database resources if once deleted the database.
## Cleaning up
To clean up the Kubernetes resources created by this tutorial, run:
```bash
-kubectl patch -n demo mssqlserver/mssqlserver-quickstart -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+kubectl patch -n demo mssqlserver/mssqlserver-quickstart -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
kubectl delete mssqlserver -n demo mssqlserver-quickstart
@@ -501,7 +527,7 @@ kubectl delete ns demo
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 MSSQLServer crd when you delete the crd. For more details about termination policy, please visit [here](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy).
+2. **Use `deletionPolicy: WipeOut`**. It is nice to be able to delete everything created by KubeDB for a particular MSSQLServer crd when you delete the crd. For more details about deletion policy, please visit [here](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy).
## Next Steps
diff --git a/content/docs/v2024.6.4/guides/pgbouncer/README.md b/content/docs/v2024.6.4/guides/pgbouncer/README.md
index b0d091a1be..7483068bfc 100644
--- a/content/docs/v2024.6.4/guides/pgbouncer/README.md
+++ b/content/docs/v2024.6.4/guides/pgbouncer/README.md
@@ -28,14 +28,14 @@ info:
# Overview
-[PgBouncer](https://pgbouncer.github.io/) is an open-source, lightweight, single-binary connection-pooling middleware for PostgreSQL. PgBouncer maintains a pool of connections for each locally stored user-database pair. It is typically configured to hand out one of these connections to a new incoming client connection, and return it back in to the pool when the client disconnects. PgBouncer can manage one or more PostgreSQL databases on possibly different servers and serve clients over TCP and Unix domain sockets. For a more hands-on experience, see this brief [tutorial on how to create a PgBouncer](https://pgdash.io/blog/pgbouncer-connection-pool.html) for PostgreSQL database.
+[PgBouncer](https://pgbouncer.github.io/) is an open-source, lightweight, single-binary connection-pooling middleware for PostgreSQL. PgBouncer maintains a pool of connections for each locally stored user-database pair. It is typically configured to hand out one of these connections to a new incoming client connection, and return it back in to the pool when the client disconnects. PgBouncer can manage only one PostgreSQL database on possibly different servers and serve clients over TCP and Unix domain sockets. For a more hands-on experience, see this brief [tutorial on how to create a PgBouncer](https://pgdash.io/blog/pgbouncer-connection-pool.html) for PostgreSQL database.
KubeDB operator now comes bundled with PgBouncer crd to handle connection pooling. With connection pooling, clients connect to a proxy server which maintains a pool of direct connections to other real PostgreSQL servers. PgBouncer crd can handle multiple local or remote Postgres database connections across multiple users using PgBouncer's connection pooling mechanism.
## PgBouncer Features
| Features | Availability |
-|------------------------------------| :----------: |
+|------------------------------------|:------------:|
| Clustering | ✓ |
| Multiple PgBouncer Versions | ✓ |
| Customizable Pooling Configuration | ✓ |
diff --git a/content/docs/v2024.6.4/guides/pgbouncer/cli/cli.md b/content/docs/v2024.6.4/guides/pgbouncer/cli/cli.md
index 9697172f9e..cb92de7e9d 100644
--- a/content/docs/v2024.6.4/guides/pgbouncer/cli/cli.md
+++ b/content/docs/v2024.6.4/guides/pgbouncer/cli/cli.md
@@ -73,10 +73,10 @@ kind: PgBouncer
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"PgBouncer","metadata":{"annotations":{},"name":"pgbouncer-demo","namespace":"demo"},"spec":{"connectionPool":{"adminUsers":["admin","admin1"],"maxClientConnections":20,"reservePoolSize":5},"databases":[{"alias":"postgres","databaseName":"postgres","databaseRef":{"name":"quick-postgres"}},{"alias":"tmpdb","databaseName":"mydb","databaseRef":{"name":"quick-postgres"}}],"monitor":{"agent":"prometheus.io/builtin"},"replicas":1,"userListSecretRef":{"name":"db-user-pass"},"version":"1.17.0"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"PgBouncer","metadata":{"annotations":{},"name":"pgbouncer-demo","namespace":"demo"},"spec":{"connectionPool":{"adminUsers":["admin","admin1"],"maxClientConnections":20,"reservePoolSize":5},"database":{"databaseName":"postgres","databaseRef":{"name":"quick-postgres"}},"monitor":{"agent":"prometheus.io/builtin"},"replicas":1,"userListSecretRef":{"name":"db-user-pass"},"version":"1.17.0"}}
creationTimestamp: "2019-10-31T10:34:04Z"
finalizers:
- - kubedb.com
+ - kubedb.com
generation: 1
name: pgbouncer-demo
namespace: demo
@@ -88,16 +88,11 @@ spec:
poolMode: session
port: 5432
reservePoolSize: 5
- databases:
- - alias: postgres
- databaseName: postgres
+ database:
+ syncUsers: true
+ databaseName: "postgres"
databaseRef:
- name: quick-postgres
- nnamespace: demo
- - alias: tmpdb
- databaseName: mydb
- databaseRef:
- name: quick-postgres
+ name: "quick-postgres"
namespace: demo
monitor:
agent: prometheus.io/builtin
@@ -208,8 +203,7 @@ Spec:
Max Client Conn: 20
Pool Mode: session
Reserve Pool Size: 5
- Databases:
- Alias: postgres
+ Database:
App Binding Name: postgres-demo
App Binding Namespace: demo
Database Name: postgres
diff --git a/content/docs/v2024.6.4/guides/pgbouncer/concepts/pgbouncer.md b/content/docs/v2024.6.4/guides/pgbouncer/concepts/pgbouncer.md
index 98f0ff3c82..4944e7b2cc 100644
--- a/content/docs/v2024.6.4/guides/pgbouncer/concepts/pgbouncer.md
+++ b/content/docs/v2024.6.4/guides/pgbouncer/concepts/pgbouncer.md
@@ -44,8 +44,8 @@ metadata:
spec:
version: "1.18.0"
replicas: 2
- databases:
- - alias: "postgres"
+ database:
+ syncUsers: true
databaseName: "postgres"
databaseRef:
name: "quick-postgres"
@@ -72,11 +72,11 @@ spec:
`spec.replicas` specifies the total number of available pgbouncer server nodes for each crd. KubeDB uses `PodDisruptionBudget` to ensure that majority of the replicas are available during [voluntary disruptions](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/#voluntary-and-involuntary-disruptions).
-### spec.databases
+### spec.database
-`spec.databases` specifies an array of postgres databases that pgbouncer should add to its connection pool. It contains three `required` fields and two `optional` fields for each database connection.
+`spec.database` specifies a single postgres database that pgbouncer should add to its connection pool. It contains two `required` fields and one `optional` field for database connection.
-- `spec.databases.alias`: specifies an alias for the target database located in a postgres server specified by an appbinding.
+- `spec.databases.syncUsers`: specifies whether the pgbouncer should collect usernames and passwords from external secrets with specified labels.
- `spec.databases.databaseName`: specifies the name of the target database.
- `spec.databases.databaseRef`: specifies the name and namespace of the AppBinding that contains the path to a PostgreSQL server where the target database can be found.
diff --git a/content/docs/v2024.6.4/guides/pgbouncer/custom-versions/setup.md b/content/docs/v2024.6.4/guides/pgbouncer/custom-versions/setup.md
index 372108fde0..0a60b074f4 100644
--- a/content/docs/v2024.6.4/guides/pgbouncer/custom-versions/setup.md
+++ b/content/docs/v2024.6.4/guides/pgbouncer/custom-versions/setup.md
@@ -74,10 +74,10 @@ spec:
poolMode: session
port: 5432
reservePoolSize: 5
- databases:
- - alias: postgres
- databaseName: postgres
+ database:
+ syncUsers: true
+ databaseName: "postgres"
databaseRef:
- name: quick-postgres
+ name: "quick-postgres"
namespace: demo
```
diff --git a/content/docs/v2024.6.4/guides/pgbouncer/monitoring/using-builtin-prometheus.md b/content/docs/v2024.6.4/guides/pgbouncer/monitoring/using-builtin-prometheus.md
index bb826ae7ff..0fbfb7c26a 100644
--- a/content/docs/v2024.6.4/guides/pgbouncer/monitoring/using-builtin-prometheus.md
+++ b/content/docs/v2024.6.4/guides/pgbouncer/monitoring/using-builtin-prometheus.md
@@ -62,8 +62,8 @@ metadata:
spec:
version: "1.17.0"
replicas: 1
- databases:
- - alias: "postgres"
+ database:
+ syncUsers: true
databaseName: "postgres"
databaseRef:
name: "quick-postgres"
diff --git a/content/docs/v2024.6.4/guides/pgbouncer/monitoring/using-prometheus-operator.md b/content/docs/v2024.6.4/guides/pgbouncer/monitoring/using-prometheus-operator.md
index 07b5651209..6623364848 100644
--- a/content/docs/v2024.6.4/guides/pgbouncer/monitoring/using-prometheus-operator.md
+++ b/content/docs/v2024.6.4/guides/pgbouncer/monitoring/using-prometheus-operator.md
@@ -122,8 +122,8 @@ metadata:
spec:
version: "1.17.0"
replicas: 1
- databases:
- - alias: "postgres"
+ database:
+ syncUsers: true
databaseName: "postgres"
databaseRef:
name: "quick-postgres"
diff --git a/content/docs/v2024.6.4/guides/pgbouncer/private-registry/using-private-registry.md b/content/docs/v2024.6.4/guides/pgbouncer/private-registry/using-private-registry.md
index 776e524cff..74f041f21d 100644
--- a/content/docs/v2024.6.4/guides/pgbouncer/private-registry/using-private-registry.md
+++ b/content/docs/v2024.6.4/guides/pgbouncer/private-registry/using-private-registry.md
@@ -122,8 +122,8 @@ metadata:
namespace: demo
spec:
version: "1.17.0"
- databases:
- - alias: "postgres"
+ database:
+ syncUsers: true
databaseName: "postgres"
databaseRef:
name: "quick-postgres"
@@ -134,7 +134,7 @@ spec:
podTemplate:
spec:
imagePullSecrets:
- - name: myregistrykey
+ - name: myregistrykey
```
Now run the command to create this pgbouncer server:
diff --git a/content/docs/v2024.6.4/guides/pgbouncer/quickstart/quickstart.md b/content/docs/v2024.6.4/guides/pgbouncer/quickstart/quickstart.md
index dad6b6fffa..73032aa78c 100644
--- a/content/docs/v2024.6.4/guides/pgbouncer/quickstart/quickstart.md
+++ b/content/docs/v2024.6.4/guides/pgbouncer/quickstart/quickstart.md
@@ -176,8 +176,8 @@ metadata:
spec:
version: "1.18.0"
replicas: 1
- databases:
- - alias: "postgres"
+ database:
+ syncUsers: true
databaseName: "postgres"
databaseRef:
name: "quick-postgres"
@@ -193,19 +193,17 @@ Here,
- `spec.version` is name of the PgBouncerVersion crd where the docker images are specified. In this tutorial, a PgBouncer with base image version 1.17.0 is created.
- `spec.replicas` specifies the number of replica pgbouncer server pods to be created for the PgBouncer object.
-- `spec.databases` specifies the databases that are going to be served via PgBouncer.
+- `spec.database` specifies the database that are going to be served via PgBouncer.
- `spec.connectionPool` specifies the configurations for connection pool.
- `spec.terminationPolicy` specifies what policy to apply while deletion.
-### spec.databases
+### spec.database
-Databases contain three `required` fields and two `optional` fields.
+Databases contain two `required` fields and one `optional` field.
-- `spec.databases.alias`: specifies an alias for the target database located in a postgres server specified by an appbinding.
+- `spec.databases.syncUsers`: Specifies whether PgBouncer should collect usernames and passwords from external secrets with specified labels.
- `spec.databases.databaseName`: specifies the name of the target database.
- `spec.databases.databaseRef`: specifies the name and namespace of the appBinding that contains the path to a PostgreSQL server where the target database can be found.
-- `spec.databases.username` (optional): specifies the user with whom this particular database should have an exclusive connection. By default, if this field is left empty, all users will be able to use the database.
-- `spec.databases.password` (optional): specifies password to authenticate the user with whom this particular database should have an exclusive connection.
### spec.connectionPool
@@ -332,7 +330,7 @@ Metadata:
f:reservePoolSize:
f:reservePoolTimeoutSeconds:
f:statsPeriodSeconds:
- f:databases:
+ f:database:
f:healthChecker:
.:
f:failureThreshold:
@@ -387,8 +385,7 @@ Spec:
Reserve Pool Size: 5
Reserve Pool Timeout Seconds: 5
Stats Period Seconds: 60
- Databases:
- Alias: postgres
+ Database:
Database Name: postgres
Database Ref:
Name: quick-postgres
diff --git a/content/docs/v2024.6.4/guides/pgpool/concepts/pgpool.md b/content/docs/v2024.6.4/guides/pgpool/concepts/pgpool.md
index 07798ac0ba..2c7fd48168 100644
--- a/content/docs/v2024.6.4/guides/pgpool/concepts/pgpool.md
+++ b/content/docs/v2024.6.4/guides/pgpool/concepts/pgpool.md
@@ -68,7 +68,7 @@ spec:
labels:
release: prometheus
interval: 10s
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
syncUsers: true
initConfig:
pgpoolConfig:
diff --git a/content/docs/v2024.6.4/guides/pgpool/custom-versions/setup.md b/content/docs/v2024.6.4/guides/pgpool/custom-versions/setup.md
index 2a66f94c38..8460bafe53 100644
--- a/content/docs/v2024.6.4/guides/pgpool/custom-versions/setup.md
+++ b/content/docs/v2024.6.4/guides/pgpool/custom-versions/setup.md
@@ -76,5 +76,5 @@ spec:
sslMode: disable
clientAuthMode: md5
syncUsers: true
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
diff --git a/content/docs/v2024.6.4/guides/pgpool/quickstart/quickstart.md b/content/docs/v2024.6.4/guides/pgpool/quickstart/quickstart.md
index 8e3b0231fa..2555a954f3 100644
--- a/content/docs/v2024.6.4/guides/pgpool/quickstart/quickstart.md
+++ b/content/docs/v2024.6.4/guides/pgpool/quickstart/quickstart.md
@@ -183,7 +183,7 @@ spec:
sslMode: disable
clientAuthMode: md5
syncUsers: true
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
```
Here,
@@ -194,7 +194,7 @@ Here,
- `spec.sslMode` specifies ssl mode for clients.
- `spec.clientAuthMode` specifies the authentication method that will be used for clients.
- `spec.syncUsers` specifies whether user want to sync additional users to Pgpool.
-- `spec.terminationPolicy` specifies what policy to apply while deletion.
+- `spec.deletionPolicy` specifies what policy to apply while deletion.
Now that we've been introduced to the pgpool CRD, let's create it,
@@ -284,7 +284,7 @@ Metadata:
f:replicas:
f:sslMode:
f:syncUsers:
- f:terminationPolicy:
+ f:deletionPolicy:
f:version:
Manager: kubectl-client-side-apply
Operation: Update
@@ -354,7 +354,7 @@ Spec:
Replicas: 1
Ssl Mode: disable
Sync Users: true
- Termination Policy: WipeOut
+ Deletion Policy: WipeOut
Version: 4.5.0
Status:
Conditions:
@@ -500,15 +500,15 @@ Here, we can see the default configuration KubeDB operator has set for us. You c
## Cleaning up
-If you don't set the terminationPolicy, then the kubeDB set the TerminationPolicy to `Delete` by-default.
+If you don't set the deletionPolicy, then the kubeDB set the DeletionPolicy to `Delete` by-default.
### Delete
-If you want to delete the existing pgpool, but want to keep the secrets intact then you might want to set the pgpool object terminationPolicy to Delete. In this setting, PetSet and the services will be deleted.
+If you want to delete the existing pgpool, but want to keep the secrets intact then you might want to set the pgpool object deletionPolicy to Delete. In this setting, PetSet and the services will be deleted.
-When the TerminationPolicy is set to Delete and the pgpool object is deleted, the KubeDB operator will delete the PetSet and its pods along with the services but leaves the secrets intact.
+When the DeletionPolicy is set to Delete and the pgpool object is deleted, the KubeDB operator will delete the PetSet and its pods along with the services but leaves the secrets intact.
```bash
-$ kubectl patch -n pool pp/quick-pgpool -p '{"spec":{"terminationPolicy":"Delete"}}' --type="merge"
+$ kubectl patch -n pool pp/quick-pgpool -p '{"spec":{"deletionPolicy":"Delete"}}' --type="merge"
pgpool.kubedb.com/quick-pgpool patched
$ kubectl delete -n pool pp/quick-pgpool
@@ -535,7 +535,7 @@ secret/quick-pgpool-config Opaque 2 3h22m
But if you want to cleanup each of the Kubernetes resources created by this tutorial, run:
```bash
-$ kubectl patch -n pool pp/quick-pgpool -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n pool pp/quick-pgpool -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
$ kubectl delete -n pool pp/quick-pgpool
pgpool.kubedb.com "quick-pgpool" deleted
diff --git a/content/docs/v2024.6.4/guides/rabbitmq/quickstart/quickstart.md b/content/docs/v2024.6.4/guides/rabbitmq/quickstart/quickstart.md
index 427d4202b0..2a07d45492 100644
--- a/content/docs/v2024.6.4/guides/rabbitmq/quickstart/quickstart.md
+++ b/content/docs/v2024.6.4/guides/rabbitmq/quickstart/quickstart.md
@@ -85,7 +85,7 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: WipeOut # DoNotTerminate(blocks deletion), Halt( retains pvc,secret), Delete (retains secret)
+ deletionPolicy: WipeOut # DoNotTerminate(blocks deletion), Halt( retains pvc,secret), Delete (retains secret)
podTemplate:
spec:
containers:
@@ -112,7 +112,7 @@ Here,
- `.spec.replica` is used to provide the number of required replicas or, peers for intended rabbitmq cluster.
- `spec.version` is the name of the RabbitMQVersion CRD where the docker images are specified. In this tutorial, a RabbitMQ `3.12.12` database is going to be created.
- `spec.storageType` specifies the type of storage that will be used for RabbitMQ database. It can be `Durable` or `Ephemeral`. Default value of this field is `Durable`. If `Ephemeral` is used then KubeDB will create RabbitMQ database using `EmptyDir` volume. In this case, you don't have to specify `spec.storage` field. This is useful for testing purposes.
-- `spec.terminationPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `RabbitMQ` CRD or which resources KubeDB should keep or delete when you delete `RabbitMQ` 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/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy)
+- `spec.deletionPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `RabbitMQ` CRD or which resources KubeDB should keep or delete when you delete `RabbitMQ` CRD. If admission webhook is enabled, It prevents users from deleting the database as long as the `spec.deletionPolicy` is set to `DoNotTerminate`. Learn details of all `DeletionPolicy` [here](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy)
- `.spec.podTemplate` is used to provide specific pod specifications or container specification. You can override default resources, securityContext etc. set for rabbitmq container. Find details [here](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec)
- `spec.serviceTemplates` is used to provide template for the services created by KubeDB operator for RabbitMQ database. This will allow you to set the type and other properties of the services.
@@ -158,7 +158,7 @@ kind: RabbitMQ
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"RabbitMQ","metadata":{"annotations":{},"name":"rm-quickstart","namespace":"demo"},"spec":{"podTemplate":{"spec":{"containers":[{"name":"rabbitmq","resources":{"limits":{"cpu":"2","memory":"2Gi"},"requests":{"cpu":"0.5","memory":"1Gi"}}}]}},"replicas":3,"serviceTemplates":[{"alias":"primary","spec":{"type":"LoadBalancer"}}],"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"storageType":"Durable","terminationPolicy":"WipeOut","version":"3.12.12"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"RabbitMQ","metadata":{"annotations":{},"name":"rm-quickstart","namespace":"demo"},"spec":{"podTemplate":{"spec":{"containers":[{"name":"rabbitmq","resources":{"limits":{"cpu":"2","memory":"2Gi"},"requests":{"cpu":"0.5","memory":"1Gi"}}}]}},"replicas":3,"serviceTemplates":[{"alias":"primary","spec":{"type":"LoadBalancer"}}],"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"storageType":"Durable","deletionPolicy":"WipeOut","version":"3.12.12"}}
creationTimestamp: "2024-05-07T10:25:35Z"
finalizers:
- kubedb.com/rabbitmq
@@ -174,8 +174,6 @@ spec:
failureThreshold: 3
periodSeconds: 20
timeoutSeconds: 10
- podPlacementPolicy:
- name: default
podTemplate:
controller: {}
metadata: {}
@@ -226,7 +224,7 @@ spec:
storage: 1Gi
storageClassName: standard
storageType: Durable
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
version: 3.12.12
status:
conditions:
@@ -328,30 +326,30 @@ Lets, open your browser and go to the **http://localhost:15672** then access usi
-## Database TerminationPolicy
+## Database DeletionPolicy
This field is used to regulate the deletion process of the related resources when `RabbitMQ` 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:
+When `deletionPolicy` 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.deletionPolicy` is set to `DoNotTerminate`. You can see this below:
```bash
$ kubectl delete rm rm-quickstart -n demo
-The RabbitMQ "rm-quickstart" is invalid: spec.terminationPolicy: Invalid value: "rm-quickstart": Can not delete as terminationPolicy is set to "DoNotTerminate"
+The RabbitMQ "rm-quickstart" is invalid: spec.deletionPolicy: Invalid value: "rm-quickstart": Can not delete as deletionPolicy is set to "DoNotTerminate"
```
-Now, run `kubectl patch -n demo rm rm-quickstart -p '{"spec":{"terminationPolicy":"Halt"}}' --type="merge"` to set `spec.terminationPolicy` to `Halt` (which deletes the RabbitMQ 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.
+Now, run `kubectl patch -n demo rm rm-quickstart -p '{"spec":{"deletionPolicy":"Halt"}}' --type="merge"` to set `spec.deletionPolicy` to `Halt` (which deletes the RabbitMQ 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/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy).
+Learn details of all `DeletionPolicy` [here](/docs/v2024.6.4/guides/mysql/concepts/database/#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 `RabbitMQ` object `terminationPolicy` to `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 `RabbitMQ` object `deletionPolicy` to `Halt`.
-When the [TerminationPolicy](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy) is set to `halt` and the RabbitMQ object is deleted, the KubeDB operator will delete the PetSet 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.
+When the [DeletionPolicy](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy) is set to `halt` and the RabbitMQ object is deleted, the KubeDB operator will delete the PetSet and its pods but leaves the `PVCs`, `secrets` and database backup data(`snapshots`) intact. You can set the `deletionPolicy` to `halt` in existing database using `patch` command for testing.
-At first, run `kubectl patch -n demo rm rm-quickstart -p '{"spec":{"terminationPolicy":"Halt"}}' --type="merge"`. Then delete the RabbitMQ object,
+At first, run `kubectl patch -n demo rm rm-quickstart -p '{"spec":{"deletionPolicy":"Halt"}}' --type="merge"`. Then delete the RabbitMQ object,
```bash
$ kubectl delete rm rm-quickstart -n demo
@@ -374,15 +372,15 @@ rm-quickstart-data-rm-quickstart-2 Bound pvc-ddfd1987-c8b2-4c72-90ad-a8361e
From the above output, you can see that all RabbitMQ resources(`PetSet`, `Service`, etc.) are deleted except `PVC` and `Secret`. You can recreate your RabbitMQ again using these resources.
->You can also set the `terminationPolicy` to `Halt`(deprecated). It's behavior same as `halt` and right now `Halt` is replaced by `Halt`.
+>You can also set the `deletionPolicy` 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 `RabbitMQ` object `terminationPolicy` to `Delete`. In this setting, `PetSet` and the volumes will be deleted. If you decide to restore the database, you can do so using the snapshots and the credentials.
+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 `RabbitMQ` object `deletionPolicy` to `Delete`. In this setting, `PetSet` 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/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy) is set to `Delete` and the RabbitMQ object is deleted, the KubeDB operator will delete the PetSet and its pods along with PVCs but leaves the `secret` and database backup data(`snapshots`) intact.
+When the [DeletionPolicy](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy) is set to `Delete` and the RabbitMQ object is deleted, the KubeDB operator will delete the PetSet 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:
+Suppose, we have a database with `deletionPolicy` set to `Delete`. Now, are going to delete the database using the following command:
```bash
$ kubectl delete rm rm-quickstart -n demo
@@ -399,13 +397,13 @@ secret/rm-quickstart-root-cred kubernetes.io/basic-auth 2 17m
From the above output, you can see that all RabbitMQ resources(`PetSet`, `Service`, `PVCs` etc.) are deleted except `Secret`.
->If you don't set the terminationPolicy then the kubeDB set the TerminationPolicy to Delete by-default.
+>If you don't set the deletionPolicy then the kubeDB set the DeletionPolicy to Delete by-default.
**WipeOut:**
-You can totally delete the `RabbitMQ` database and relevant resources without any tracking by setting `terminationPolicy` to `WipeOut`. KubeDB operator will delete all relevant resources of this `RabbitMQ` database (i.e, `PVCs`, `Secrets`, `Snapshots`) when the `terminationPolicy` is set to `WipeOut`.
+You can totally delete the `RabbitMQ` database and relevant resources without any tracking by setting `deletionPolicy` to `WipeOut`. KubeDB operator will delete all relevant resources of this `RabbitMQ` database (i.e, `PVCs`, `Secrets`, `Snapshots`) when the `deletionPolicy` 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:
+Suppose, we have a database with `deletionPolicy` set to `WipeOut`. Now, are going to delete the database using the following command:
```yaml
$ kubectl delete rm rm-quickstart -n demo
@@ -419,16 +417,16 @@ $ kubectl get petset,svc,secret,pvc -n demo
No resources found in demo namespace.
```
-From the above output, you can see that all RabbitMQ resources are deleted. There is no option to recreate/reinitialize your database if `terminationPolicy` is set to `Delete`.
+From the above output, you can see that all RabbitMQ resources are deleted. There is no option to recreate/reinitialize your database if `deletionPolicy` 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.
+>Be careful when you set the `deletionPolicy` 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 rabbitmq/rm-quickstart -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+kubectl patch -n demo rabbitmq/rm-quickstart -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
kubectl delete -n demo rabbitmq/rm-quickstart
kubectl delete ns demo
```
@@ -438,4 +436,4 @@ kubectl delete ns demo
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 RabbitMQ crd when you delete the crd. For more details about termination policy, please visit [here](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy).
\ No newline at end of file
+2. **Use `deletionPolicy: WipeOut`**. It is nice to be able to delete everything created by KubeDB for a particular RabbitMQ crd when you delete the crd. For more details about deletion policy, please visit [here](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy).
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/guides/singlestore/quickstart/quickstart.md b/content/docs/v2024.6.4/guides/singlestore/quickstart/quickstart.md
index 76037f88b5..0a82713f12 100644
--- a/content/docs/v2024.6.4/guides/singlestore/quickstart/quickstart.md
+++ b/content/docs/v2024.6.4/guides/singlestore/quickstart/quickstart.md
@@ -131,7 +131,7 @@ spec:
licenseSecret:
name: license-secret
storageType: Durable
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
serviceTemplates:
- alias: primary
spec:
@@ -152,7 +152,7 @@ Here,
- `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/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy)
+- `spec.deletionPolicy` 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.deletionPolicy` is set to `DoNotTerminate`. Learn details of all `DeletionPolicy` [here](/docs/v2024.6.4/guides/mysql/concepts/database/#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.
@@ -190,7 +190,7 @@ 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"}}
+ {"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","deletionPolicy":"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
@@ -219,7 +219,7 @@ spec:
port: 9999
type: LoadBalancer
storageType: Durable
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
topology:
aggregator:
podPlacementPolicy:
@@ -472,30 +472,30 @@ After giving the all information you can see like this below UI image.
  
-## Database TerminationPolicy
+## Database DeletionPolicy
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:
+When `deletionPolicy` 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.deletionPolicy` 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"
+The Singlestore "sdb-quickstart" is invalid: spec.deletionPolicy: Invalid value: "sdb-quickstart": Can not delete as deletionPolicy 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.
+Now, run `kubectl patch -n demo sdb sdb-quickstart -p '{"spec":{"deletionPolicy":"Halt"}}' --type="merge"` to set `spec.deletionPolicy` 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/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy).
+Learn details of all `DeletionPolicy` [here](/docs/v2024.6.4/guides/mysql/concepts/database/#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`.
+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 `deletionPolicy` to `Halt`.
-When the [TerminationPolicy](/docs/v2024.6.4/guides/mysql/concepts/database/#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.
+When the [DeletionPolicy](/docs/v2024.6.4/guides/mysql/concepts/database/#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 `deletionPolicy` 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,
+At first, run `kubectl patch -n demo sdb sdb-quickstart -p '{"spec":{"deletionPolicy":"Halt"}}' --type="merge"`. Then delete the singlestore object,
```bash
$ kubectl delete sdb sdb-quickstart -n demo
@@ -518,15 +518,15 @@ persistentvolumeclaim/data-sdb-quickstart-master-aggregator-0 Bound pvc-c4f
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`.
+>You can also set the `deletionPolicy` 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.
+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 `deletionPolicy` 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/v2024.6.4/guides/mysql/concepts/database/#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.
+When the [DeletionPolicy](/docs/v2024.6.4/guides/mysql/concepts/database/#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:
+Suppose, we have a database with `deletionPolicy` set to `Delete`. Now, are going to delete the database using the following command:
```bash
$ kubectl delete sdb sdb-quickstart -n demo
@@ -544,13 +544,13 @@ 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.
+>If you don't set the deletionPolicy then the kubeDB set the DeletionPolicy 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`.
+You can totally delete the `Singlestore` database and relevant resources without any tracking by setting `deletionPolicy` to `WipeOut`. KubeDB operator will delete all relevant resources of this `Singlestore` database (i.e, `PVCs`, `Secrets`, `Snapshots`) when the `deletionPolicy` 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:
+Suppose, we have a database with `deletionPolicy` set to `WipeOut`. Now, are going to delete the database using the following command:
```yaml
$ kubectl delete sdb sdb-quickstart -n demo
@@ -564,16 +564,16 @@ $ 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`.
+From the above output, you can see that all singlestore resources are deleted. There is no option to recreate/reinitialize your database if `deletionPolicy` 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.
+>Be careful when you set the `deletionPolicy` 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 patch -n demo singlestore/sdb-quickstart -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
kubectl delete -n demo singlestore/sdb-quickstart
kubectl delete ns demo
```
@@ -583,6 +583,6 @@ kubectl delete ns demo
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/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy).
+2. **Use `deletionPolicy: 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 deletion policy, please visit [here](/docs/v2024.6.4/guides/mysql/concepts/database/#specterminationpolicy).
## Next Steps
\ No newline at end of file
diff --git a/content/docs/v2024.6.4/guides/singlestore/quickstart/yamls/quickstart.yaml b/content/docs/v2024.6.4/guides/singlestore/quickstart/yamls/quickstart.yaml
index c6c91daec4..bdbd9de027 100644
--- a/content/docs/v2024.6.4/guides/singlestore/quickstart/yamls/quickstart.yaml
+++ b/content/docs/v2024.6.4/guides/singlestore/quickstart/yamls/quickstart.yaml
@@ -49,7 +49,7 @@ spec:
licenseSecret:
name: license-secret
storageType: Durable
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
serviceTemplates:
- alias: primary
spec:
diff --git a/content/docs/v2024.6.4/guides/solr/concepts/appbinding.md b/content/docs/v2024.6.4/guides/solr/concepts/appbinding.md
index 30b1d713fb..9da74e0545 100644
--- a/content/docs/v2024.6.4/guides/solr/concepts/appbinding.md
+++ b/content/docs/v2024.6.4/guides/solr/concepts/appbinding.md
@@ -45,7 +45,7 @@ kind: AppBinding
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"Solr","metadata":{"annotations":{},"name":"solr-dev","namespace":"dev"},"spec":{"monitor":{"agent":"prometheus.io/builtin"},"replicas":3,"solrModules":["s3-repository","gcs-repository","prometheus-exporter"],"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"linode-block-storage"},"terminationPolicy":"Delete","version":"9.4.1","zookeeperRef":{"name":"zoo-dev","namespace":"dev"}}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"Solr","metadata":{"annotations":{},"name":"solr-dev","namespace":"dev"},"spec":{"monitor":{"agent":"prometheus.io/builtin"},"replicas":3,"solrModules":["s3-repository","gcs-repository","prometheus-exporter"],"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"linode-block-storage"},"deletionPolicy":"Delete","version":"9.4.1","zookeeperRef":{"name":"zoo-dev","namespace":"dev"}}}
creationTimestamp: "2024-05-06T11:25:38Z"
generation: 1
labels:
diff --git a/content/docs/v2024.6.4/guides/solr/concepts/solr.md b/content/docs/v2024.6.4/guides/solr/concepts/solr.md
index 1c2da86ad5..58ec0e6374 100644
--- a/content/docs/v2024.6.4/guides/solr/concepts/solr.md
+++ b/content/docs/v2024.6.4/guides/solr/concepts/solr.md
@@ -66,7 +66,7 @@ spec:
- name: http
port: 8983
storageType: Durable
- terminationPolicy: Delete
+ deletionPolicy: Delete
topology:
coordinator:
replicas: 1
@@ -275,29 +275,29 @@ KubeDB allows following fields to set in `spec.serviceTemplates`:
See [here](https://github.com/kmodules/offshoot-api/blob/kubernetes-1.16.3/api/v1/types.go#L163) to understand these fields in detail.
-### spec.terminationPolicy
+### spec.deletionPolicy
-`terminationPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `Solr` crd or which resources KubeDB should keep or delete when you delete `Solr` crd. KubeDB provides following four termination policies:
+`deletionPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `Solr` crd or which resources KubeDB should keep or delete when you delete `Solr` crd. KubeDB provides following four deletion policies:
- DoNotTerminate
- Halt
- Delete (`Default`)
- WipeOut
-When `terminationPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the database as long as the `spec.terminationPolicy` is set to `DoNotTerminate`.
+When `deletionPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the database as long as the `spec.deletionPolicy` is set to `DoNotTerminate`.
-Following table show what KubeDB does when you delete Solr crd for different termination policies,
+Following table show what KubeDB does when you delete Solr crd for different deletion policies,
-| Behavior | DoNotTerminate | Halt | Delete | WipeOut |
-|------------------------------------| :------------: |:--------:| :------: | :------: |
-| 1. Block Delete operation | ✓ | ✗ | ✗ | ✗ |
-| 2. Delete Petset | ✗ | ✓ | ✓ | ✓ |
-| 3. Delete Services | ✗ | ✓ | ✓ | ✓ |
-| 4. Delete PVCs | ✗ | ✗ | ✓ | ✓ |
-| 5. Delete Secrets | ✗ | ✗ | ✗ | ✓ |
-| 6. Delete Snapshots | ✗ | ✗ | ✗ | ✓ |
+| Behavior | DoNotTerminate | Halt | Delete | WipeOut |
+|-------------------------------------|:--------------:|:--------:|:--------:|:--------:|
+| 1. Block Delete operation | ✓ | ✗ | ✗ | ✗ |
+| 2. Delete Petset | ✗ | ✓ | ✓ | ✓ |
+| 3. Delete Services | ✗ | ✓ | ✓ | ✓ |
+| 4. Delete PVCs | ✗ | ✗ | ✓ | ✓ |
+| 5. Delete Secrets | ✗ | ✗ | ✗ | ✓ |
+| 6. Delete Snapshots | ✗ | ✗ | ✗ | ✓ |
| 7. Delete Snapshot data from bucket | ✗ | ✗ | ✗ | ✓ |
-If you don't specify `spec.terminationPolicy` KubeDB uses `Delete` termination policy by default.
+If you don't specify `spec.deletionPolicy` KubeDB uses `Delete` deletion policy by default.
### spec.halted
Indicates that the database is halted and all offshoot Kubernetes resources except PVCs are deleted.
diff --git a/content/docs/v2024.6.4/guides/solr/quickstart/overview/index.md b/content/docs/v2024.6.4/guides/solr/quickstart/overview/index.md
index cb041609fc..bb9a05c6dc 100644
--- a/content/docs/v2024.6.4/guides/solr/quickstart/overview/index.md
+++ b/content/docs/v2024.6.4/guides/solr/quickstart/overview/index.md
@@ -100,7 +100,7 @@ metadata:
spec:
version: 3.8.3
replicas: 3
- terminationPolicy: Delete
+ deletionPolicy: Delete
adminServerPort: 8080
storage:
resources:
@@ -119,7 +119,7 @@ Here,
- `spec.replicas` - specifies the number of ZooKeeper nodes.
- `spec.storageType` - specifies the type of storage that will be used for ZooKeeper database. It can be `Durable` or `Ephemeral`. The default value of this field is `Durable`. If `Ephemeral` is used then KubeDB will create the ZooKeeper database using `EmptyDir` volume. In this case, you don't have to specify `spec.storage` field. This is useful for testing purposes.
- `spec.storage` specifies the StorageClass of PVC dynamically allocated to store data for this database. This storage spec will be passed to the Petsets created by the KubeDB operator to run database pods. You can specify any StorageClass available in your cluster with appropriate resource requests. If you don't specify `spec.storageType: Ephemeral`, then this field is required.
-- `spec.terminationPolicy` specifies what KubeDB should do when a user try to delete ZooKeeper CR. Termination policy `Delete` will delete the database pods, secret and PVC when the ZooKeeper CR is deleted. Checkout the [link](/docs/v2024.6.4/guides/zookeeper/concepts/zookeeper.md/#specterminationpolicy) for details.
+- `spec.deletionPolicy` specifies what KubeDB should do when a user try to delete ZooKeeper CR. Deletion policy `Delete` will delete the database pods, secret and PVC when the ZooKeeper CR is deleted. Checkout the [link](/docs/v2024.6.4/guides/zookeeper/concepts/zookeeper#specdeletionpolicy) for details.
> Note: `spec.storage` section is used to create PVC for database pod. It will create PVC with storage size specified in the `storage.resources.requests` field. Don't specify `limits` here. PVC does not get resized automatically.
@@ -150,7 +150,7 @@ metadata:
namespace: demo
spec:
version: 9.4.1
- terminationPolicy: Delete
+ deletionPolicy: Delete
replicas: 2
zookeeperRef:
name: zk-com
@@ -170,7 +170,7 @@ Here,
- `spec.replicas` - specifies the number of Solr nodes.
- `spec.storageType` - specifies the type of storage that will be used for Solr database. It can be `Durable` or `Ephemeral`. The default value of this field is `Durable`. If `Ephemeral` is used then KubeDB will create the Solr database using `EmptyDir` volume. In this case, you don't have to specify `spec.storage` field. This is useful for testing purposes.
- `spec.storage` specifies the StorageClass of PVC dynamically allocated to store data for this database. This storage spec will be passed to the Petset created by the KubeDB operator to run database pods. You can specify any StorageClass available in your cluster with appropriate resource requests. If you don't specify `spec.storageType: Ephemeral`, then this field is required.
-- `spec.terminationPolicy` specifies what KubeDB should do when a user try to delete Solr CR. Termination policy `Delete` will delete the database pods, secret and PVC when the Solr CR is deleted. Checkout the [link](/docs/v2024.6.4/guides/solr/concepts/solr.md/#specterminationpolicy) for details.
+- `spec.deletionPolicy` specifies what KubeDB should do when a user try to delete Solr CR. Deletion policy `Delete` will delete the database pods, secret and PVC when the Solr CR is deleted. Checkout the [link](/docs/v2024.6.4/guides/solr/concepts/solr#specdeletionpolicy) for details.
> Note: `spec.storage` section is used to create PVC for database pod. It will create PVC with storage size specified in the `storage.resources.requests` field. Don't specify `limits` here. PVC does not get resized automatically.
@@ -266,7 +266,7 @@ Spec:
Storage: 1Gi
Storage Class Name: standard
Storage Type: Durable
- Termination Policy: Delete
+ Deletion Policy: Delete
Version: 9.4.1
Zookeeper Digest Readonly Secret:
Name: solr-combined-zk-digest-readonly
@@ -453,12 +453,12 @@ From the health information above, we can see that health of our collections in
## Halt Solr
-KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` termination policy. If admission webhook is enabled, it prevents the user from deleting the database as long as the `spec.terminationPolicy` is set `DoNotTerminate`.
+KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` deletion policy. If admission webhook is enabled, it prevents the user from deleting the database as long as the `spec.deletionPolicy` is set `DoNotTerminate`.
-To halt the database, we have to set `spec.terminationPolicy:` to `Halt` by updating it,
+To halt the database, we have to set `spec.deletionPolicy:` to `Halt` by updating it,
```bash
-$ kubectl patch -n demo solr solr-combined -p '{"spec":{"terminationPolicy":"Halt"}}' --type="merge"
+$ kubectl patch -n demo solr solr-combined -p '{"spec":{"deletionPolicy":"Halt"}}' --type="merge"
solr.kubedb.com/solr-combined patched
```
@@ -488,7 +488,7 @@ persistentvolumeclaim/solr-combined-data-solr-combined-2 Bound pvc-dcb8c9e2
## Resume Solr
-Say, the Solr CR was deleted with `spec.terminationPolicy` to `Halt` and you want to re-create the Solr cluster using the existing auth secrets and the PVCs.
+Say, the Solr CR was deleted with `spec.deletionPolicy` to `Halt` and you want to re-create the Solr cluster using the existing auth secrets and the PVCs.
You can do it by simpily re-deploying the original Solr object:
@@ -502,7 +502,7 @@ solr.kubedb.com/solr-combined created
To cleanup the Kubernetes resources created by this tutorial, run:
```bash
-$ kubectl patch -n demo solr solr-combined -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n demo solr solr-combined -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
solr.kubedb.com/solr-combined patched
$ kubectl delete -n demo sl/solr-combined
@@ -517,4 +517,4 @@ namespace "demo" deleted
If you are just testing some basic functionalities, you might want to avoid additional hassles due to some safety features that are great for the 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 the database pod fails. So, we recommend to use `spec.storageType: Durable` and provide storage spec in `spec.storage` section. For testing purposes, 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 resume the database from the previous one. So, we preserve all your `PVCs` and auth `Secrets`. If you don't want to resume the database, you can just use `spec.terminationPolicy: WipeOut`. It will clean up every resouce that was created with the Solr CR. Checkout the [link](/docs/v2024.6.4/guides/solr/concepts/solr.md/#specterminationpolicy) for details.
+2. **Use `deletionPolicy: WipeOut`**. It is nice to be able to resume the database from the previous one. So, we preserve all your `PVCs` and auth `Secrets`. If you don't want to resume the database, you can just use `spec.deletionPolicy: WipeOut`. It will clean up every resouce that was created with the Solr CR. Checkout the [link](/docs/v2024.6.4/guides/solr/concepts/solr#specdeletionpolicy) for details.
diff --git a/content/docs/v2024.6.4/guides/solr/quickstart/overview/yamls/solr/solr.yaml b/content/docs/v2024.6.4/guides/solr/quickstart/overview/yamls/solr/solr.yaml
index 3b07dcb514..bbdd85ffec 100644
--- a/content/docs/v2024.6.4/guides/solr/quickstart/overview/yamls/solr/solr.yaml
+++ b/content/docs/v2024.6.4/guides/solr/quickstart/overview/yamls/solr/solr.yaml
@@ -5,7 +5,7 @@ metadata:
namespace: demo
spec:
version: 9.4.1
- terminationPolicy: Halt
+ deletionPolicy: Halt
replicas: 2
zookeeperRef:
name: zk-com
diff --git a/content/docs/v2024.6.4/guides/solr/quickstart/overview/yamls/zookeeper/zookeeper.yaml b/content/docs/v2024.6.4/guides/solr/quickstart/overview/yamls/zookeeper/zookeeper.yaml
index ba9551add2..1806606aca 100644
--- a/content/docs/v2024.6.4/guides/solr/quickstart/overview/yamls/zookeeper/zookeeper.yaml
+++ b/content/docs/v2024.6.4/guides/solr/quickstart/overview/yamls/zookeeper/zookeeper.yaml
@@ -7,7 +7,7 @@ spec:
version: 3.8.3
adminServerPort: 8080
replicas: 3
- terminationPolicy: Halt
+ deletionPolicy: Halt
storage:
resources:
requests:
diff --git a/content/docs/v2024.6.4/guides/zookeeper/concepts/appbinding.md b/content/docs/v2024.6.4/guides/zookeeper/concepts/appbinding.md
index ce6cb72342..da333570a4 100644
--- a/content/docs/v2024.6.4/guides/zookeeper/concepts/appbinding.md
+++ b/content/docs/v2024.6.4/guides/zookeeper/concepts/appbinding.md
@@ -45,7 +45,7 @@ kind: AppBinding
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"ZooKeeper","metadata":{"annotations":{},"name":"zk-cluster","namespace":"demo"},"spec":{"podTemplate":{"spec":{"containers":[{"name":"zookeeper","resources":{"requests":{"cpu":"720m","memory":"846Mi"}}}]}},"replicas":3,"serviceTemplates":[{"alias":"primary","spec":{"type":"LoadBalancer"}}],"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"terminationPolicy":"WipeOut","version":"3.9.1"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"ZooKeeper","metadata":{"annotations":{},"name":"zk-cluster","namespace":"demo"},"spec":{"podTemplate":{"spec":{"containers":[{"name":"zookeeper","resources":{"requests":{"cpu":"720m","memory":"846Mi"}}}]}},"replicas":3,"serviceTemplates":[{"alias":"primary","spec":{"type":"LoadBalancer"}}],"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"deletionPolicy":"WipeOut","version":"3.9.1"}}
creationTimestamp: "2024-05-02T10:02:45Z"
generation: 2
labels:
diff --git a/content/docs/v2024.6.4/guides/zookeeper/concepts/zookeeper.md b/content/docs/v2024.6.4/guides/zookeeper/concepts/zookeeper.md
index fa1392f775..0d95b62337 100644
--- a/content/docs/v2024.6.4/guides/zookeeper/concepts/zookeeper.md
+++ b/content/docs/v2024.6.4/guides/zookeeper/concepts/zookeeper.md
@@ -87,7 +87,7 @@ spec:
ports:
- name: http
port: 9200
- terminationPolicy: Halt
+ deletionPolicy: Halt
halted: false
healthChecker:
periodSeconds: 15
@@ -262,21 +262,21 @@ KubeDB allows following fields to set in `spec.serviceTemplates`:
See [here](https://github.com/kmodules/offshoot-api/blob/kubernetes-1.16.3/api/v1/types.go#L163) to understand these fields in detail.
-### spec.terminationPolicy
+### spec.deletionPolicy
-`terminationPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `ZooKeeper` crd or which resources KubeDB should keep or delete when you delete `ZooKeeper` crd. KubeDB provides following four termination policies:
+`deletionPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `ZooKeeper` crd or which resources KubeDB should keep or delete when you delete `ZooKeeper` crd. KubeDB provides following four deletion policies:
- DoNotTerminate
- Halt
- Delete (`Default`)
- WipeOut
-When `terminationPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the database as long as the `spec.terminationPolicy` is set to `DoNotTerminate`.
+When `deletionPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the database as long as the `spec.deletionPolicy` is set to `DoNotTerminate`.
-Following table show what KubeDB does when you delete ZooKeeper crd for different termination policies,
+Following table show what KubeDB does when you delete ZooKeeper crd for different deletion policies,
-| Behavior | DoNotTerminate | Halt | Delete | WipeOut |
-| ----------------------------------- | :------------: | :------: | :------: | :------: |
+| Behavior | DoNotTerminate | Halt | Delete | WipeOut |
+|-------------------------------------|:--------------:|:--------:|:--------:|:--------:|
| 1. Block Delete operation | ✓ | ✗ | ✗ | ✗ |
| 2. Delete StatefulSet | ✗ | ✓ | ✓ | ✓ |
| 3. Delete Services | ✗ | ✓ | ✓ | ✓ |
@@ -284,7 +284,7 @@ Following table show what KubeDB does when you delete ZooKeeper crd for differen
| 5. Delete Secrets | ✗ | ✗ | ✗ | ✓ |
| 6. Delete Snapshots | ✗ | ✗ | ✗ | ✓ |
| 7. Delete Snapshot data from bucket | ✗ | ✗ | ✗ | ✓ |
-If you don't specify `spec.terminationPolicy` KubeDB uses `Delete` termination policy by default.
+If you don't specify `spec.deletionPolicy` KubeDB uses `Delete` deletion policy by default.
### spec.halted
Indicates that the database is halted and all offshoot Kubernetes resources except PVCs are deleted.
diff --git a/content/docs/v2024.6.4/guides/zookeeper/quickstart/quickstart.md b/content/docs/v2024.6.4/guides/zookeeper/quickstart/quickstart.md
index 1e0d8a5aa6..9e16c80bf0 100644
--- a/content/docs/v2024.6.4/guides/zookeeper/quickstart/quickstart.md
+++ b/content/docs/v2024.6.4/guides/zookeeper/quickstart/quickstart.md
@@ -92,7 +92,7 @@ spec:
storageClassName: "standard"
accessModes:
- ReadWriteOnce
- terminationPolicy: "WipeOut"
+ deletionPolicy: "WipeOut"
```
```bash
@@ -104,7 +104,7 @@ Here,
- `spec.version` is name of the ZooKeeperVersion crd where the docker images are specified. In this tutorial, a ZooKeeper 3.9.1 database is created.
- `spec.storage` specifies PVC spec that will be 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 `ZooKeeper` crd or which resources KubeDB should keep or delete when you delete `ZooKeeper` crd. If admission webhook is enabled, It prevents users from deleting the database as long as the `spec.terminationPolicy` is set to `DoNotTerminate`.
+- `spec.deletionPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `ZooKeeper` crd or which resources KubeDB should keep or delete when you delete `ZooKeeper` crd. If admission webhook is enabled, It prevents users from deleting the database as long as the `spec.deletionPolicy` is set to `DoNotTerminate`.
> 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.
@@ -189,7 +189,7 @@ Spec:
Requests:
Storage: 1Gi
Storage Class Name: standard
- Termination Policy: WipeOut
+ Deletion Policy: WipeOut
Version: 3.9.1
Status:
Conditions:
@@ -262,7 +262,7 @@ kind: ZooKeeper
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
- {"apiVersion":"kubedb.com/v1alpha2","kind":"ZooKeeper","metadata":{"annotations":{},"name":"zk-quickstart","namespace":"demo"},"spec":{"replicas":3,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"terminationPolicy":"WipeOut","version":"3.9.1"}}
+ {"apiVersion":"kubedb.com/v1alpha2","kind":"ZooKeeper","metadata":{"annotations":{},"name":"zk-quickstart","namespace":"demo"},"spec":{"replicas":3,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"},"deletionPolicy":"WipeOut","version":"3.9.1"}}
creationTimestamp: "2024-05-02T08:25:26Z"
finalizers:
- kubedb.com
@@ -331,7 +331,7 @@ spec:
requests:
storage: 1Gi
storageClassName: standard
- terminationPolicy: WipeOut
+ deletionPolicy: WipeOut
version: 3.9.1
status:
conditions:
@@ -393,14 +393,14 @@ hello-messege
## DoNotTerminate Property
-When `terminationPolicy` is `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:
+When `deletionPolicy` is `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.deletionPolicy` is set to `DoNotTerminate`. You can see this below:
```bash
$ kubectl delete zk zk-quickstart -n demo
-Error from server (BadRequest): admission webhook "zookeeper.validators.kubedb.com" denied the request: zookeeper "zookeeper-quickstart" can't be deleted. To delete, change spec.terminationPolicy
+Error from server (BadRequest): admission webhook "zookeeper.validators.kubedb.com" denied the request: zookeeper "zookeeper-quickstart" can't be deleted. To delete, change spec.deletionPolicy
```
-Now, run `kubectl edit zk zookeeper-quickstart -n demo` to set `spec.terminationPolicy` to `Halt` . Then you will be able to delete/halt the database.
+Now, run `kubectl edit zk zookeeper-quickstart -n demo` to set `spec.deletionPolicy` to `Halt` . Then you will be able to delete/halt the database.
## Cleaning up
@@ -409,7 +409,7 @@ To clean up the Kubernetes resources created by this tutorial, run:
```bash
-$ kubectl patch -n demo zk/zk-quickstart -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
+$ kubectl patch -n demo zk/zk-quickstart -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
zookeeper.kubedb.com/zk-quickstart patched
$ kubectl delete -n demo zk/zk-quickstart
@@ -423,7 +423,7 @@ namespace "demo" deleted
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.
-**Use `terminationPolicy: WipeOut`**. It is nice to be able to resume database from previous one.So, we preserve all your `PVCs`, auth `Secrets`. If you don't want to resume database, you can just use `spec.terminationPolicy: WipeOut`. It will delete everything created by KubeDB for a particular ZooKeeper crd when you delete the crd.
+**Use `deletionPolicy: WipeOut`**. It is nice to be able to resume database from previous one.So, we preserve all your `PVCs`, auth `Secrets`. If you don't want to resume database, you can just use `spec.deletionPolicy: WipeOut`. It will delete everything created by KubeDB for a particular ZooKeeper crd when you delete the crd.
## Next Steps
diff --git a/content/docs/v2024.6.4/images/kafka/connectcluster/connectcluster-crd-lifecycle.png b/content/docs/v2024.6.4/images/kafka/connectcluster/connectcluster-crd-lifecycle.png
index d5223a6712c64cc2405d2f24470e0eac2bab757e..66c4ca3453ea6dd733a9f0617d6b1ec8f4fc9f16 100644
GIT binary patch
literal 79214
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