在 MiniKube K8S 中部署 PV
Deploying PV in MiniKube K8S
我正在 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
我成功启动了应用程序,然后将其关闭(首先是 pod 和部署)并恢复了应用程序,并注意到我的应用程序数据在 /var/lib/mysql
下仍然存在
我后来注意到 /mnt/data
在我的主机上不存在。我在 minikube 工作。
我查看了存储 class,它似乎正在使用 :
StorageClass: manual
但是如果我检查我所有的存储 classes,我只看到这个 :
# 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>
但是我的-sql正在使用的那个不在那里。
请帮助我理解这一点。 PV /mnt/data
在哪里?
在我的主机上查找 /mnt/data
的结果是:
# cd /mnt/data
cd: no such file or directory: /mnt/data
Minikube 是一种基于虚拟机 (VM) 的一体化解决方案。所以你有一个节点,整个控制平面都在这个节点上,这也是你唯一的工作节点:
$ kubectl get node
NAME STATUS ROLES AGE VERSION
minikube Ready master 1d v1.10.0
现在,它是一个节点,一个 VM,托管您的 Kubernetes 集群。所以所有与主机相关的操作都必须在所述 VM 上完成:
$ 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
目录。
我正在 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
我成功启动了应用程序,然后将其关闭(首先是 pod 和部署)并恢复了应用程序,并注意到我的应用程序数据在 /var/lib/mysql
我后来注意到 /mnt/data
在我的主机上不存在。我在 minikube 工作。
我查看了存储 class,它似乎正在使用 :
StorageClass: manual
但是如果我检查我所有的存储 classes,我只看到这个 :
# 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>
但是我的-sql正在使用的那个不在那里。
请帮助我理解这一点。 PV /mnt/data
在哪里?
在我的主机上查找 /mnt/data
的结果是:
# cd /mnt/data
cd: no such file or directory: /mnt/data
Minikube 是一种基于虚拟机 (VM) 的一体化解决方案。所以你有一个节点,整个控制平面都在这个节点上,这也是你唯一的工作节点:
$ kubectl get node
NAME STATUS ROLES AGE VERSION
minikube Ready master 1d v1.10.0
现在,它是一个节点,一个 VM,托管您的 Kubernetes 集群。所以所有与主机相关的操作都必须在所述 VM 上完成:
$ 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
目录。