Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes在删除后重新附加到相同的持久卷_Kubernetes - Fatal编程技术网

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

Kubernetes在删除后重新附加到相同的持久卷,kubernetes,Kubernetes,我有一个应用程序,两个豆荚需要访问同一个卷。我希望能够删除群集,然后在应用后能够访问卷上的数据 例如: apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: retaining provisioner: csi.hetzner.cloud reclaimPolicy: Retain volumeBindingMode: WaitForFirstConsumer --- kind: PersistentVolum

我有一个应用程序,两个豆荚需要访问同一个卷。我希望能够删除群集,然后在应用后能够访问卷上的数据

例如:

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构建应用程序时,我看不到排除资源的方法| kubectl delete-f-
  • 尝试在pvc中使用保留剂。它在删除时保留卷,但在应用时会创建一个新卷
  • Statefulset,但是我不认为不同的Statefulset可以共享同一个卷
  • 有没有办法做到这一点?
    或者,我应该只执行常规备份,并在重新创建群集时从备份中恢复卷数据吗?

    有没有办法实现这一点?或者,我应该定期备份,并在重新创建群集时从备份中恢复卷数据吗?

    群集删除将删除所有本地卷。您可以通过将数据存储在集群之外来实现这一点
    Kubernetes
    拥有多种存储提供程序,可帮助您在各种存储类型上部署数据

    您可能还想使用
    hostPath
    将数据本地保存在节点上,但这也不是一个好的解决方案,因为它需要您将pod固定到特定节点以避免数据丢失。如果您删除集群的方式使所有
    VM
    都消失了,那么这也将消失


    拥有一些网络连接存储将是正确的方法。非常好的例子是您的实例可以访问哪些持久的网络存储设备。它们独立于您的虚拟机定位,并且在您删除群集时会被删除。

    是的,如果您想在重新创建群集后仍保留卷,则数据必须位于群集外部。