Kubernetes InnoDBCluster:所有 Pod 都应该共享一个 PersistentVolumeClaim?
下列的:https://dev.mysql.com/doc/mysql-operator/en/mysql-operator-innodbcluster-simple-kubectl.html
kubectl create namespace mysql-cluster-test
kubectl create secret generic mypwds \
--from-literal=rootUser=root \
--from-literal=rootHost=% \
--from-literal=rootPassword=123456 -n mysql-cluster-test
kubectl apply -f mycluster.yaml -n mysql-cluster-test
Kubectl 获取 pods -n mysql-cluster-test
NAME READY STATUS RESTARTS AGE
mycluster-0 2/2 Running 0 12m
mycluster-1 2/2 Running 0 12m
mycluster-2 2/2 Running 0 12m
mycluster-router-5d87fbd754-zhsrh 1/1 Running 0 10m
kubectl 获取 pvc -n mysql-cluster-test
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
datadir-mycluster-0 Bound pvc-b3bf5f24-99d0-4497-bd34-fd91eb4adc6c 2Gi RWO hostpath 8m9s
datadir-mycluster-1 Bound pvc-1c042c50-bc3f-43f8-8e16-094042495e6d 2Gi RWO hostpath 8m9s
datadir-mycluster-2 Bound pvc-85fbf9f9-d975-4899-a292-d247644cb2d2 2Gi RWO hostpath 8m9s
有3个mysql POD,每个都有自己的PVC,绑定不同的Volume,mysql数据需要存放在一个volume里,所有POD是否应该共用一个PVC?
答案1
有3个mysql POD,每个都有自己的PVC,绑定不同的Volume,mysql数据需要存放在一个volume里,所有POD是否应该共用一个PVC?
MySQL(和其他 SQL 数据库)并非为使用共享存储而构建的。如果您需要多个实例,则每个实例都需要自己的专用存储。在集群配置中,每个实例都使用某种形式的复制来使其本地副本与集群的其他成员保持同步。
这通常是你想要的——即使你可以使用单个共享 PV,丢失 PV 意味着您将丢失所有数据。通过使用复制,集群中的另一个实例可以接管主角色(或者,如果您有多个读/写副本,则可以继续提供访问)。
你可以使用单个卷,然后为每个实例使用单独的目录,但如前所述,这会使您的存储成为单点故障(也是单点 i/o 争用)。
当 Pod 被删除时,本地存储也会被删除吗?
如果您使用临时存储作为数据库,那么可以。如果您将数据库存储在(非-shared) PV,则不行。使用 PV 进行存储通常是最好的计划;如果 Pod 重新启动(例如升级版本时),则可以最大限度地减少重新同步副本所需传输的数据量。