Я должен быть в состоянии смонтировать локальный каталог как постоянную папку данных тома для контейнера-докера MySQL, работающего под minikube / kubernetes.
У меня нет проблем с получением общего тома, на котором он работает с 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
deploy.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>