装饰公司网站,皖icp备 网站建设,wordpress 04,百度seo网站优化服务如果不想每次都创建PV#xff0c;希望k8s集群中能够配置号默认存储#xff0c;然后根据你的PVC自动创建PV#xff0c;就需要安装一个默认存储#xff0c;也就是storageclass
什么是storageclass
Kubernetes提供了一套可以自动创建PV的机制#xff0c;即#xff1a;Dyna…如果不想每次都创建PV希望k8s集群中能够配置号默认存储然后根据你的PVC自动创建PV就需要安装一个默认存储也就是storageclass
什么是storageclass
Kubernetes提供了一套可以自动创建PV的机制即Dynamic Provisioning。而这个机制的核心在于StorageClass这个API对象。
StorageClass对象会定义下面两部分内容:
1. PV的属性。比如存储类型Volume的大小等。 2. 创建这种PV需要用到的存储插件即存储制备器。 有了这两个信息之后Kubernetes就能够根据用户提交的PVC找到一个对应的StorageClass之后Kubernetes就会调用该StorageClass声明的存储插件进而创建出需要的PV。但是其实使用起来是一件很简单的事情你只需要根据自己的需求编写YAML文件即可然后使用kubectl create命令执行即可
配置k8s集群中的默认存储
我们使用nfs来作为集群的存储首先在master节点上安装nfs并且创建存放数据的目录
sudo apt install nfs-kernel-server -y
# 建立共享目录修改配置文件
mkdir /data
sudo vim /etc/exports
sudo cat /etc/exports
/data *(rw,sync,no_root_squash,no_subtree_check)
/data/k8s *(rw,sync,no_root_squash,no_subtree_check)
# 重启服务使配置生效
sudo service rpcbind restart
sudo service nfs-kernel-server restart
systemctl enable rpcbind
systemctl enable nfs-kernel-server
exportfs -arv
然后node节点安装nfs的client
apt install nfs-common -y
要使用StorageClass我们就得安装对应的自动配置程序比如上面我们使用的是nfs那么我们就需要使用到一个 nfs-client 的自动配置程序我们也叫它 Provisioner这个程序使用我们已经配置的nfs服务器来自动创建持久卷也就是自动帮我们创建PV
当然在部署nfs-client之前我们需要先成功安装上 nfs 服务器上面已经安装好了服务地址是172.16.10.50master的IP共享数据目录是/data/volume然后接下来我们部署 nfs-client 即可我们也可以直接参考 nfs-client 文档进行安装即可。
我们直接使用helm的方式来部署提前添加stable的仓库
#添加仓库
helm repo add stable https://charts.helm.sh/stable
#安装nfs-client-provisioner
helm install nfs-client-provisioner stable/nfs-client-provisioner --set nfs.server172.16.10.50 --set nfs.path/data/volume --set storageClass.defaultClasstrue --set storageClass.namenfs-storage
如果没有报错的话你就能在默认的namespace下看到一个nfs-client-provisioner的Pod在正常运行后续你在yaml中直接指定PVC的storageClass为nfs-storage就能够正常使用了
报错解析
nfs-client-provisioner在运行过程中查看日志看到如下报错创建的一个PVC并没有自动绑定PVstorageclass没有给他创建PV查看PVC一直处于pending的状态然后报错信息提示selfLink was empty这是因为kubernetes1.16版本之后就弃用了selfLink1.20版本彻底停用但是nfs-provisioner的实现是基于selfLink功能的所以才会失败
报错信息如下
E0407 02:18:31.379377 1 controller.go:1004] provision kubesphere-monitoring-system/prometheus-k8s-db-prometheus-k8s-0 class nfs-storage: unexpected error getting claim reference: selfLink was empty, cant make reference
解决方法
修改/etc/kubernetes/manifests/kube-apiserver.yaml文件找到如下内容后在最后添加一项参数
spec:containers:command:kube-apiserver--advertise-address192.168.210.20--....... #省略多行内容--feature-gatesRemoveSelfLinkfalse #添加此行等待一下然后删除apiserver的那个pod让它重启就可以了
关于storageclass的更多内容可参考博客K8S 快速入门十六实战篇StorageClass存储类-CSDN博客