使用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://www.pswp.cn/web/95995.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开题答辩全过程】以 基于ssm的房屋中介管理系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

MySQL主从复制之进阶延时同步、GTID复制、半同步复制完整实验流程

1.主从同步1.1主从同步原理是指将主库的DDL和DML操作通过二进制日志(binlog)传到从库服务器&#xff0c;然后在从库上对这些日志进行重新执行&#xff0c;从而使从库和主库数据保持一致1.2环境设置库名ip地址操作系统mysql版本主库msyql-master192.168.31.228rhel7.9源码安装my…

织信低代码:用更聪明的方式,把想法变成现实!

你有没有过这样的时刻&#xff1f;想亲手做一个应用&#xff0c;却因为“不会编码”而迟迟没有开始&#xff1b;或曾无奈地目睹公司里一个看似简单的需求&#xff0c;硬是耗费数月、投入大量人力反复开发……现在&#xff0c;有一类工具正在改变这一切。它叫低代码。而今天我们…

【序列晋升】28 云原生时代的消息驱动架构 Spring Cloud Stream的未来可能性

目录 一、Spring Cloud Stream是什么&#xff1f; 二、诞生背景与设计动机 2.1 微服务架构的挑战 2.2 Spring生态的发展 2.3 Spring Integration的演进 三、架构设计与核心组件 3.1 分层架构设计 3.2 核心组件详解 3.3 编程模型 四、解决的问题与优势 4.1 解决的核心…

内网后渗透攻击--linux系统(权限维持)

用途限制声明&#xff0c;本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具&#xff0c;严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果&#xff0c;作者及发布平台不承担任何责任。渗透测试涉及复杂技…

C++笔记之同步信号量、互斥信号量与PV操作再探(含软考题目)

C++笔记之同步信号量、互斥信号量与PV操作再探(含软考题目) code review! 参考笔记: 1.C++笔记之同步信号量、互斥信号量与PV操作再探(含软考题目) 2.C++笔记之信号量、互斥量与PV操作 参考链接 1.嵌入式基础知识-信号量,PV原语与前趋图 2.信号量、PV操作及软考高级试题解析…

布隆过滤器:快速判断某个元素是否存在

特点&#xff1a;高效、空间占用小、允许一定误判 布隆过滤器在 Redis 里的实现机制&#xff0c;核心就是&#xff1a;用一个大位图&#xff08;bitmap&#xff09;来表示集合 位图长度 m 初始值都是 0 插入元素时通过 k 个不同的哈希函数&#xff0c;对元素做哈希 每个哈希结…

C# 修改基类List中某一元素的子类类型

描述&#xff1a;基类&#xff1a;BaseClass子类1&#xff1a;A子类2&#xff1a;B然后我有一个List<BaseClass>类型的链表:list&#xff0c;我先往list中添加了两个元素&#xff1a;第一个元素为A类型&#xff0c;第二个元素为B类型&#xff0c;然后我想改变第一个元素类…

基于STM32智能阳台监控系统

基于STM32智能阳台监控系统&#xff08;程序&#xff0b;原理图元件清单&#xff09;功能介绍具体功能&#xff1a;1.采用STM32作为主控芯片实现检测和控制&#xff1b;2.通过光敏电阻采集光线&#xff0c;将当前光线值在LCD1602显示&#xff0c;低于50%控制LED亮&#xff0c;高…

动态维护有效区间:滑动窗口

右指针不断移动获取解&#xff0c;左指针不断移动缩小解范围 左指针的意义非常重要&#xff0c;相当于一个标兵&#xff0c;不断与这个标兵进行比较&#xff0c;如果符合要求&#xff0c;这左指针进行移动&#xff0c;并进行操作&#xff0c;如果不符合要求&#xff0c;则左指针…

嵌入式学习---(单片机)

1.UART的概念通用异步收发器&#xff0c;2个串口&#xff08;1个串口被用于ISP下载程序&#xff0c;1个串口被用于和主机之间的通信&#xff09;&#xff0c;RXD(接收信号线) TXD(发送信号线)2、单工、半双工、全双工概念对比维度单工&#xff08;Simplex&#xff09;半双工&am…

基于单片机的宠物屋智能系统设计与实现(论文+源码)

1设计思路本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c…

【面试】Java基础面试题

1. Java 基本数据类型有哪些&#xff1f;场景&#xff1a;面试官问「String 是不是基本类型&#xff1f;」答案要点&#xff1a;8 种基本类型&#xff1a;byte, short, int, long, float, double, char, boolean。String 是引用类型。追问链条&#xff1a;问&#xff1a;为什么…

PHP云课堂在线网课系统 多功能网校系统 在线教育系统源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 云课堂&#xff0c;依托腾讯云基础服务架构&#xff0c;采用C扩展框架Phalcon开发&#xff0c; 系统功能 实现了点播、直播、专栏、会员、积分、秒杀、微聊等。 友情提示&#xff1a;…

GEM5学习(4): 运行全系统模式的ARM系统

详细说明可以见官网 gem5: Extending gem5 for ARM 下载镜像 mkdir -p cpu_tests/benchmarks/bin/arm cd cpu_tests/benchmarks/bin/arm wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/arm/Bubblesort wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/arm…

快捷:常见ocr学术数据集预处理版本汇总(适配mmocr)

快捷&#xff1a;常见ocr学术数据集预处理版本汇总&#xff08;适配mmocr&#xff09;快捷&#xff1a;常见ocr学术数据集预处理版本汇总&#xff08;适配mmocr&#xff09;状态指标验证快捷&#xff1a;常见ocr学术数据集预处理版本汇总&#xff08;适配mmocr&#xff09; 状…

从抽象到实现:Elasticsearch数据类型及其底层Lucene数据结构的深度解析

第一部分&#xff1a;Lucene基础&#xff1a;核心索引结构Elasticsearch的强大功能根植于其核心——Apache Lucene&#xff0c;一个高性能、功能完备的搜索引擎库 1。要深入理解Elasticsearch如何处理各种数据类型&#xff0c;首先必须剖析构成Lucene索引的三个基本数据结构&am…

Claude Code核心功能操作指南

&#xff08;一&#xff09;核心交互面板&#xff1a;认识操作界面 登录后进入 Claude Code 主界面&#xff0c;核心区域分为三部分&#xff0c;各模块功能清晰&#xff1a;可以通过 注册免费体验。左侧导航栏&#xff1a;包含 “新建任务”“历史记录”“收藏夹”“帮助中心”…

数据仓库进化:Agent驱动数智化新范式

目录 回顾&#xff1a;从 "人为中心" 的数仓&#xff0c;到大数据与云数仓的进化 AI Agent 成为数据的 "新用户" Agentic Data Stack 如何打破低效与内耗 企业数智化的新范式 案例与趋势展望 所有软件都会被 Agent 改写一遍 经过半个世纪的数据仓库发…

什么是shellcode

好的&#xff0c;我们来详细地解释一下什么是 Shellcode。核心定义Shellcode 是一段精炼的、用作有效载荷&#xff08;Payload&#xff09; 的机器代码。它之所以叫这个名字&#xff0c;是因为最初这类代码的唯一目的就是启动一个命令行 Shell&#xff08;例如 /bin/sh&#xf…