Docker

掛載持久卷時,Kubernetes pod 中的內容為空

  • January 11, 2022

持久卷聲明和持久卷 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

這是預期的行為:安裝持久卷時,它會覆蓋mountPath.

因此,您有兩種選擇:

  • 已經在您的主機上顯示了該目錄的內容
  • 掛載hostPath到容器中的另一個目錄,然後將內容複製到最終目標文件夾。(可以通過容器中的命令來實現)

您也可以掛載單個文件,有不同的選項hostPath types。請熟悉hostPath 類型

**筆記!**使用hostPathmount 只能用於在本地測試某些功能,在生產系統中這是非常不安全的方法:

警告:HostPath 卷存在許多安全風險,最好的做法是盡可能避免使用 HostPath。當必須使用 HostPath 卷時,它的範圍應僅限於所需的文件或目錄,並以 ReadOnly 方式掛載

卷 - hostPath

引用自:https://serverfault.com/questions/1089287