背景及问题处理过程:
1、在miniKube创建的k8s集群中练习创建动态持久卷声明(pvc)及StorageClass资源,在pvc定义中引用创建的StorageClass资源,然后查看pvc状态时发现处于pending。那是什么原因导致处于pending状态呢?
2、然后通过k describe pvc pvc名称 查看pvc的事件时发现有这么一句话:
“waiting for a volume to be created, either by external provisioner “k8s.io/minikube-hostpath” or manually created by system administrator”从这句话中可以看出是StorageClass无法创建持久卷(pv),导致pvc无法绑定pv。那是什么原因导致无法创建pv呢?
3、查看StorageClass的定义(通过其yaml文件),创建pv使用的插件是“ k8s.io/minikube-hostpath”,而在minikube文档中,负责自动创建HostPath类型pv的是storage-provisioner插件。那么storage-provisioner插件是否启用呢?
4、通过命令“minikube addons list”查看storage-provisioner插件的启用状态,发现是enable,说明是启用状态。那为啥没有起作用呢?
5、通过命令“k get pod -n kube-system”查看storage-provisioner对应的pod状态是否正常。发现没有storage-provisioner这个pod。正常应该有这个pod才对啊,为啥没有呢?怎么才能创建这个pod呢
6、进入minikube容器中(我本地环境是minikube是部署在一个docker容器),切换到/etc/kubernetes/addons目录下,查看storage-provisioner.yaml配置文件,找到下图中的pod部分的定义:
pod部分说明
通过定义看出,storage-provisioner这个pod中的容器是通过镜像“registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5”来创建的。继续在minikube容器中通过“docker images”命令来查看镜像,发现是有“registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5”这个镜像的,那么问题来了,为啥有镜像,却没有storage-provisioner这个pod呢?
7、正如文章标题所述,如何解决缺少storage-provisioner的问题呢?我用的方法是:通过重新添加storage-provisioner插件的方法。在宿主机上通过“minikube addons enable storage-provisioner”命令来重新激活storage-provisioner插件,通过“minikube addons list”确认插件storage-provisioner状态依旧是enable。然后再次通过命令“k get pod -n kube-system”查看storage-provisioner对应的pod状态是否正常。发现是正常的,状态为ready。(也可以进入到minikube容器中查看容器状态验证,docker ps -a).
8、通过步骤7问题已解决,此时再次查看pvc的状态,发现是Bound,说明绑定pv成功。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐