挂载持久卷后,Kubernetes pod 中的内容将变空

挂载持久卷后,Kubernetes pod 中的内容将变空

持久卷声明和持久卷 yaml 文件

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/datatypo"


---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-claim
spec:
  storageClassName: manual
  volumeName: my-volume
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

部署 yaml 文件

apiVersion: v1
kind: Service
metadata:
  name: typo3
  labels:
    app: typo3
spec:
  type: NodePort
  ports:
    - nodePort: 31021
      port: 80
      targetPort: 80
  selector:
    app: typo3
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: typo3
spec:
  selector:
    matchLabels:
      app: typo3
  replicas: 1
  template:
    metadata:
      labels:
        app: typo3
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: app
                operator: In
                values:
                - typo3
      containers:
      - image: image:typo3
        name: typo3
        imagePullPolicy: Never
        ports:
        - containerPort: 80
        volumeMounts:
         - name: my-volume
           mountPath: /var/www/html/
      volumes:
           - name: my-volume
             persistentVolumeClaim:
                 claimName: my-claim

注意:如果未添加持久卷,则内容会显示在 pod 内部(在 中var/www/html)。但添加持久卷后,不会显示同一文件夹和外部挂载路径内的任何内容/mnt/datatypo

答案1

这是预期的行为:当安装持久卷时,它会覆盖在中指定的文件夹的内容mountPath

因此您有两个选择:

  • 您的主机上已经存在该目录的内容
  • 挂载hostPath到容器中的另一个目录,然后将内容复制到最终目标文件夹。(可以通过以下方式实现容器中的命令

您也可以挂载单个文件,有不同的选项hostPath types。请熟悉hostPath 类型

笔记!使用hostPathmount 只能用于本地测试某些功能,在生产系统中这是一种非常不安全的方法:

警告:HostPath 卷存在许多安全风险,最佳做法是尽可能避免使用 HostPath。当必须使用 HostPath 卷时,应将其范围限定为所需的文件或目录,并以 ReadOnly 形式挂载

卷 - hostPath

相关内容