簡體   English   中英

Kubernetes 刪除后重新附加到相同的持久卷

[英]Kubernetes reattach to same persistent volume after delete

我有一個應用程序,其中兩個 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 

我想連接相同的卷。

我試過的:

  1. 如果我保持文件原樣,則該卷將被刪除,因此數據將丟失。
  2. 我可以從文件中刪除 pvc 聲明。 然后它工作。 我的問題是,在我使用 kustomize 的真實應用程序上,我在執行kustomize build app | kubectl delete -f - kustomize build app | kubectl delete -f -
  3. 嘗試在 pvc 中使用保留。 它在刪除時保留卷,但在應用時會創建一個新卷。
  4. 有狀態集,但是我看不到不同狀態集可以共享相同卷的方法。

有沒有辦法做到這一點? 或者我應該只做定期備份,並在重新創建集群時從備份中恢復卷數據?

有沒有辦法做到這一點? 或者我應該只做定期備份,並在重新創建集群時從備份中恢復卷數據?

集群刪除將使您的所有本地卷都被刪除。 您可以通過將數據存儲在集群外部來實現這一點。 Kubernetes擁有多種存儲提供商,可幫助您在各種存儲類型上部署數據。

您可能還想使用hostPath將數據保存在本地節點上,但這也不是一個好的解決方案,因為它需要您將 pod 固定到特定節點以避免數據丟失。 而且,如果您以所有VM都消失的方式刪除集群,那么這也將消失。

擁有一些網絡附加存儲將是 go 的正確方法。 其中一個很好的例子是持久性磁盤,您的實例可以訪問持久性網絡存儲設備。 它們獨立於您的虛擬機,並且在您刪除集群時不會被刪除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM