Kubernetes的动态pv

news2024/12/24 9:03:49

pv和pvc存储卷

存储卷:

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

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

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

pv和pvc:

pvc就是pod发起的挂载 的请求

pv:持久化存储的目录,ReadwriteMan、ReadOnlyMany、ReadWriteOnce

只有NFS支持ReadWriteOnce、ReadOnlyMany 、readwriteMany

hostPath只支持ReadWriteOnce

ISCI:不支持ReadWriteMany

py的回收策略:Retain、released需要人工设置,调整回Available

Reycle回收,自动调整回Available,Delete:删除

静态pv和pvc

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

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

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

pvc直接绑定和使用pv

动态pv需要两个组件:

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

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

2、StorageClass:卷插件来定义pv的属性,包括存储类型,大小回收策略等等

还是用NFS实现动态pv,NFS支持的方式是NFS-client,provisioner来适配nfs-client

nfs-clent-provisioner卷插件

serviceAccount

NFS PRovosoner:是一个,没有权限是无法在集群当中获取k8s的消息,插件要有权限能够监听apiserver,获取get,list(获取集群的列表资源) create delete

kind ServiceAccount

rbac:Role-based ACCESS CONTROL #定义校色在集群当中可以使用的权限

角色、权限都已经创建完毕

部署插件:NFS-privisioner deployment来创建插件 pod

1.20之后又一个新的机制

selfLink:API的做i元对象之一,表示资源对象在集中当中自身的一个连接,self-link是一个唯一表示符号,可以用于表示k8s集群当中每个资源的对象

self link的值是一个URL,指向该资源对象的K8S api的路径

更好的实现资源对象的查找和引用

--feature-gates=RemoveSelfLink=false

--feature-gates:在不破坏现有规则以及功能基础上引入新功能或者修改现有功能的机制。

禁用不影响之前的规则。

部署bfs-provisioner的插件:

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

容器里使用的配置,在这份provisioner当中定义好环境变量传给容器,storageclass的名称还有nfs的服务器的地址以及nfs的目录

provisioner作用创建pv

name: storageclass的名称

PROVISIONER:对应的创建pv的PROVISIONER的插件

RECLAIMPOLICY:回收策略,保留

VOLUMEBINDINGMODE:卷绑定模式。immediate表示pvc请求创建pv时,系统会立即绑定一个可用的pv

ALLOWVOUMEEXPANSION:true表示可以在运行时对pv进行扩容

waitForFirstConsumer:第一个使用者出现之后再绑定pv。

总结核心:动态pv

两个组件provisioner插件---支持nfs

storageclass:定义pv的属性插件创建pv属性

动态pv的默认策略是删除

动态pv删除pvc之后状态,released

主要就是创建账号给卷插件能够在集群内部通信,获取资源,监听事件,创建和删除更新pv

第二件事就是创建卷插件pod由卷插件的pod创建pv

第三件事:创storageclass:给pv赋予属性(pvc被删除之后pv的状态,以及回收的策略)

第四件事创建pvc>完成pvc

动态pv的过程

在stor01节点上安装nfs,并配置nfs服务


mkdir /opt/k8s
chmod 777 /opt/k8s/
 
vim /etc/exports
/opt/k8s 20.0.0.0/24(rw,no_root_squash,sync)

systemctl restart rpcbind
systemctl restart nfs


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: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - 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/v1
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

kubectl apply -f nfs-client-rbac.yaml
使用 Deployment 来创建 NFS Provisioner
vim /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=RemoveSelfLink=false #添加这一行
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 Provisioner
vim nfs-client-provisioner.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs1
    spec:
      serviceAccountName: nfs-client-provisioner   	  
      containers:
        - name: nfs1
          image: quay.io/external_storage/nfs-client-provisioner:latest
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: nfs
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: nfs-storage               
			                               
            - name: NFS_SERVER
              value: 20.0.0.95            
            - name: NFS_PATH
              value: /opt/k8s                   
      volumes:                                  
        - name: nfs
          nfs:
            server: 20.0.0.95
            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
provisioner: nfs-storage
parameters:
  archiveOnDelete: "false"
#pvc被删除之后pv的状态,如果定义的false,pvc如果被删除,pv的状态将是released,可以人工调整,
继续使用,如果是true,pv的状态将是Archived,表示pv不再可用
reclaimPolicy: Retain
#定义pv的回收策略,只支持retain和delete,不支持回收
allowVolumeExpansion: true
#表示pv的存储空间可以动态的扩缩容
 kubectl apply -f nfs-client-storageclass.yaml                                                                                          
                                                                           
vim test-pvc-pod.yaml
piVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client-storageclass
  resources:
    requests:
      storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-storageclass-deployment
  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: nfs-pvc
          mountPath: /usr/share/nginx/html
      volumes:
      - name: nfs-pvc
        persistentVolumeClaim:
          claimName: nfs-pvc

kubectl apply -f test-pvc-pod.yaml

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

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

相关文章

Elasticsearch 索引文档时create、index、update的区别【学习记录】

本文基于elasticsearch7.3.0版本。 一、思维导图 elasticsearch中create、index、update都可以实现插入功能,但是实现原理并不相同。 二、验证index和create 由上面思维导图可以清晰的看出create、index的大致区别,下面我们来验证下思维导图中的场景&…

2023年山东省职业院校技能大赛高职组信息安全管理与评估 理论题(正式赛)

2023年山东省职业院校技能大赛高职组信息安全管理与评估 理论题 理论技能与职业素养(100分) 2023年山东省职业院校技能大赛高职组信息安全管理与评估 理论题 【注意事项】 Geek极安云科专注技能竞赛技术提升,基于各大赛项提供全面的系统性…

大数据系列之:腾讯云服务器性能和价格比较

大数据系列之:腾讯云服务器性能和价格比较 一、磁盘性能和价格比较二、高性能云硬盘三、ssd云硬盘四、极速型ssd云硬盘五、增强型ssd云硬盘六、查看腾讯云服务器价格 一、磁盘性能和价格比较 磁盘名称高性能ssd云硬盘极速型ssd云硬盘增强型ssd云硬盘规格500g 5800 …

九州金榜|提高孩子认知,让问题自动消失

哈佛大学教授桑斯坦曾提出一个概念,叫做“信息茧房”。 意思是说:人们关注的信息领域,会习惯性地被自己的思想所引导,当你长时间接受单一观点时,就像蚕茧一样把自己越包越紧,越来越封闭。 走不出认知逻辑…

爬虫01-爬虫原理以及爬虫前期准备工作

文章目录 1 爬虫基本原理什么是爬虫爬虫功能详解爬虫基本流程两个概念:request和response 2 一些问题爬虫能抓取什么样的数据?抓取的数据怎么提取部分内容?数据解析方式。为什么我爬虫抓取的数据和浏览器看到的不一样怎样解决JavaScript渲染的…

数字档案安全与高效管理的先锋——亚信安慧AntDB数据库

档案工作在维护历史真实面貌、保障人民利益方面具有至关重要的作用。随着社会的发展,数字化转型成为档案管理领域的不可逆趋势。数字档案的存储和传输已经成为档案工作的重要组成部分,然而,这也伴随着一系列的挑战,其中安全风险是…

window11后台服务优化记录

这里:\WINDOWS\xxx\svchost.exe -k netsvcs -p 信号聚合器服务,用于根据时间、网络、地理位置、蓝牙和 CDF 因素评估信号。支持的功能包括设备解锁、动态锁定和动态 MDM 策略 参考: 优化参考v1

时间差异导致数据缺失,如何调整Grafana时间与Prometheus保持同步?

Grafana时间如何调快或调慢? 在k8s环境中,常使用prometheusgrafana做监控组件,prometheus负责采集、存储数据,grafana负责监控数据的可视化。 在实际的使用中,有时会遇到这样的问题,k8s集群中的时间比真实…

Zabbix6.4 监控系统 密码忘记怎么办

Zabbix6.4 监控系统 密码忘记怎么办? 如下图 本次主要介绍在Zabbix6.4中重置用户密码的步骤。 步骤 如果您忘记了Zabbix密码并且无法登录,请向Zabbix管理员求助。 超级管理员用户可以在用户配置表单中更改所有用户的密码。 如果超级用户忘记了密码&a…

C++指针小练习

双色球统计1-33个数字出现的次数(很详细) 做这个题一定要注意审题:题目要求是统计1-33个数字出现的次数,而不是前六个数字出现的次数 算法设计: ①:用一个数组p1来保存每一行的数据,再用一个数组p2来遍历1-33个数字,因为是要统计这33个数字出现的次数所以将数组初始化为0, ②…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑦

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷7 目录 需要竞赛软件包环境以及备赛资源可私信博主!!! 2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷7 模块一 …

建模软件Rhinoceros mac介绍说明

Rhinoceros mac是一款3D设计软件“犀牛”,在当今众多三维建模软件中,Rhinoceros 版因为其体积小、功能强大、对硬件要求低而广受欢迎,对于专业的3D设计人员来说它是一款不错的3D建模软件,Rhinoceros Mac中文版能轻易整合3DS MAX与…

关于对象存储的若干事

引言 最近在阅读鸣嵩的一篇文章,数据库的下一场革命:S3 延迟已降至原先的 10%,云数据库架构该进化了 收获很多,过去时间也基于对象存储做过一些功能实现,特记录下。关于鸣嵩: 曹伟,花名鸣嵩&am…

Python爬虫—requests模块简单应用

Python爬虫—requests模块简介 requests的作用与安装 作用:发送网络请求,返回响应数据 安装:pip install requests requests模块发送简单的get请求、获取响应 需求:通过requests向百度首页发送请求,获取百度首页的…

2023 年度总结—总结我今年的AI之路-多项目实战经验谈AI发展前景

各位好,我是难忘,对人工智能方向有所研究,今年一年除了开发了几个软件项目之外的时间,基本都用到了学习研究AI上,最近几个月也是产出了几款AI领域的爆火文章,也把自己学习AI的笔记写了一个专栏,…

共融共生:智慧城市与智慧乡村的协调发展之路

随着科技的飞速发展和全球化的不断深入,智慧城市和智慧乡村作为现代社会发展的重要组成部分,正逐渐成为人们关注的焦点。然而,在追求经济发展的过程中,城乡发展不平衡的问题也日益凸显。因此,如何实现智慧城市与智慧乡…

FAST OS DOCKER 可视化Docker管理工具

介绍 FAST OS DOCKER 界面直观、简洁,非常适合新手使用,方便大家轻松上手 docker部署运行各类有趣的容器应用,同时 FAST OS DOCKER 为防止服务器负载过高,进行了底层性能优化;其以服务器安全为基础,对其进…

基于elementUI的el-table组件实现按住某一行数据上下滑动选中/选择或取消选中/选择鼠标经过的行

实现代码 <template><div :class"$options.name"><el-tablestyle"user-select: none"ref"table":data"tableData":row-class-name"row_class_name"mousedown.native"mousedownTable"row-click&q…

【微服务】日志搜集es+kibana+filebeat+redis+logstash(单机)

日志搜集系统搭建 基于7.17.16版本 ps: 项目是toB的&#xff0c;日志量不大 前置准备 软件下载 7.17.16版本。8.x版本需要JDK11 elastic.co/downloads/past-releasesJDK java8 Linux elastic 软件不能以root用户启动&#xff0c;需要创建用户 sudo useradd elastic #给此…

leaflet学习笔记-贝塞尔曲线绘制(八)

前言 两点之间的连线是很常见的&#xff0c;但是都是直直的一条线段&#xff0c;为了使连线更加平滑&#xff0c;我们可以使用曲线进行连线&#xff0c;本功能考虑使用贝塞尔曲线进行连线绘制&#xff0c;最后将线段的两端节点连接&#xff0c;返回一个polygon。 贝塞尔简介 …