我尝试使用 Kubernetes 部署 MySQL,拥有三个访问相同存储(PVC)的副本。这是配置
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
type: local
spec:
persistentVolumeReclaimPolicy: Retain
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
type: NodePort
ports:
- protocol: TCP
port: 3307
targetPort: 3306
nodePort: 30091
selector:
app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 2
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:latest
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: pwd
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
当您应用此配置文件时kubectl apply -f file_name.yaml
,您可以创建三个 pod,它们访问数据库的同一存储。当您检查 pod 的状态时kubectl get pods
,您可以看到只有一个 pod 开始运行,其他 pod 处于运行CrashLoop
状态。发生的情况是,当创建多个实例使用公共存储时,只有一个实例可以获得文件的锁ibdata1
。这就是为什么只有一个 pod 变得健康,而其他 pod 则处于 CrashLoop 状态。(您可以使用 来查看这一点kubectl logs pod-name
)。我想要的是,
- 我可以释放文件的锁
ibdata
并使用所有 Pod 的存储吗?(这通常不能,因为一致性问题) - 如果没有,我该如何创建提议的想法?(使用多个 Pod 实例访问单个存储/卷)?
- 您是否会提出其他想法来实现使用多个 Pod 实例访问单个存储?
欢迎您的回答和帮助。