[英]How do i specify where persistent volume files are stored
我開始通過創建 LAMP 堆棧來學習 Kubernetes。 對於我的 MySQL 數據庫,我創建了一個持久卷和持久卷聲明,但現在我遇到了一個問題,我找不到存儲 PV 文件的位置。
這是我現在的配置:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
app: mysql
spec:
storageClassName: manual
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
hostPath:
path: "/lamp/pvstorage"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
labels:
app: mysql
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
然后在我的 MySQL 部署文件的末尾,我有這些行:
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc
我希望 Pod 的/var/lib/mysql
中的所有內容都將備份在主機的/lamp/pvstorage
目錄中,但這似乎沒有發生(但文件備份在我所看到的其他地方。數據庫是總是在刪除 mysql Pod 后重新創建)。
所以我的問題是我現在做錯了什么以及如何指定該位置?
TL;博士
要使用具有--driver=docker
hostPath
的minikube
實例中的 hostPath 訪問存儲在PVC
上的文件,您需要直接登錄到主機( minikube
),例如: $ minikube ssh
並直接訪問文件: ls /SOME_PATH
處理整個過程的Persistent Volumes
、 Storage Classes
和資源的主題相當廣泛,需要根據具體情況進行調查。
可以從官方文檔和使用的 Kubernetes 解決方案的文檔中獲得良好的基線知識來源:
大多數情況下,在使用minikube
時(請參閱--driver=none
的例外情況),某種容器化/虛擬化(圍繞minikube
的層)用於隔離環境並允許更輕松地創建和銷毀實例。 這使得所有資源都存儲在某個“盒子”( Virtualbox VM
、 Docker container
等)中。
如本例所示,由mysql
創建的文件存儲在運行minikube
的主機上,但存儲在minikube
實例本身中。 當您使用--driver=docker
創建minikube
時,您會創建一個Docker
容器,其中包含所有組件。 此外,通過使用具有以下部分的PVC
.spec
:
hostPath:
path: "/lamp/pvstorage"
hostPath
hostPath
卷將文件或目錄從主機節點的文件系統安裝到您的 Pod 中。
作為如何訪問文件的示例:
mysql
是否正在Running
state ( $ kubectl get pods
)$ minikube ssh
ls /mnt/data
(或在hostPath
中指定的內容)docker@minikube:~$ ls /mnt/data/
auto.cnf ib_logfile0 ib_logfile1 ibdata1 mysql performance_schema
其他資源:
如果存在將主機目錄安裝到minikube
實例的特定目錄的用例,您可以選擇:
$ minikube mount SOURCE:DESTINATION
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.