mysql - 如何指定持久卷文件的存储位置
问题描述
我开始通过创建 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;博士
PVC
要在具有 ahostPath
的minikube
实例中访问存储在 a 上的文件,--driver=docker
您需要直接登录到主机 ( minikube
),例如:$ minikube ssh
并直接访问文件:ls /SOME_PATH
解释
处理整个过程的主题Persistent Volumes
和Storage Classes
资源相当广泛,需要逐案调查。
可以从官方文档和所使用的 Kubernetes 解决方案的文档中获得良好的基线知识来源:
大多数情况下,在使用某种容器化/虚拟化(层环绕)时minikube
(见例外) ,用于隔离环境并允许更轻松地创建和销毁实例。这使得所有资源都存储在某个“盒子”(等)内。--driver=none
minikube
Virtualbox VM
Docker container
在本例中,由 所创建的文件mysql
存储在正在运行的主机上,minikube
但存储在minikube
实例本身中。当您创建minikube
时,--driver=docker
您会创建一个Docker
包含所有组件的容器。此外,通过将 aPVC
与 的以下部分一起使用.spec
:
hostPath:
path: "/lamp/pvstorage"
hostPath
卷
hostPath
将文件或目录从主机节点的文件系统安装到您的 Pod 中。
例子
作为如何访问文件的示例:
- 请遵循以下指南:
- Kubernetes.io:文档:任务:运行应用程序:运行单实例有状态应用程序
- 检查是否
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
其他资源:
如果存在将主机目录安装到minikube
实例的特定目录的用例,您可以选择:
$ minikube mount SOURCE:DESTINATION