当前位置: 首页 > article >正文

kubernetes如何配置默认存储

如果不想每次都创建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.50(master的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.server=172.16.10.50 --set nfs.path=/data/volume --set storageClass.defaultClass=true --set storageClass.name=nfs-storage

如果没有报错的话,你就能在默认的namespace下看到一个nfs-client-provisioner的Pod在正常运行,后续你在yaml中直接指定PVC的storageClass为nfs-storage就能够正常使用了

报错解析

nfs-client-provisioner在运行过程中查看日志,看到如下报错,创建的一个PVC并没有自动绑定PV,storageclass没有给他创建PV,查看PVC一直处于pending的状态,然后报错信息提示selfLink was empty,这是因为kubernetes1.16版本之后就弃用了selfLink,1.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, can't make reference

解决方法:

修改/etc/kubernetes/manifests/kube-apiserver.yaml文件,找到如下内容后,在最后添加一项参数
spec:
  containers:
    command:
    kube-apiserver
    --advertise-address=192.168.210.20
    --.......  #省略多行内容
    --feature-gates=RemoveSelfLink=false  #添加此行
 等待一下,然后删除apiserver的那个pod,让它重启就可以了

关于storageclass的更多内容可参考博客:K8S 快速入门(十六)实战篇:StorageClass(存储类)-CSDN博客


http://www.kler.cn/a/400477.html

相关文章:

  • Vue3中实现插槽使用
  • std::sort的底层原理(混合排序算法)
  • 七、箭头函数及简写、arguments、剩余参数、展开运算符、解构数组与对象、数组常见方法(forEach、map、join、reduce)
  • 计算机网络之会话层
  • 多模态基础模型:从专家到通用助手
  • 深入解析Javascript中的this指向
  • Spark RDD sortBy算子什么情况会触发shuffle
  • uni-app页面跳转
  • 初级数据结构——栈题库(c++)
  • Linux网络:HTTPS协议
  • Springboot3.3.5 启动流程之 tomcat启动流程介绍
  • Springmvc配置文件application.xml 和 spring-servlet.xml
  • libaom 源码分析:AV1 帧内非方向预测模式
  • HarmonyOS知识点
  • JsonObject (JSON 数据中的一个对象)
  • Seatunnel解决Excel中无法将数字类型转换成字符串类型以及源码打包
  • SpringMVC跨线程获取requests请求对象(子线程共享servletRequestAttributes)和跨线程获取token信息
  • Matlab单输入多输出之同时识别手写数字类别和倾斜角度
  • 用 Android Studio 从零开发一个多功能计算器应用
  • 集群聊天服务器(9)一对一聊天功能
  • 数据科学与SQL:如何计算排列熵?| 基于SQL实现
  • 10月回顾 | Apache SeaTunnel社区动态与进展一览
  • 【jvm】方法区的理解
  • 讨论大语言模型在学术文献应用中的未来与所带来的可能性和担忧
  • C++笔试面试题
  • leetcode 扫描线专题 06-leetcode.836 rectangle-overlap 力扣.836 矩形重叠