【发布时间】:2021-07-05 15:13:18
【问题描述】:
我需要什么? 具有 2 个从同一卷 (PV) 读取的 POD 的部署。卷必须在 RW 模式的 PODS 之间共享。
注意:我已经有一个定义了 storageClass“rook-cephfs”的 rook ceph,它允许这个功能。该 SC 也有保留政策
这就是我所做的:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-nginx
spec:
accessModes:
- "ReadWriteMany"
resources:
requests:
storage: "10Gi"
storageClassName: "rook-cephfs"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
serviceAccountName: default
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: Always
ports:
- name: http
containerPort: 80
volumeMounts:
- name: pvc-data
mountPath: /data
volumes:
- name: pvc-data
persistentVolumeClaim:
claimName: data-nginx
有效!两个 nginx 容器共享卷。
问题: 如果删除所有资源(PV 除外)并重新创建它们,则会创建一个新 PV 而不是重用旧 PV。所以基本上,新卷是空的。
旧 PV 的状态为“已发布”而不是“可用”
我意识到,如果将 patch 应用到 PV 以删除 claimRef.uid :
kubectl patch pv $PV_NAME --type json -p '[{"op": "remove", "path": "/spec/claimRef/uid"}]'
然后重新部署它就可以了。 但我不想做这个手动步骤。我需要这个自动化。
我也用 statefulSet 尝试了相同的配置并遇到了同样的问题。
有什么办法吗?
【问题讨论】:
-
不,没有人提供自动化解决方案,这正是我所需要的。我找到了一种使用 Helm Hooks 来应用补丁的方法......但我正在寻找一个更简单的解决方案。
标签: kubernetes persistent-volumes persistent-volume-claims