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

使用csi-driver-nfs实现K8S动态供给

文章目录

  • 一、部署NFS
  • 二、k8s环境部署csi-nfs
  • 三、测试动态供给
  • 补充


应用服务器IP
nfs-server192.168.1.5
k8s-master01192.168.1.1
k8s-node01192.168.1.2
k8s-node02192.168.1.3

一、部署NFS

1、在NFS服务端和k8s所有节点部署nfs-utils
因为客户端去挂载nfs服务端的共享目录时,需要支持nfs客户端协议,所以客户端也需要安装这个utils包

[root@localhost ~]# yum -y install nfs-utils

2、在nfs服务端编辑nfs配置文件

[root@localhost ~]# vim /etc/exports
/data/NFS/kubernetes *(rw,no_root_squash)
#"/data/NFS/kubernetes"  //-代表nfs要共享的目录,需要创建;
#"*"  //-代表谁可以访问,这里可以指定某个ip或者某个网段,我这里是都可以访问;
#"rw"  //-可以对这个共享目录具备读写权限;
#"no_root_squash"  //-以root的模式去工作的;

3、nfs服务端本地创建要共享目录“/data/NFS/kubernetes”

[root@localhost ~]# mkdir -pv /data/NFS/kubernetes

4、启动nfs服务端并设置开机启动

[root@localhost ~]# systemctl start nfs 
[root@localhost ~]# systemctl enable nfs 

5、使用客户端挂载测试

#将nfs服务端的共享目录“/hqtwww/hqtbj/NFS/kubernetes”挂载到客户端本地的/mnt目录下
[root@k8s-node01 ~]# mount -t nfs 192.168.1.5:/data/NFS/kubernetes /mnt
[root@k8s-node01 ~]# df -h | grep /mnt
192.168.1.5:/data/NFS/kubernetes   17G  2.0G   16G   12% /mnt#进入/mnt目录创建个aaa文件测试下
[root@k8s-node01 ~]# cd /mnt/
[root@k8s-node01 mnt]# touch aaa
#创建完后就可以在nfs服务端共享目录下看到aaa

取消挂载

[root@k8s-node01 ~]# umount /mnt  
#/mnt为挂载的共享目录  取消挂载在初期也需要进行测试下;

二、k8s环境部署csi-nfs

https://github.com/kubernetes-csi/csi-driver-nfs/releases
1、下载csi-nfs插件并解压

[root@k8s-master01 ~]# wget -c https://github.com/kubernetes-csi/csi-driver-nfs/archive/refs/tags/v4.11.0.tar.gz
[root@k8s-master01 ~]# tar -zxf v4.11.0.tar.gz
[root@k8s-master01 ~]# ll 
drwxrwxr-x. 13 root root     4096 318 13:48 csi-driver-nfs-4.11.0
[root@k8s-master01 ~]# cd csi-driver-nfs-4.11.0/

2、替换镜像源
所有要部署的yaml文件在deploy目录下
要修改的镜像如下:
在这里插入图片描述

[root@k8s-master01 csi-driver-nfs-4.11.0]# sed -i 's/registry.k8s.io/k8s.m.daocloud.io/g' deploy/*.yaml

修改后的镜像
在这里插入图片描述

3、部署nfs插件
这里可以直接使用官方提供的脚本
在这里插入图片描述
如果直接需要快照的话可以使用./deploy-script.sh master local snapshot直接安装

[root@k8s-master01 csi-driver-nfs-4.11.0]# pwd
/root/csi-driver-nfs-4.11.0
[root@k8s-master01 csi-driver-nfs-4.11.0]# ./deploy/install-driver.sh master local 
Installing NFS CSI driver, version: master ...
serviceaccount/csi-nfs-controller-sa created
serviceaccount/csi-nfs-node-sa created
clusterrole.rbac.authorization.k8s.io/nfs-external-provisioner-role created
clusterrolebinding.rbac.authorization.k8s.io/nfs-csi-provisioner-binding created
clusterrole.rbac.authorization.k8s.io/nfs-external-resizer-role created
clusterrolebinding.rbac.authorization.k8s.io/nfs-csi-resizer-role created
csidriver.storage.k8s.io/nfs.csi.k8s.io created
deployment.apps/csi-nfs-controller created
daemonset.apps/csi-nfs-node created
NFS CSI driver installed successfully.

等待nfs相关资源Running即部署成功

[root@k8s-master01 csi-driver-nfs-4.11.0]# kubectl get pod -n kube-system -w
NAME                                       READY   STATUS    RESTARTS        AGE
...
csi-nfs-controller-78469d7f6c-2t2zv        5/5     Running   3 (57s ago)     5m11s
csi-nfs-node-hsfqx                         3/3     Running   1 (3m11s ago)   5m11s
csi-nfs-node-wzlk8                         3/3     Running   1 (2m9s ago)    5m11s
csi-nfs-node-zmj8t                         3/3     Running   1 (78s ago)     5m11s
...

4、编辑存储类资源,创建nfs存储类

[root@k8s-master01 csi-driver-nfs-4.11.0]# vim deploy/storageclass.yaml
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:#nfs-server的连接地址;server: 192.168.1.5#nfs-server的共享目录;share: /data/NFS/kubernetes/#在nfs-csi驱动删除pv时,不删除nfs服务器上的数据!(类似nfs-subdir-external-provisioner插件上面的archiveOnDelete:"true");onDelete: retain#定义存储在nfs服务器上的目录结构,根据命名空间-pvc名称-pv名称命名(这样可以好区分,例如"default-web-sc-pvc-19890dfb-253b-4196-9a00-f021ac6690d7"),否则默认的为pv名称;subDir: ${pvc.metadata.namespace}-${pvc.metadata.name}-${pv.metadata.name}# csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume# csi.storage.k8s.io/provisioner-secret-name: "mount-options"# csi.storage.k8s.io/provisioner-secret-namespace: "default"
#回收策略:Delete(删除)与pv相连的后端存储目录同时删除;当定义了onDelete: retain时,才可以使用Delete,否则使用Retain;
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:- nfsvers=4.1[root@k8s-master01 csi-driver-nfs-4.11.0]# kubectl apply -f deploy/storageclass.yaml[root@k8s-master01 csi-driver-nfs-4.11.0]# kubectl get sc 
NAME      PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-csi   nfs.csi.k8s.io   Delete          Immediate           true                   33s

三、测试动态供给

创建ngx的deployment并将数据持久化到pv,定义pvc使用刚创建的nfs-csi,运行看是否会自动创建pvc

[root@k8s-master01 ~]# vim nginx-pvc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: web-sc
apiVersion: apps/v1
kind: Deployment
metadata:name: web-sc
spec:selector:matchLabels:app: nginxreplicas: 2template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxvolumeMounts:- name: wwwrootmountPath: /usr/share/nginx/html #将nfs存储目录挂载到nginx/html目录下volumes:- name: wwwrootpersistentVolumeClaim:claimName: web-sc #要挂载到的pvc名字---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: web-sc #pvc的名字
spec:storageClassName: "nfs-csi" #nfs动态供给存储类的名字,可用使用kubectl get sc 查看到;accessModes:- ReadWriteMany #访问模式resources:requests:storage: 5Gi #请求的容量[root@k8s-master01 ~]# kubectl apply -f nginx-pvc.yaml
[root@k8s-master01 ~]# kubectl get pod,pv,pvc
NAME                          READY   STATUS    RESTARTS   AGE
pod/web-sc-59786d9c6d-h6tjn   1/1     Running   0          5s
pod/web-sc-59786d9c6d-wlr5k   1/1     Running   0          5sNAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM            STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/pvc-c3a7b1ec-9d76-4811-adf9-dc4892db259a   5Gi        RWX            Delete           Bound      default/web-sc   nfs-csi        <unset>                          5sNAME                           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/web-sc   Bound    pvc-c3a7b1ec-9d76-4811-adf9-dc4892db259a   5Gi        RWX            nfs-csi        <unset>                 5s

如上可以看到pvc被自动创建,并在nfs server共享目录里被创建
在这里插入图片描述


补充

在这里插入图片描述


文章转载自:

http://vZ2cFFQl.mmzfL.cn
http://b4OXKDXw.mmzfL.cn
http://OgejjQCV.mmzfL.cn
http://HNet2iZx.mmzfL.cn
http://pLEeqKbW.mmzfL.cn
http://hziWPvav.mmzfL.cn
http://WbeOpd73.mmzfL.cn
http://YW49JHvr.mmzfL.cn
http://2Xz9Q5tl.mmzfL.cn
http://LoIcltQR.mmzfL.cn
http://UTbo7BsI.mmzfL.cn
http://2yVtHP7K.mmzfL.cn
http://HkUkvR6D.mmzfL.cn
http://zLf51eay.mmzfL.cn
http://Lyl7nzZn.mmzfL.cn
http://pB5CyfX0.mmzfL.cn
http://dhwsfTP9.mmzfL.cn
http://w8q3mzHV.mmzfL.cn
http://OjgUiSII.mmzfL.cn
http://mqPkgNQG.mmzfL.cn
http://xhVh78ja.mmzfL.cn
http://TZDzHmMN.mmzfL.cn
http://6W10fBtK.mmzfL.cn
http://Vq30O9h7.mmzfL.cn
http://DQ0MzXdb.mmzfL.cn
http://8TICoaTn.mmzfL.cn
http://P03m8akd.mmzfL.cn
http://WC2PtM7L.mmzfL.cn
http://KBr9rvzF.mmzfL.cn
http://eeO7MVJv.mmzfL.cn
http://www.dtcms.com/a/371498.html

相关文章:

  • linux内核 - 获取内核日志时间戳的方法
  • 从0到1学习Vue框架Day01
  • K8S-Pod(下)
  • RocketMQ事务消息:分布式系统的金融级可靠性保障
  • OSPF基础部分知识点
  • k8s核心技术-Helm
  • 《P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G》
  • GitHub App 架构解析与最佳实践
  • PPP(点对点协议)详细讲解
  • 人工智能优化SEO关键词的实战策略
  • Git高阶实战:Rebase与Cherry-pick重塑你的工作流
  • 【机器学习】通过tensorflow搭建神经网络进行气温预测
  • 基于 Django+Vue3 的 AI 海报生成平台开发博客(海报模块专项)
  • 线程间通信
  • 文件上传之读取文件内容保存到ES
  • 图神经网络分享系列-SDNE(Structural Deep Network Embedding) (一)
  • sentinel限流常见的几种算法以及优缺点
  • 【贪心算法】day6
  • CSS(展示效果)
  • 基于原神游戏物品系统小demo制作思路
  • docker,本地目录挂载
  • The Xilinx 7 series FPGAs 设计PCB 该选择绑定哪个bank引脚,约束引脚时如何定义引脚电平标准?
  • 算法:选择排序+堆排序
  • UE4/UE5反射系统动态注册机制解析
  • 【开题答辩全过程】以 汽车知名品牌信息管理系统为例,包含答辩的问题和答案
  • rabbitmq 的 TTL
  • Linux内核网络的连接跟踪conntrack简单分析
  • Java Stream流:从入门到精通
  • java常见面试题杂记
  • SAP匈牙利新闻