Как создать службу mysql kubernetes с локально установленным томом данных?
Я должен быть в состоянии смонтировать локальный каталог в качестве папки данных постоянного тома для контейнера Docker 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
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
Я могу запустить модуль, подключиться через клиент MySQL, создать базу данных, но при отключении модуля данные не сохраняются, и в папку подключенных данных ничего не записывается.
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>
1 ответ
Вы должны создать постоянный том, определив класс хранилища как локальный, а затем сопоставить его с локальным путем.
Создание класса хранения
хранение class.yml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
Тогда беги kubectl create -f storage-class.yml
Создание постоянной стоимости
ру-local.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- cka
Создать постоянный том работает kubectl create -f pv-sdc.yml
Последнее, создать постоянную заявку на объем
pvc1.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc1
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-storage
resources:
requests:
storage: 10Gi
Создание постоянного тома работает kubectl create -f pvc1.yml
Для просмотра постоянных значений выполните kubectl get pv
, Вы должны увидеть некоторые результаты, такие как
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
local-pv 10Gi RWO Retain Available local-storage 10s
Постоянный том будет доступен, как только узел его использует.
Этот пост может помочь вам немного больше.