StatefulSet / Deployment 重新启动后,持久卷内容会被删除

问题描述 投票:0回答:1

当 StatefulSet 或 Deployment 重新启动并且创建新 Pod 时,我的持久卷中的内容将被删除。

我认为拥有持久卷的想法是让它的内容持久化。所以我想知道我的配置是否有问题。

我有以下 PVC:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: sftp-pvc
  labels:
    app: sftp
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

PV 本身是自动创建和管理的。上面由 PVC 创建的示例如下:

然后是以下 StatefulSet:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: sftp-deployment
spec:
  serviceName: sftp-statfulset
  replicas: 2
  selector:
    matchLabels:
      app: sftp
  template:
    metadata:
      labels:
        app: sftp
    spec:
      volumes:
      - name: sftp-storage
        persistentVolumeClaim:
          claimName: sftp-pvc
      containers:
      - name: sftp
        image: atmoz/sftp
        ports:
        - containerPort: 22
        env:
        - name: SFTP_USERS
          value: "$(SFTP_USERNAME):$(SFTP_PASSWORD):::$(SFTP_ROOT_DIRECTORY)"
        volumeMounts:
        - name: ftm-sftp-storage
          mountPath: "/home/$(SFTP_USERNAME)/$(SFTP_ROOT_DIRECTORY)"
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"

资源是 StatefulSet 还是 Deployment 并不重要。

以上就是在K8s上创建并部署的一台SFTP服务器。例如,如果我使用 FileZilla 连接到它,我可以创建文件或文件夹,并且如果我注销并登录,它们将被保留。

但是一旦 StatefulSet 重新启动并创建新的 Pod,我就会丢失所有文件。

如何确保持久卷的内容无论在什么情况下都保持持久?

kubernetes persistence persistent-volumes persistent-storage
1个回答
0
投票

事实证明,我发现

mountPath
值不应该通过使用环境变量组合在一起。所以我设置了一个固定值并且它起作用了:

volumeMounts:
- name: sftp-storage
  mountPath: "/home/user1/user-directory"
© www.soinside.com 2019 - 2024. All rights reserved.