Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions docs/en/preview/kubeblocks-for-postgresql/09-faqs.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
---
title: FAQs
description: FAQs of PostgreSQL
keywords: [KubeBlocks, PostgreSQL, Kubernetes Operator]
sidebar_position: 9
sidebar_label: FAQs
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

# PostgreSQL FAQs

## 1. Use ETCD as Patroni DCS

KubeBlocks PostgreSQL uses the Kubernetes API itself as DCS (Distributed Config Store) by default.
But when the control plane is under extreme high load, it may lead to unexpected demotion of the primary replica. And it's recommended to use ETCD as DCS in such extreme cases.

```yaml
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: pg-cluster-etcd
namespace: demo
spec:
terminationPolicy: Delete
clusterDef: postgresql
topology: replication
componentSpecs:
- name: postgresql
serviceVersion: "16.4.0"
env:
- name: DCS_ENABLE_KUBERNETES_API # unset this env if you use zookeeper or etcd, default to empty
- name: ETCD3_HOST
value: 'etcd-cluster-etcd-headless.demo.svc.cluster.local:2379' # where is your etcd?
# - name: ZOOKEEPER_HOSTS
# value: 'myzk-zookeeper-0.myzk-zookeeper-headless.demo.svc.cluster.local:2181' # where is your zookeeper?
replicas: 2
resources:
limits:
cpu: "0.5"
memory: "0.5Gi"
requests:
cpu: "0.5"
memory: "0.5Gi"
volumeClaimTemplates:
- name: data
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
```

The key fields are:
- `DCS_ENABLE_KUBERNETES_API`: Unset this env to use ETCD or ZooKeeper as DCS
- `ETCD3_HOST`: The host of ETCD cluster

You can also use ZooKeeper as DCS by unsetting `DCS_ENABLE_KUBERNETES_API` and setting `ZOOKEEPER_HOSTS` to the host of ZooKeeper cluster.

KubeBlocks has ETCD and ZooKeeper Addons in the `kubeblocks-addons` repository. You can refer to the following links for more details.
- https://github.com/apecloud/kubeblocks-addons/tree/main/examples/etcd
- https://github.com/apecloud/kubeblocks-addons/tree/main/examples/zookeeper

You can shell into one of the etcd container to view the etcd data, and view the etcd data with etcdctl.

```bash
etcdctl get /service --prefix
```
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Apply this YAML configuration:
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: pg-restore-pitr
name: redis-restore-pitr
namespace: demo
annotations:
# NOTE: replace <CONTINUOUS_BACKUP_NAME> with the continuouse backup name
Expand All @@ -99,16 +99,34 @@ spec:
topology: replication
componentSpecs:
- name: redis
serviceVersion: "14.7.2"
disableExporter: true
replicas: 1
serviceVersion: "7.2.4"
disableExporter: false
replicas: 2
resources:
limits:
cpu: "0.5"
memory: "0.5Gi"
cpu: '0.5'
memory: 0.5Gi
requests:
cpu: "0.5"
memory: "0.5Gi"
cpu: '0.5'
memory: 0.5Gi
volumeClaimTemplates:
- name: data
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
- name: redis-sentinel
replicas: 3
resources:
limits:
cpu: '0.5'
memory: 0.5Gi
requests:
cpu: '0.5'
memory: 0.5Gi
volumeClaimTemplates:
- name: data
spec:
Expand Down Expand Up @@ -142,7 +160,7 @@ metadata:
name: redis-replication-restore
namespace: demo
spec:
clusterName: redis-replication-restore
clusterName: redis-restore-pitr
force: false
restore:
backupName: <CONTINUOUS_BACKUP_NAME>
Expand All @@ -167,7 +185,7 @@ To remove all created resources, delete the Redis cluster along with its namespa

```bash
kubectl delete cluster redis-replication -n demo
kubectl delete cluster redis-replication-restore -n demo
kubectl delete cluster redis-restore-pitr -n demo
kubectl delete ns demo
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Apply this YAML configuration:
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: pg-restore-pitr
name: redis-restore-pitr
namespace: demo
annotations:
# NOTE: replace <CONTINUOUS_BACKUP_NAME> with the continuouse backup name
Expand All @@ -99,19 +99,34 @@ spec:
topology: replication
componentSpecs:
- name: redis
serviceVersion: "14.7.2"
disableExporter: true
labels:
# NOTE: update the label accordingly
apps.kubeblocks.postgres.patroni/scope: pg-restore-pitr-redis
replicas: 1
serviceVersion: "7.2.4"
disableExporter: false
replicas: 2
resources:
limits:
cpu: "0.5"
memory: "0.5Gi"
cpu: '0.5'
memory: 0.5Gi
requests:
cpu: "0.5"
memory: "0.5Gi"
cpu: '0.5'
memory: 0.5Gi
volumeClaimTemplates:
- name: data
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
- name: redis-sentinel
replicas: 3
resources:
limits:
cpu: '0.5'
memory: 0.5Gi
requests:
cpu: '0.5'
memory: 0.5Gi
volumeClaimTemplates:
- name: data
spec:
Expand Down Expand Up @@ -145,7 +160,7 @@ metadata:
name: redis-replication-restore
namespace: demo
spec:
clusterName: redis-replication-restore
clusterName: rredis-restore-pitr
force: false
restore:
backupName: <CONTINUOUS_BACKUP_NAME>
Expand All @@ -170,7 +185,7 @@ To remove all created resources, delete the Redis cluster along with its namespa

```bash
kubectl delete cluster redis-replication -n demo
kubectl delete cluster redis-replication-restore -n demo
kubectl delete cluster redis-restore-pitr -n demo
kubectl delete ns demo
```

Expand Down