【发布时间】:2019-01-28 16:14:43
【问题描述】:
我应该能够将本地目录挂载为在 minikube/kubernetes 下运行的 mysql docker 容器的持久卷数据文件夹。
直接用 Docker 运行共享卷我没有任何问题,但是在 kubernetes 下运行它,我不能
osx 10.13.6
Docker Desktop Community version 2.0.0.2 (30215)
Channel: stable
0b030e17ca
Engine 18.09.1
Compose: 1.23.2
Machine 0.16.1
Kubernetes v1.10.11
minikube version: v0.33.1
重现行为的步骤
install docker-for-mac and enable kubernetes
在mac上创建一个目录作为持久卷存储共享,例如
sudo mkdir -m 777 -p /Users/foo/mysql
deployment.yml
# For use on docker for mac
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: localstorage
provisioner: docker.io/hostpath
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: mysql
name: mysql-pvc
spec:
storageClassName: localstorage
accessModes:
- ReadWriteOnce
- ReadOnlyMany
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
type: local
spec:
storageClassName: localstorage
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
- ReadOnlyMany
hostPath:
# this is the path on laptop?
path: "/Users/foo/mysql"
---
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
type: NodePort
selector:
app: mysql-service
ports:
- port: 3306
targetPort: 3306
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-server
labels:
app: mysql-server
spec:
selector:
matchLabels:
app: mysql-server
template:
metadata:
labels:
app: mysql-server
spec:
containers:
- name: mysql-server
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: ""
- name: MYSQL_ALLOW_EMPTY_PASSWORD
value: "yes"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-pvc
# this is the path on the pod container?
mountPath: "/mnt/data"
volumes:
- name: mysql-pvc
persistentVolumeClaim:
claimName: mysql-pvc
我可以启动pod,通过mysql客户端连接,创建数据库,但是当pod关闭时,数据没有持久化,挂载的数据文件夹也没有写入任何东西
kubectl create -f deployment.yml
kubectl port-forward mysql-server-6b64c4545f-kp7h9 3306:3306
mysql -h 127.0.0.1 -P 3306 -u root
mysql> create database foo;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| foo |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
....
删除部署:
kubectl delete sc "localstorage"
kubectl delete persistentvolume "mysql-pv"
kubectl delete persistentvolumeclaim "mysql-pvc"
kubectl delete service "mysql-service"
kubectl delete deployment.apps "mysql-server"
kubectl delete events --all
如上重新创建并再次连接
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql>
【问题讨论】:
-
您是否创建了持久卷?
-
@MauroBaraldi 。请参考上面的部分:在mac上创建一个目录作为持久卷存储和deployment.yml共享。如果您觉得缺少其他步骤,请告诉我。
标签: mysql docker kubernetes docker-for-mac persistent-volumes