【发布时间】:2021-04-15 16:06:06
【问题描述】:
我有一个应用程序,其中两个 pod 需要访问同一个卷。我希望能够删除集群,然后在应用后能够访问卷上的数据。
例如:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: retaining
provisioner: csi.hetzner.cloud
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: media
spec:
#storageClassName: retaining
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-php
labels:
app: myapp-php
k8s-app: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp-php
template:
metadata:
labels:
app: myapp-php
k8s-app: myapp
spec:
containers:
- image: nginx:1.17
imagePullPolicy: IfNotPresent
name: myapp-php
ports:
- containerPort: 9000
protocol: TCP
resources:
limits:
cpu: 750m
memory: 3Gi
requests:
cpu: 750m
memory: 3Gi
volumeMounts:
- name: media
mountPath: /var/www/html/media
volumes:
- name: media
persistentVolumeClaim:
claimName: media
nodeSelector:
mytype: main
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-web
labels:
app: myapp-web
k8s-app: myapp
spec:
selector:
matchLabels:
app: myapp-web
template:
metadata:
labels:
app: myapp-web
k8s-app: myapp
spec:
containers:
- image: nginx:1.17
imagePullPolicy: IfNotPresent
name: myapp-web
ports:
- containerPort: 9000
protocol: TCP
resources:
limits:
cpu: 10m
memory: 128Mi
requests:
cpu: 10m
memory: 128Mi
volumeMounts:
- name: media
mountPath: /var/www/html/media
volumes:
- name: media
persistentVolumeClaim:
claimName: media
nodeSelector:
mytype: main
如果我这样做:
k apply -f pv-issue.yaml
k delete -f pv-issue.yaml
k apply-f pv-issue.yaml
我想连接同一个卷。
我尝试过的:
- 如果我保持文件原样,卷将被删除,因此数据将丢失。
- 我可以从文件中删除 pvc 声明。然后它工作。我的问题是,在我使用 kustomize 的真实应用程序上,我在执行
kustomize build app | kubectl delete -f -时看不到排除资源的方法 - 尝试在 pvc 中使用保留。它会在删除时保留卷,但在应用时会创建一个新卷。
- Statefulset,但是我看不到不同的 statefulset 可以共享相同卷的方法。
有没有办法做到这一点? 还是我应该只做定期备份,并在重建集群时从备份中恢复卷数据?
【问题讨论】:
-
是的,如果你想在重新创建集群后保留卷,那么数据必须位于集群之外。
标签: kubernetes