作者:程序那点事儿 日期:2024/02/05 18:53
初学容易范的错!
问题简述:
StorageClass创建成功,StatefulSet 启动不成功,与pvc关联的po和pvc一直是pending状态。 也就是说,StorageClass没有动态创建pv,所以pvc无法与pv绑定。
原因是制备器创建不了pv,是制备器使用的账号没有仅限(账号名称空间与绑定subjects下的名称空间不一致导致。subjects下如果kind是sa描述的是账号及账号所在的名称空间)。
解决办法:
- 不使用官方的provisioner制备器镜像,使用阿里云镜像
registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0
- 查看制备器provisioner启动状态
kubectl get po -n kube-system | grep nfs
- 查看provisioner的日志,发现账号缺少权限(是看这个日志才发现问题的)
kubectl logs -f nfs-client-provisioner-845cf4584c-4gzlz -n kube-system
原因是账号名称空间与角色绑定的名称空间要一致
修改之后删除账号、删除制备器、删除sts、删除sc
kubectl delete -f nfs-rbac.yaml
kubectl delete -f nfs-provisioner-pv.yaml
kubectl delete -f nfs-storageclass.yaml
kubectl delete -f nfs-statefulset.yaml
全部重新创建
kubectl apply -f nfs-rbac.yaml
kubectl apply -f nfs-provisioner-pv.yaml
kubectl apply -f nfs-storageclass.yaml
kubectl apply -f nfs-statefulset.yaml
kubectl get sa -n kube-system | grep nfs
kubectl get po -n kube-system | grep nfs
查看日志就成功了
查看pv/pvc是绑定状态了,sts的po也是running壮态了。成功!