我如何指定持久卷文件的存储位置
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;DR
要在具有 --driver=docker
的 minikube
实例中访问存储在具有 hostPath
的 PVC
上的文件,您需要直接登录主机(minikube
) 例如:$ minikube ssh
并直接访问文件:ls /SOME_PATH
说明
Persistent Volumes
、Storage Classes
的主题和处理整个过程的资源非常广泛,需要根据具体情况进行调查。
可以从官方文档和所用 Kubernetes 解决方案的文档中获得良好的基线知识来源:
大多数情况下,当使用 minikube
(参见 --driver=none
的例外)时,某种 containerization/virtualization(包围 minikube
的层)用于隔离环境,还允许更容易地创建和销毁实例。这使得所有资源都存储在某个“盒子”中(Virtualbox VM
、Docker container
等)。
如本例所示,mysql
创建的文件存储在主机 运行 minikube
上,但在 minikube
实例本身中。当您使用 --driver=docker
创建 minikube
时,您会创建一个 Docker
容器,其中包含所有组件。此外,通过将 PVC
与 .spec
的以下部分一起使用:
hostPath:
path: "/lamp/pvstorage"
hostPath
A hostPath
volume mounts a file or directory from the host node's filesystem into your Pod.
-- Kubernetes.io: Docs: Concepts: Storage: Volumes: hostPath
例子
作为如何访问文件的示例:
- 按照指南进行操作:
- Kubernetes.io: Docs: Tasks: Run application: Run single instance stateful application
- 检查
mysql
是否处于Running
状态($ kubectl get pods
)
- 运行:
$ minikube ssh
ls /mnt/data
(或hostPath
中指定的内容)
docker@minikube:~$ ls /mnt/data/
auto.cnf ib_logfile0 ib_logfile1 ibdata1 mysql performance_schema
其他资源:
如果有将 host 目录安装到 minikube
实例到特定目录的用例,您可以选择:
$ minikube mount SOURCE:DESTINATION
我开始通过创建 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;DR
要在具有 --driver=docker
的 minikube
实例中访问存储在具有 hostPath
的 PVC
上的文件,您需要直接登录主机(minikube
) 例如:$ minikube ssh
并直接访问文件:ls /SOME_PATH
说明
Persistent Volumes
、Storage Classes
的主题和处理整个过程的资源非常广泛,需要根据具体情况进行调查。
可以从官方文档和所用 Kubernetes 解决方案的文档中获得良好的基线知识来源:
大多数情况下,当使用 minikube
(参见 --driver=none
的例外)时,某种 containerization/virtualization(包围 minikube
的层)用于隔离环境,还允许更容易地创建和销毁实例。这使得所有资源都存储在某个“盒子”中(Virtualbox VM
、Docker container
等)。
如本例所示,mysql
创建的文件存储在主机 运行 minikube
上,但在 minikube
实例本身中。当您使用 --driver=docker
创建 minikube
时,您会创建一个 Docker
容器,其中包含所有组件。此外,通过将 PVC
与 .spec
的以下部分一起使用:
hostPath:
path: "/lamp/pvstorage"
hostPath
A
hostPath
volume mounts a file or directory from the host node's filesystem into your Pod.-- Kubernetes.io: Docs: Concepts: Storage: Volumes: hostPath
例子
作为如何访问文件的示例:
- 按照指南进行操作:
- Kubernetes.io: Docs: Tasks: Run application: Run single instance stateful application
- 检查
mysql
是否处于Running
状态($ kubectl get pods
) - 运行:
$ minikube ssh
ls /mnt/data
(或hostPath
中指定的内容)
docker@minikube:~$ ls /mnt/data/
auto.cnf ib_logfile0 ib_logfile1 ibdata1 mysql performance_schema
其他资源:
如果有将 host 目录安装到 minikube
实例到特定目录的用例,您可以选择:
$ minikube mount SOURCE:DESTINATION