k8s练习--StorageClass详细解释与应用

文章目录

  • 前言
    • StorageClass是什么
  • 一、实验目的
    • 配置过程
  • 二、实验环境
  • 实验步骤
    • 一、配置网络存储NFS:
      • 1.主机基础配置
      • 2.配置 NFS:
    • 二、开启rbac权限:
    • 三、创建nfs-deployment.yaml
    • 四、创建storageclass资源
    • 五、验证:
      • 1.创建PVC验证
      • 2.创建一个pod验证
      • 3.删除pod、pvc,pv会自动删除,nfs数据未删除


前言

StorageClass是什么

简单理解
由于在大型环境应用部署环境中,利用静态方式创建大量的pv是很麻烦的事情,所以为了方便运维人员,我们可以使用StorageClass
storageclass是一种网络存储的动态供给方式,它通过连接存储插件,根据PVC的消费需求,动态生成PV,从而实现方便管理的效果。

详细解释
在 Kubernetes 中,StorageClass 是一种抽象,用于定义不同存储提供者的存储配置。它提供了一种灵活的方式来管理和动态分配存储资源。StorageClass 允许集群管理员定义不同类型的存储(例如 SSD、HDD、网络存储等),以及不同的存储配置(例如不同的性能和备份策略)。

StorageClass 的核心概念

Provisioner(供应者):
Provisioner 是指具体的存储插件,用于创建实际的存储卷。例如,常见的 Provisioner 包括 kubernetes.io-ebs(AWS 的 EBS 卷)、kubernetes.io/gce-pd(Google Cloud 的 Persistent Disk)、kubernetes.io/nfs(NFS 存储)等。

Parameters(参数):
Parameters 定义了存储类的具体配置选项。这些参数因不同的 Provisioner 而异。例如,对于 AWS EBS,可能包括卷的类型(如 gp2、io1)、I/O 性能参数等。

ReclaimPolicy(回收策略):
ReclaimPolicy 定义了当持久卷(PersistentVolume)不再使用时该如何处理。常见的策略包括:

Retain:
保留卷和数据,需要手动处理。

Delete:
删除卷和数据。

Recycle:
清空卷并重新用于其他请求(注意,这种策略已经不推荐使用)。

MountOptions(挂载选项):
这些选项指定了挂载卷时使用的挂载参数。例如,可以指定文件系统的挂载选项来优化性能或可靠性。

VolumeBinding(卷绑定模式):
VolumeBinding 控制卷绑定的时机,通常有两种模式:

Immediate:
立即绑定卷,默认模式。
ForFirst:
等待第一个消费者(Pod)请求时再绑定卷,适用于需要考虑 Pod 调度位置的场景。

一、实验目的

验证k8s中StorageClass的动态生产pv

配置过程

(1) 配置网络存储—>
(2) 开启账号访问权限(创建账号、创建权限、给账号关联权限)—>
(3) 通过中间件将账号与共享存储关联—>
(4) 配置StorageClass与中间件关联—>
(5) 创建PVC关联StorageClass—>
(6) 创建pod关联pvc,动态生成pv
(7) 验证

二、实验环境

Ip主机名cpu内存硬盘
192.168.10.11master1cpu双核2G40G
192.168.10.12node011cpu双核2G40G
192.168.10.13node021cpu双核2G40G
192.168.10.17nfs1cpu1核1G40G

虚拟机 centos7.9

master node01 node02 已部署k8s集群
版本 1.18.0

nfs服务器部署nfs

实验步骤

一、配置网络存储NFS:

1.主机基础配置

由于nfs是新创建的虚拟机需要关闭防火墙,关闭沙盒

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux

2.配置 NFS:

所有主机都需要安装nfs

yum -y install nfs-utils rpcbind

其次在nfs主机上

mkdir /nfsdata
vim /etc/exports
输入
/nfsdata *(rw,sync,no_root_squash)
systemctl start rpcbind
systemctl start nfs-server
systemctl enable rpcbind
systemctl enable nfs-server
showmount -e

看到这个nfs就部署成功了
在这里插入图片描述

二、开启rbac权限:

RBAC(Role-Based Access Control):基于角色的访问控制
vim account.yaml

kind: Namespace 
apiVersion: v1 
metadata: 
  name: test 					#自定义了一个名称空间 
--- 
apiVersion: v1 
kind: ServiceAccount 			#服务类账号 
metadata: 
  name: nfs-provisioner 		#创建账号 nfs-provisioner
  namespace: test 				#指定好自定义的名称空间。 
--- 
apiVersion: rbac.authorization.k8s.io/v1 
kind: ClusterRole 							#集群类的角色 
metadata: 
  name: nfs-provisioner-runner 
  namespace: test 
rules: 										#规则,指定有什么样的权限 
  - apiGroups: [""] 							#“”不写代表对所有api组具有的权限 
    resources: ["persistentvolumes"] 					#对pv可以进行什么样的操作 
    verbs: ["get", "list", "watch", "create", "delete"] 		#有获得,创建,删掉等 等权限
  - apiGroups: [""] 
    resources: ["persistentvolumeclaims"] 				#pvc有什么样的权限 
    verbs: ["get", "list", "watch", "update"] 				#具体权限 
  - apiGroups: ["storage.k8s.io"] 
    resources: ["storageclasses"] 
    verbs: ["get", "list", "watch"] 
  - apiGroups: [""] 
    resources: ["events"] 
    verbs: ["watch", "create", "update", "patch"] 
  - apiGroups: [""] 
    resources: ["services", "endpoints"] 
    verbs: ["get","create","list", "watch","update"]
  - apiGroups: ["extensions"] 
    resources: ["podsecuritypolicies"] 
    resourceNames: ["nfs-provisioner"] 
    verbs: ["use"]  
--- 
kind: ClusterRoleBinding 	#cluster开头的指的都是整个k8s的权限范围,在集群内都生效 
apiVersion: rbac.authorization.k8s.io/v1 
metadata: 
  name: run-nfs-provisioner 
subjects: 
  - kind: ServiceAccount 
    name: nfs-provisioner 
    namespace: test 
roleRef: 
  kind: ClusterRole 
  name: nfs-provisioner-runner 
  apiGroup: rbac.authorization.k8s.io

简单注释
这个 YAML 文件定义了一个 Kubernetes 命名空间 test,在其中创建了一个名为 nfs-provisioner 的服务账号,并为该账号设置了一组权限规则,允许其对持久卷、持久卷声明、存储类等资源进行特定操作。最后,通过集群角色绑定将权限规则与服务账号进行了关联,使得该账号能够在指定命名空间内执行相应的操作。

执行这个yaml文件,看到三个created就是运行成功了,如果报错仔细查看,大概率是字符错误

kubectl apply -f nfs-deployment.yaml

在这里插入图片描述

获取命名空间 test 中的服务账号,可以看到已经存在

kubectl -n test get serviceaccounts

在这里插入图片描述

三、创建nfs-deployment.yaml

通过中间件将访问账号与共享存储关联
vim nfs-deployment.yaml

apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: nfs-client-provisioner 
  namespace: test 
spec: 
  selector: 
    matchLabels: 
      app: nfs-client-provisioner 
  replicas: 1 
  strategy: 
    type: Recreate 
  template: 
    metadata: 
      labels: 
        app: nfs-client-provisioner 
    spec: 
      serviceAccount: nfs-provisioner 		#nfs-provisioner为已创建的服务类账号   
      containers: 
        - name: nfs-client-provisioner 
          image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner  	#中间件镜像
          imagePullPolicy: IfNotPresent 
          volumeMounts: 
            - name: nfs-client-root 
              mountPath: /persistentvolumes 
          env: 
            - name: PROVISIONER_NAME 
              value: pro-test 
            - name: NFS_SERVER 
              value: 192.168.10.17 
            - name: NFS_PATH
              value: /nfsdata 
      volumes: 
        - name: nfs-client-root 
          nfs:
            server: 192.168.10.17
            path: /nfsdata

简单注释
在 Kubernetes 集群中部署了一个 NFS 客户端 provisioner,用于动态创建持久卷,并将其挂载到容器中,以便应用程序可以访问 NFS 服务器上的数据。

创建然后查看一下,看到即可

kubectl apply -f nfs-deployment.yaml
kubectl -n test get pod

在这里插入图片描述

四、创建storageclass资源

vim storageclass.yaml
(配置storageclass与中间件关联)

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: storageclass
  namespace: test
provisioner: pro-test
#reclaimPolicy: Retain
reclaimPolicy: Delete

创建并查看

kubectl apply -f storageclass.yaml
 kubectl get sc   

在这里插入图片描述

五、验证:

1.创建PVC验证

vim test-pvc1.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-pvc1
  namespace: test
spec:
  storageClassName: storageclass
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi

创建并查看

kubectl apply -f test-pvc1.yaml
kubectl -n test get pv,pvc

在这里插入图片描述
nfs服务器上查看

 ls /nfsdata/

在这里插入图片描述

查看pod容器挂载目录,目录中无文件

[root@master ~]# kubectl -n test exec -it nfs-client-provisioner-5878bf7b9c-2294l /bin/sh
/ # ls persistentvolumes/
test-test-pvc1-pvc-1738bcd6-3d9b-49f6-9005-3eee8e61eae6
/ # ls persistentvolumes/test-test-pvc1-pvc-1738bcd6-3d9b-49f6-9005-3eee
8e61eae6/
/ #exit

2.创建一个pod验证

vim test-pod1.yaml

apiVersion: v1
kind: Pod
metadata:
  name: test-pod1
  namespace: test
spec:
  containers:
  - name: test-pod1
    image: busybox
    imagePullPolicy: IfNotPresent
    args:
      - /bin/sh
      - -c
      - sleep 3000
    volumeMounts:
      - name: nfs-pv
        mountPath: /test
  volumes:
    - name: nfs-pv
      persistentVolumeClaim:
        claimName: test-pvc1
kubectl apply -f test-pod1.yaml
kubectl get pod -n test

在这里插入图片描述
向pod1中写入文件测试

kubectl exec -it -n test test-pod1 -- touch /test/test1.txt

nfs服务器上查看:

 ls /nfsdata/test-test-pvc1-pvc-1738bcd6-3d9b-49f6-9005-3eee8e61eae6/

在这里插入图片描述

3.删除pod、pvc,pv会自动删除,nfs数据未删除

kubectl -n test get pv,pvc

查看nfs会发现目录名发生变化,但数据还在

ls /nfsdata/archived-test-test-pvc1-pvc-1738bcd6-3d9b-49f6-9005-3eee8e61eae6/

在这里插入图片描述

实验完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/673845.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pycharm SSH远程连接时出现报错,测试 SFTP 连接,连接到 ‘connect.westb.seetacloud.com‘ 失败

问题由来 很离谱!今天本来打算租借AutoDL的显卡完成一项深度学习的任务,很离谱的是同步文件夹的时候报了标题说的错。 就很莫名奇妙,一天都在网上找解决办法,结果都不对头。 其他报错 最后摸索着,在使用pycharm远程登…

基于django | 创建数据库,实现增、删、查的功能

1、在cmd中,输入指令进入mysql终端: mysql -u 用户名 -p 2、输入mysql的密码 3、输入指令,显示出所有的数据库 show databases; 4、输入指令创建表: create table 表名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 5、use …

Pr 2024下载安装,Adobe Premiere专业视频编辑软件安装包获取!

Premiere Pro,简称PR,无论是想要剪辑家庭录像,还是制作专业的影视作品,Premiere Pro都能为您提供强大的支持。 Premiere Pro以其卓越的编辑功能和强大的性能,助力用户在视频创作的道路上不断突破自我。 它具备丰富的视…

【python科学文献计量】关于中国知网检索策略的验证,以事故伤害严重程度检索为例

关于中国知网检索策略的验证,以事故伤害严重程度检索为例 1 背景2 文献下载3 数据处理1 背景 由于要进行相关研究内容的综述,需要了解当前我国对于事故伤害严重程度的研究现状,采用国内较为知名的检索网站(中国知网)进行文献数据集检索 由于最近知网出bug,检索的结果在…

521源码-源码下载-WordPress报错:Allowed memory size of 134217728 bytes exhausted错误解决方法

在wordpress中使用站内搜索或者打开一个页面时提示错误: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) 致命错误:允许耗尽内存大小为134217728字节(试图分配20480字节) 分析:经过检查发现&#x…

Sentinel限流学习

Sentinel限流学习 初识Sentinel运行sentinel雪崩问题服务保护技术对比微服务整合Sentinel 限流规则簇点链路 流控模式-关联流控模式-链路流控模式有哪些? 流控效果流控效果-warm up流控效果-排队等待 热点参数限流隔离和降级Feign整合Sentinel线程隔离有两种方式实现…

【conda】解决conda activate无效的问题

conda activate 虚拟环境名字执行上述命令失效,提示如下信息: 经查询,原因是新版的 conda 不再使用 activate 来激活虚拟环境,而是改用: source activate 虚拟环境名退出虚拟环境还是: conda deactivate…

小米员工自爆:35岁被裁后,投百份简历无人问津,一气之下把薪资由2W调为3W,简历改成英文,结果出乎意料

“35岁”,就像职场里一道无形的门槛,压得人喘不过气。一旦迈过这道坎,焦虑、迷茫、恐慌,接踵而至。 最近,我的朋友老张,就真切地体会到了这种“中年危机”。刚过36岁生日,他就收到了来自小米的裁…

【数据结构与算法(C 语言)】队列 --链队列

1. 前言 1.1 定义 队列:一种先进先出(first in first out,缩写 FIFO)的线性表。 队尾:允许插入的一端(rear) 队头:允许删除的一端 (front) 用链表标识的队列简称 链队列 1.2 队列示意图 2. 链队列存储结构…

Android Studio插件开发 - Dora SDK的IDE插件

IDE插件开发简介 Android Studio是一种常用的集成开发环境(IDE),用于开发Android应用程序。它提供了许多功能和工具,可以帮助开发人员更轻松地构建和调试Android应用程序。 如果你想开发Android Studio插件,以下是一…

MyBatis框架-开发方式+参数传递+#{}、${}+返回值处理+查询结果封装为对象+resultType

一、开发方式 MyBatis-Dao层Mapper接口化开发 二、注意事项 1、Mapper接口与Mapper.xml映射文件要满足4个对应 (1)Mapper接口的全类名必须与Mapper映射文件中的namespace相同 (2)Mapper接口中的每一个方法名在Mapper映射文件…

密码加密及验证

目录 为什么需要加密? 密码算法分类 对称密码算法 非对称密码算法 摘要算法 DigestUtils MD5在线解密工具原理 实现用户密码加密 代码实现 为什么需要加密? 在MySQL数据库中,我们常常需要对用户密码、身份证号、手机号码等敏感信息进…

pod 控制器介绍

一 pod 控制器相关理论介绍 1,Pod控制器 是什么 Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行…

使用modbus-serial 库搭配 modbus slave 通过 modbus tcp client 协议来 写入 modbus 寄存器值

使用modbus-serial 库对modbus slave 写入寄存器值 modbus tcp client 代码 目标电脑(启动modbus slave 的电脑)ip为 192.168.3.46,端口502 // 读取另一台电脑,192.168.3.46:502 Modbus TCP // create an empty modbus client c…

2005NOIP普及组真题 4. 循环

线上OJ&#xff1a; 【05NOIP普及组】循环 核心思想&#xff1a;高精度 1、本题用到了标准的高精度乘法模板 void init(int a[]) //传入一个数组 {string s; cin >> s; //读入字符串s a[0] s.length(); //用a[0]计算字符串s的位数 for(i 1; i < a[0]; i) a[i] …

颠覆与重塑|AI助力汽车开发,汽车智能势不可挡

汽车行业深受人工智能的影响&#xff0c;人工智能正在为我们创造全新的出行方式。随着智能化的加速普及&#xff0c;越来越多的消费者开始关注汽车的智能化。智能化的水平已经成为众多消费者购车的参考因素&#xff0c;也成了车企竞争的主赛道&#xff0c;汽车行业也已经成为人…

高校科研信息管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告管理&#xff0c;反馈管理&#xff0c;操作日志管理&#xff0c;科研项目管理&#xff0c;通知管理 科研人员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;反馈管理&#xff…

[SQL-SERVER:数据库安全及维护]:MSSM工具对用户进行用户授权和角色授权操作

文章目录 直接为用户授权&#xff08;20分&#xff09;1. 创建登录TLogin&#xff0c;自行指定登录密码服务器层面选择 安全性 > 点击 登录名 > 点击右键 > 点击 新建登录名 > 选择sqlserver验证 > 关闭强制登录更改密码异常解决&#xff1a;sqlserver 配置管理…

【最新鸿蒙应用开发】——什么是应用开发模型?Stage模型

在应用程序开发时通常需要使用应用模型来提供必备的组件和运行机制&#xff0c;有了应用模型&#xff0c;开发者可以基于一套统一的模型进行应用开发&#xff0c;使应用开发更简单、高效。接下来谈谈鸿蒙应用开发当中的两种模型&#xff1a; Stage模型&#xff1a; HarmonyOS …

过滤器、监听器、拦截器的区别

过滤器、监听器、拦截器的区别 过滤器&#xff08;filter&#xff09;、监听器&#xff08;Listener&#xff09;是JavaWeb的三大组件。而拦截器&#xff08;Interceptor&#xff09;是Spring框架中的。 我们主要是要分清除过滤器和拦截器的区别&#xff1a; 实现原理&#…