k8s--动态pvc和pv

news2024/10/6 18:21:04

目录

前情回顾

动态pv

实验模拟

步骤一:在stor01节点上安装nfs,并配置nfs服务

接下来在matser01上配置

步骤二:创建 Service Account,用来管理 NFS Provisioner 在 k8s 集群中运行的权限和动态规则

步骤三:使用 Deployment 来创建 NFS Provisioner 

部署nfs-provisioners插件:

步骤四:创建 StorageClass,负责建立 PVC 并调用 NFS provisioner 进行预定的工作,并让 PV 与 PVC 建立关联

步骤五: 创建 PVC 和 Pod 测试

下面进行读写测试


前情回顾

存储卷:

emptyDir 容器内部,随着pod销毁,emptyDir也会消失 不能做数据持久化

hostPath:持久化存储数据 可以和节点上目录做挂载。pod被销毁了数据还在

NFS:一台机器,提供pod内容器所有的挂载点

pv和pvc:

pvc就是pod发起的挂载请求

pv:持久化存储目录

静态pv和pvc: 运维负责:创建好持久化存储卷,声明好读写和挂载类型 以及可以提供的存储空间

pvc开发做,要和开发沟通好,你期望的读写和挂载类型,以及存储空间。

当我发布pvc之后可以自动生成pv,还可以在共享服务器上直接生成挂载目录。

pvc直接绑定和使用pv

动态pv

1.卷插件,k8s本身不支持的动态pv创建不包括nfs,需要声明和安装一个外部插件

Provisioner:存储分配器。动态创建pv,然后根据pvc的请求自动绑定和使用。

StorageClass:来定义pv的属性,存储类型,大小,回收策略。

用nfs来实现动态PV,NFS支持的方式NFS-client,Provisioner

实验模拟

步骤一:在stor01节点上安装nfs,并配置nfs服务


1、在stor01节点上安装nfs,并配置nfs服务
node02
cd /opt
mkdir k8s
chmod 777 k8s
vim /etc/exports
/opt/k8s 20.0.0.0/24(rw,no_root_squash,sync)
wq
systemctl restart rpcbind
systemctl restart nfs
showmount -e

master01
showmount -e 20.0.0.63
查看

接下来在matser01上配置

步骤二:创建 Service Account,用来管理 NFS Provisioner 在 k8s 集群中运行的权限和动态规则

vim nfs-client-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---
#定义权限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: nfs-client-provisioner-clusterrole
rules:
  - apiGroups: [""]
#apigroup定义了规则使用了哪个api的组,空字符“”,直接使用api的核心组的资源
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
#表示权限的动作。
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]

#获取pv属性
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
    
#获取api活动的时间信息
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
---
#集群角色绑定
apiVersion: rbac.authorization.k8s.io
kind: ClusterRoleBinding
metadata:
  name: nfs-client-provisioner-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: nfs-client-provisioner
  namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-clusterrole
  apiGroup: rbac.authorization.k8s.io

wq

步骤三:使用 Deployment 来创建 NFS Provisioner 

vim /etc/kubernetes/manifests/kube-apiserver.yaml

...
spec:
  containers:
  - command:
    - --feature-gares=RemoveSelfLink=false
    - --advertise-address=20.0.0.61
    feature-gates:在不破坏现有规则以及功能基础上引入新功能或者修改现有功能的机制。
    禁用不影响之前的规则
    
    wq

kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml

kubectl delete pods kube-apiserver -n kube-system

kubectl get pods -n kube-system | grep apiserver

部署nfs-provisioners插件:

nfs的provisioner的客户端以pod的方式运行在集群当中,监听k8s集群当中的pv的请求。动态的创建于NFS服务器相关的pv。

容器里使用配置,在provisioner当中定义好环境变量,穿给容器。storageclass的名称,nfs服务器的地址,nfs的目录

vim nfs-client-provisioner.yaml
#创建 NFS Provisioner
vim nfs-client-provisioner.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs1
    spec:
      serviceAccountName: nfs-client-provisioner 
#指定Service Account账户来调用
      containers:
        - name: nfs1
          image: quay.io/external_storage/nfs-client-provisioner:latest
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: nfs1
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: nfs-storage   
#配置provisioner的Name,确保该名称与StorageClass资源中的provisioner名称保持一致
            - name: NFS_SERVER
              value: stor01                     
#配置绑定的nfs服务器
            - name: NFS_PATH
              value: /opt/k8s                   
#配置绑定的nfs服务器目录
      volumes:                                  
#申明nfs数据卷
        - name: nfs-client-root
          nfs:
            server:20.0.0.63
            path: /opt/k8s
	
	
kubectl apply -f nfs-client-provisioner.yaml 

步骤四:创建 StorageClass,负责建立 PVC 并调用 NFS provisioner 进行预定的工作,并让 PV 与 PVC 建立关联

vim nfs-client-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client-storageclass
provisioner: nfs-storage     #这里的名称要和provisioner配置文件中的环境变量PROVISIONER_NAME保持一致
parameters:
  archiveOnDelete: "false"   
#false表示在删除PVC时不会对数据目录进行打包存档,即删除数据;为ture时就会自动对数据目录进行打包存档,存档文件以archived开头

reclaimPolicy: Retain
#定义pv的回收策略,retain,另一个是delete,不支持回收
allowVolumeExpansion: true
#pv的存储空间可以动态的扩缩容
  
kubectl apply -f nfs-client-storageclass.yaml

步骤五: 创建 PVC 和 Pod 测试

先创建pvc

vim test-pvc-pod.yaml


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client-storageclass    #关联StorageClass对象
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx1
  labels:
    app: nginx1
spec:
  replicas:1
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx1
        image: nginx:1.22

        volumeMounts:
        - name: nginx1
          mountPath: /usr/share/nginx/html
      volumes:
      - name: nginx1
        persistentVolumeClaim:
          claimName: nfs-pvc      
#与PVC名称保持一致
	  
	  
kubectl apply -f test-pvc-pod.yaml

nfs主机中: 

下面进行读写测试

总结
动态pv的两个组件:

provisioner插件:支持nfs。创建pv目录

strogeclass:定义pv的属性。

动态pv的默认策略是删除

动态pv删除pvc的状态。最好设置为releassed

1.给卷插件创建账号,确保集群可以在集群内部通信,获取资源,监听事件。创建和删除以及更新pv

2.创建卷插件的pod。由卷插件的pod创建pv

3。定义storageclass给pv赋予属性。属性包括:pvc被删除之后pv的状态,以及回收策略。

4.创建pvc

5.实验完成
 

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

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

相关文章

python实现网络爬虫代码_python如何实现网络爬虫

python实现网络爬虫的方法:1、使用request库中的get方法,请求url的网页内容;2、【find()】和【find_all()】方法可以遍历这个html文件,提取指定信息。 python实现网络爬虫的方法: 第一步:爬取 使用reque…

基于ssm的疫苗预约系统论文

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装疫苗预约系统软件来发挥其高效地信息处理的作用&#xff0c…

SpringCloud.03.网关Gateway

目录 网关Gateway的概念: 准备 使用 方式一 因为配置了网关所以可以直接通过gateway发送请求 方式二 修改配置前:http://localhost:8082/provider/run 方式三(动态路由) 导入配置类 网关Gateway的概念: Spring Cloud Gateway 是 Spri…

如何统一给文件夹名加后缀?这个方法教你一键搞定

随着计算机的普及,我们每天都会处理大量的文件和文件夹。有时候,为了更好地管理和分类文件,我们会给文件夹统一加上后缀。给文件加上后缀后最直接的好处就是方便文件管理。当我们给文件夹加上后缀时,我们可以很容易地根据后缀来判…

如何创作出优秀的电子邮件营销(EDM)?

EDM出现的时间很早,是非常传统的一种推广方式。即便是其他推广方式的蓬勃兴起,EDM依旧深受很多行业的喜爱。主要源于它极高的性价比,据可靠数据,EDM的投资回报比达1:48。 那一封优秀的EDM应该是怎么样的呢?…

校园失物招领系统的设计与实现-Flask+Mysql+LayUI

1.设计要求: 2.python项目结构: 3.开发工具:PyCharmNavicat for MySQL 数据库表设计: 4.运行效果截图: (1) 管理员登录页 (2)管理员界面: (3)物品登记页面&…

进阶Docker3:Dokerfile构建镜像

目录 Dockerfile 构建基础镜像 基本机构 命令: 命令解释: 准备工作 创建镜像 上传镜像 Dockerfile Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使 用Docke…

升降式OLED透明屏,影响价格的因素有这6大方面

以下是一篇关于升降OLED透明屏的文章,包括其规格、实现原理、应用领域、特色优势和价格等方面: 升降OLED透明屏的规格升降OLED透明屏的尺寸可以根据不同的需求进行定制,尺寸范围从32英寸到200英寸不等。同时,它的厚度不到1厘米&am…

小程序中使用微信同声传译插件实现语音识别、语音合成、文本翻译功能----语音合成(二)

官方文档链接:https://mp.weixin.qq.com/wxopen/plugindevdoc?appidwx069ba97219f66d99&token370941954&langzh_CN#- 要使用插件需要先在小程序管理后台的设置->第三方设置->插件管理中添加插件,目前该插件仅认证后的小程序。 语音合成…

【软件测试】28岁测试工程师对未来很迷茫?测试之路何去何从?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 程序员到了30岁是…

瑞吉外卖笔记系列(1) —— 环境配置,后台登录和退出的功能实现

本文档主要介绍软件开发整体流程和瑞吉外卖项目,开发环境搭建步骤,以及简单的后台系统功能实现 文章目录 一、软件开发整体介绍1.1软件开发流程1.2 角色分工1.3 软件环境 二、瑞吉外卖项目介绍2.1 项目介绍2.2 产品原型展示2.3 技术选型2.4 功能架构2.5 …

Linux Kernel 4.14--EOF

2017 年,Linux 内核长期支持版本(LTS)的支持时间从原来的2年增加到6年。2023年下半年举行的开源欧洲峰会,LTS 的支持时间取消来了6年,再次缩短到了 2 年。 首个获得6年支持的版就是是 4.14。 在六年支持之后&#xf…

方案解决:5G基站节能及数字化管理

截至2023年10月,我国5G基站总数达321.5万个,占全国通信基站总数的28.1%。然而,随着5G基站数量的快速增长,基站的能耗问题也逐渐日益凸显,基站的用电给运营商带来了巨大的电费开支压力,降低5G基站的能耗成为…

推荐一款实用的免费开源局域网传输工具!轻松搭建网盘的神器!

本文小编给大家分享一款免费开源软件 Filebrowser,使用它可以轻松搭建属于你的个人网盘和网页版文件管理器。 它能做什么呢?想必大家也都用过百度网盘或阿里云盘之类的云存储服务,将自己的所有数据都存储在别人的服务器上,所谓的在…

国图公考:2024山东省事业单位发布招聘公告

更多信息可以登录山东人事考试信息查看!

加速度计:M-A552AC1 / AR1

M-A552传感器单元测量3轴加速度,精度高,稳定性好,体积小,功耗低。该传感器单元采用最新技术来提高性能并提供更宽的传感带宽。具有控制器局域网(CAN)接口或RS422接口,支持主机通信 般描述 M-A552是一个三轴数字输出加…

3、电科院FTU检测标准学习笔记-功能检测1

作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验 目录 通用功能试验技术要求短路故障设置…

电商API接口主要应用场景有哪些?

随着互联网技术的不断进步和电商行业的迅猛发展,电商API接口在商品交易、物流配送、客户服务等方面发挥着越来越重要的作用。本文将深入探讨电商API接口的技术原理、应用场景、开发方法以及优缺点。 一、技术原理 电商API接口是基于HTTP、TCP、IP等网络协议实现的…

RK3568驱动指南|驱动基础进阶篇-进阶7 向系统中添加一个系统调用

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

KaiwuDB × 风电企业 | 高性能、低成本、释放数据价值

项目背景 某风电企业是国内一流的大型风电装备公司,其自主研发建设了新一代高标准风电 SCADA 系统,专门用于解决风场风机状态监控、发电监测、综合能源管控、智能化运管等难题。 现公司已承接多个风场的风机管理运营工作,共计包含 96 台风力…