在Kubernetes上部署PostgreSQL并不是新鲜事,可以通过各种Operators(包括Percona)轻松实现。在Percona Operator for PostgreSQL中,你可以选择多种存储配置方式。在这篇博客中,我们将回顾各种存储策略——从基础到更复杂的用例。
https://docs.percona.com/percona-operator-for-postgresql/2.0/index.html
01 基础知识
1.1 设置StorageClass
https://kubernetes.io/docs/concepts/storage/storage-classes/
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
premium-rwo pd.csi.storage.gke.io Delete WaitForFirstConsumer true 54m
regionalpd-storageclass pd.csi.storage.gke.io Delete WaitForFirstConsumer false 51m
standard kubernetes.io/gce-pd Delete Immediate true 54m
standard-rwo (default) pd.csi.storage.gke.io Delete WaitForFirstConsumer true 54mdataVolumeClaimSpec:
accessModes:
- ReadWriteOnce
storageClassName: STORAGE_CLASS_NAME
resources:
requests:
storage: 1Gi
1.2 为预写日志(WAL)分配单独的卷
walVolumeClaimSpec:
accessModes:
- ReadWriteOnce
storageClassName: STORAGE_CLASS_NAME
resources:
requests:
storage: 1Gi
cluster1-instance1-8b2m-pgdata Bound pvc-2f919a49-d672-49cb-89bd-f86469241381 1Gi RWO standard-rwo 36s
cluster1-instance1-8b2m-pgwal Bound pvc-bf2c26d8-cf42-44cd-a053-ccb6abadd096 1Gi RWO standard-rwo 36s
cluster1-instance1-ncfq-pgdata Bound pvc-7ab7e59f-017a-4655-b617-ff17907ace3f 1Gi RWO standard-rwo 36s
cluster1-instance1-ncfq-pgwal Bound pvc-51baffcf-0edc-472f-9c95-7a0cea3e6507 1Gi RWO standard-rwo 36s
cluster1-instance1-w4d8-pgdata Bound pvc-c60282ed-3599-4033-afc7-e967871efa1b 1Gi RWO standard-rwo 36s
cluster1-instance1-w4d8-pgwal Bound pvc-ef530cb4-82fb-4661-ac76-ee7fda1f89ce 1Gi RWO standard-rwo 36s1.3 更改存储大小
VolumeExpansion:
https://kubernetes.io/blog/2018/08/02/dynamically-expand-volume-with-csi-and-kubernetes/
1.4 更改存储
spec:
instances:
- name: newGroup
dataVolumeClaimSpec:
accessModes:
- ReadWriteOnce
storageClassName: NEW_STORAGE_CLASS
resources:
requests:
storage: 2Gi
#3780:
02 数据持久化
2.1 Finalizers
apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: cluster1
finalizers:
- percona.com/delete-pvc
- percona.com/delete-ssl
2.2 StorageClass数据保护
apiVersion: storage.k8s.io/v1
kind: StorageClass
...
provisioner: pd.csi.storage.gke.io
- reclaimPolicy: Delete
+ reclaimPolicy: Retain
2.3 区域磁盘
图1
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-balanced
replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: topology.gke.io/zone
values:
- us-central1-a
- us-central1-b
03 本地存储
OpenEBS:
Portworx:
04 结论
原文链接:https://www.percona.com/blog/storage-strategies-for-postgresql-on-kubernetes/




