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

k8s持久化存储(NFS-StorageClass)

一、StatefulSet由以下几个部分组成:

  • 用于定义网络标志(DNS domain)的Headless Service
  • 用于创建PersistentVolumes的volumeClaimTemplates
  • 定义具体应用的StatefulSet

二、StatefulSet 特点
StatefulSet 适用于有以下某个或多个需求的应用:

  • 稳定,唯一的网络标志。
  • 稳定,持久化存储。
  • 有序,优雅地部署和 scale。
  • 有序,优雅地删除和终止。
  • 有序,自动的滚动升级。

三、什么是StorageClass
StatefulSet是为了解决有状态服务的问题(对应Deployments和 ReplicaSets是为无状态服务而设计),其应用场景包括:

  • 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现

  • 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现

  • 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现

  • 有序收缩,有序删除(即从N-1到0)

StorageClass是一个存储类,通过创建StorageClass可以动态生成一个存储卷,供k8s用户使用。使用StorageClass可以根据PVC动态的创建PV,减少管理员手工创建PV的工作。

四、StorageClass部署流程
要使用 StorageClass,我们就得安装对应的自动配置程序,比如我们这里存储后端使用的是 nfs,那么我们就需要使用到一个 nfs-client 的自动配置程序,我们也叫它 Provisioner,这个程序使用我们已经配置好的 nfs 服务器,来自动创建持久卷,也就是自动帮我们创建 PV。

搭建StorageClass+NFS,大致有以下几个步骤:
1.创建一个可用的NFS Serve
2.创建Service Account.这是用来管控NFS provisioner在k8s集群中运行的权限
3.创建StorageClass.负责建立PVC并调用NFS provisioner进行预定的工作,并让PV与PVC建立管理
4.创建NFS provisioner.有两个功能,一个是在NFS共享目录下创建挂载点(volume),另一个则是建了PV并将PV与NFS的挂载点建立关联

五、部署步骤
1)部署NFS
在所有节点中执行:

yum -y install nfs-utils rpcbind
systemctl enable rpcbind && systemctl start nfs
systemctl enable nfs-server && systemctl start rpcbind

2)创建共享目录

# 创建共享目录
mkdir /home/data
# 设置环境变量
vi /etc/exports
# 添加以下内容
/home/data *(insecure,rw,sync,no_subtree_check,no_root_squash)
# 重启服务systemctl restart nfs

3)创建目录

添加nfs-subdir-external-provisioner仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
#查看nfs-subdir-external-provisioner所有版本
helm search repo nfs-subdir-external-provisioner --versions
#拉取文件
helm install my-nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.17
#如果下载有问题直接下载tgz包
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.17/nfs-subdir-external-provisioner-4.0.17.tgz
#编辑values配置文件
vi nfs-subdir-external-provisioner/values.yaml
修改如下参数replicaCount: 3 # 第1行,副本个数,根据自身需求设置,建议3个
image: registry.cn-beijing.aliyuncs.com/xngczl/nfs-subdir-external-provisione
repository: # 第5行,设置镜像仓库
tag: v4.0.0 # 第6行,镜像版本
nfs:
server: 192.168.100.15 # 第11行,nfs server端地址
path: /home/data # 第12行,nfs目录
storageClass:
defaultClass: true # 第27行,设置为默认存储类,如果不设置,使用存储类时需要指定
name: nfs-storage # 第31行,设置存储类资源名称

4)创建namespace

kubectl create namespace nfs-storage

5)安装nfs-subdir-external-provisioner

[root@master1 ~]# helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner -n nfs-storage
NAME: nfs-subdir-external-provisioner
LAST DEPLOYED: Fri Dec 29 19:44:31 2023
NAMESPACE: nfs-storage
STATUS: deployed
REVISION: 1
TEST SUITE: None

6)查看pod状态

[root@master1 ~]# kubectl get pod -n nfs-storage
NAME                                               READY   STATUS    RESTARTS   AGE
nfs-subdir-external-provisioner-6b48cd99bc-hvgqx   1/1     Running   0          9s
nfs-subdir-external-provisioner-6b48cd99bc-k9ph5   1/1     Running   0          9s
nfs-subdir-external-provisioner-6b48cd99bc-kcrf4   1/1     Running   0          9s

7)测试

vim test-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: test-pvc
spec:storageClassName: nfs-storage # 指定存储类,如果设置了默认,可以去掉accessModes:- ReadWriteManyresources:requests:storage: 1Mi#创建pvc,会自动相应的pv
kubectl apply -f test-pvc.yaml -n nfs-storage
#查看pvc和pv是否创建
[root@master1 ~]# kubectl get pvc,pv -n nfs-storage
NAME                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/test-pvc   Bound    pvc-98c9cdeb-6519-4c8e-a147-61472fb06959   1Mi        RWX            nfs-storage    96sNAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                  STORAGECLASS   REASON   AGE
persistentvolume/pvc-98c9cdeb-6519-4c8e-a147-61472fb06959   1Mi        RWX            Delete           Bound    nfs-storage/test-pvc   nfs-storage             96s

六、关于StorageClass回收策略对数据的影响
第一种:

# 配置archiveOnDelete: "false"  reclaimPolicy: Delete   #默认没有配置,默认值为Delete
#结果
1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
3.删除PVC后,PV被删除且NFS Server对应数据被删除

第二种:

#配置archiveOnDelete: "false"  reclaimPolicy: Retain  
#结果
1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
3.删除PVC后,PV不会别删除,且状态由Bound变为Released,NFS Server对应数据被保留
4.重建sc后,新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中

第三种:

#配置archiveOnDelete: "ture"  reclaimPolicy: Retain 
#结果
1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
3.删除PVC后,PV不会别删除,且状态由Bound变为Released,NFS Server对应数据被保留
4.重建sc后,新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中 

第四种:

#配置archiveOnDelete: "ture"  reclaimPolicy: Delete 
#结果
1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
3.删除PVC后,PV不会别删除,且状态由Bound变为Released,NFS Server对应数据被保留
4.重建sc后,新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中
http://www.lryc.cn/news/273076.html

相关文章:

  • java servlet软件缺陷库管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 19|BabyAGI:根据气候变化自动制定鲜花存储策略
  • 面试经典150题(62-64)
  • 流量困境下,2024年餐饮商家的直播带货生意到底怎么做?
  • C++ 具名要求-基本概念-指定该类型对象可以默认构造
  • T527 Android13遥控适配
  • 第三部分使用脚手架:vue学习(61-65)
  • 【Linux学习笔记】解析Linux系统内核:架构、功能、工作原理和发展趋势
  • springboot连接oracle报错ORA-12505解决方案
  • 服务器为什么大多用 Linux?
  • C++上位软件通过Snap7开源库访问西门子S7-200/合信M226ES数据块的方法
  • 通信及信号处理领域期刊影响因子、分区及期刊推荐-2024版
  • cfa一级考生复习经验分享系列(十五)
  • 如潮好评!优秀选手视角下的第二届粤港澳大湾区(黄埔)国际算法算例大赛
  • 软件测试之冒烟测试
  • NE555学习笔记-2024
  • 记一次docker中安装redis的过程
  • Matlab进阶绘图第37期—多色悬浮柱状图
  • 【嵌入式】About USB Powering
  • MySQL——事物
  • Windows搭建RTSP视频流服务(EasyDarWin服务器版)
  • 私域营销,让你的生意从线下到线上都火爆!
  • MATLAB基本绘图操作(二维和三维绘图)
  • 中国社科院与新加坡新跃社科联合培养博士—攻读在职博士的理由是什么?
  • T40N 君正智能处理器T40 BGA 芯片
  • Profinet转Modbus使设备互联更简单
  • Android 文字垂直排列,文字向右旋转90度
  • 域名授权验证系统PHP源码,盗版追踪、双重授权和在线加密功能,附带安装教程
  • Qt线程封装FFmpeg播放器类
  • git 常用命令 修改 远程仓库 默认分支