Я развертываю приложение с отслеживанием состояния в K8S.
Перед этим я пытаюсь реализовать пример.
Перед развертыванием my-sql в моем кластере я создал pv и pvc.
kind: PersistentVolume
apiVersion: v1
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
На данный момент я не редактировал и не создавал никаких новых StorageClass
.
Затем я перехожу к развертыванию приложения, используя volumeMount
в моем развертывании.
.
.
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
Я успешно запускаю приложение и снимаю его (сначала модуль и развертывание), возвращаю приложение и замечаю, что данные моего приложения сохраняются в /var/lib/mysql
.
Позже я заметил, что /mnt/data
НЕ существует на моей главной машине. Я работаю в миникубе.
Я заглянул в класс хранилища, и, похоже, он использует:
StorageClass: manual
Но если я проверю все свои классы хранения, я увижу только этот:
# kubectl describe storageclass
Name: standard
IsDefaultClass: Yes
Annotations: kubectl.kubernetes.io/last-applied-configuration = {"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"storageclass.beta.kubernetes.io/is-default-class":"true"},"labels":{"addonmanager.kubernetes.io/mode":"Reconcile"},"name":"standard","namespace":""},"provisioner":"k8s.io/minikube-hostpath"}
,storageclass.beta.kubernetes.io/is-default-class=true
Provisioner: k8s.io/minikube-hostpath
Parameters: <none>
AllowVolumeExpansion: <unset>
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: Immediate
Events: <none>
Но того, что использует my-sql, нет.
Мне нужна помощь в понимании этого, пожалуйста. Где PV /mnt/data
?
На моем хост-компьютере результат поиска /mnt/data
следующий:
# cd /mnt/data
cd: no such file or directory: /mnt/data
Minikube - это универсальное решение на основе виртуальной машины (ВМ). Итак, у вас есть один узел, на котором живет вся плоскость управления, а также это ваш единственный рабочий узел:
$ kubectl get node
NAME STATUS ROLES AGE VERSION
minikube Ready master 1d v1.10.0
Теперь это один узел, виртуальная машина, на которой размещен ваш кластер Kubernetes. Таким образом, все действия, связанные с хостом, должны выполняться на указанной виртуальной машине:
$ minikube ssh
_ _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
$ ls -al /mnt
total 4
drwxr-xr-x 3 root root 60 Sep 8 12:38 .
drwxr-xr-x 17 root root 460 Sep 8 12:38 ..
drwxr-xr-x 7 root root 4096 Sep 8 12:38 vda1
И вот у вас есть ваша директория /mnt
.