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

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.lryc.cn/news/487147.html

相关文章:

  • 【微服务】Spring AI 使用详解
  • DataGrip 连接 dm
  • 数据库监控工具DBdoctor v3.2.4.3版本发布,新增对openGauss、Vastbase G100的支持!
  • Git 常用命令大全与详解
  • 执行flink sql连接clickhouse库
  • 什么是C++中的友元函数和友元类?
  • 基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
  • Inpaint-Web:纯浏览器端实现的开源图像处理工具
  • 商业物联网详细指南:优势与挑战
  • 如何在项目中用elementui实现分页器功能
  • Nginx参数配置-笔记
  • 衡量神经网络表征相似度
  • Javascript高级:深度解析与多种实现方式数组扁平化
  • SpringBoot Data Redis连接Redis-Cluster集群
  • 计算机网络——TCP篇
  • 【网络安全面经】技术性问题3
  • 前后端交互之动态列
  • 递归(3)----力扣40组合数2,力扣473火柴拼正方形
  • 十一:HTTP 状态码详解:解读每一个响应背后的意义
  • 《译文》2024年11月数维杯国际大学生数学建模挑战赛题目
  • shell命令统计文件行数之和
  • 第02章 CentOS基本操作
  • 241113.学习日志——[CSDIY] [ByteDance] 后端训练营 [02]
  • 【HOT100第三天】和为K的子数组,最大子数组和,合并区间,轮转数组
  • 设计模式-Adapter(适配器模式)GO语言版本
  • SAM_Med2D 训练完成后boxes_prompt没有生成mask的问题
  • 游戏引擎学习第18天
  • Kotlin return与return@forEachIndexed
  • 基于Canny边缘检测和轮廓检测
  • 力扣题目解析--合并k个升序链表