K8s---存储卷(动态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-client-Provisioner卷插件。

框架

实验:

master:192.168.10.10

node01:192.168.10.20

node02:192.168.10.30

  1. 创建账号,给卷插件能够在集群内部通信,获取资源,监听事件,创建、删除、更新pv
  2. 创建卷插件pod:卷插件的pod插件pv
  3. storageclass:给pv赋予属性 (pvc被删除之后pv的状态,以及回收策略)
  4. 创建pvc-------完成。

node04:192.168.10.40

mkdir /opt/k8svim /etc/exports
/opt/k8s 192.168.10.0/24(rw,no_root_squash,sync)#注意按先后顺序
systemctl restart rpcbind
systemctl restart nfs#查看暴露的nfs共享文件
showmount -e

master:192.168.10.1

vim nfs-client-rbac.yaml

#创建 Service Account 账户,用来管理 NFS Provisioner 在 k8s 集群中运行的权限
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner
---
#创建集群角色
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: nfs-client-provisioner-role
rules:- apiGroups: [""]
#apigroup定义了规则可以使用哪个api组的权限,空字符""表示直接使用api的核心组的资源。resources: ["persistentvolumes"]verbs: ["get","list","watch","create","delete"]
#表示权限的当中- apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["watch","get","list","update"]
#定义pv属性- apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get","watch","list"]- apiGroups: [""]resources: ["events"]verbs: ["list","create","watch","update","patch"]- apiGroups: [""]resources: ["endpoints"]verbs: ["delete","create","get","watch","update","patch","list"]
---
#集群角色绑定 kubectl explain ClusterRoleBinding 查看字段详情
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: nfs-client-provisioner-bind
subjects:
- kind: ServiceAccountname: nfs-client-provisionernamespace: default
roleRef:kind: ClusterRolename: nfs-client-provisioner-roleapiGroup: rbac.authorization.k8s.io

serviceAccount

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

rbac:Role-bases-access-control   定义角色在集群当中使用的权限

vim nfs-client-provisioner.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-provisionerlabels:app: nfs1
spec:replicas: 1selector:matchLabels:app: nfs1template:metadata:labels:app: nfs1spec:serviceAccountName: nfs-client-provisioner
#指定Service Account账户containers:- name: nfs1image: quay.io/external_storage/nfs-client-provisioner:latestvolumeMounts:- name: nfsmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: nfs-storage
#配置provisioner的账户名称,确保该名称与StorageClass资源中的provisioner名称保持一致- name: NFS_SERVERvalue: 192.168.10.40
#指定的是nfs共享服务器的地址- name: NFS_PATHvalue: /opt/k8s
#配置绑定的nfs服务器目录#声明nfs数据卷volumes:- name: nfsnfs:server: 192.168.10.40 path: /opt/k8s    

1.20之后有一个新的机制

selfLink: AP的资源对象之一,表示资源对象在集群当中自身的一个连接,selflink是一个唯一的表示符号,可以用于标识每一个资源对象

self link的值是一个URL,指向该资源对象的k8sapi的路径,更好的实现资源对象的查找和引用。

kubectl apply -f nfs-client-provisioner.yaml kubectl get pod
NAME                                   READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-cd6ff67-sp8qd   1/1     Running   0          14s

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

......
spec:containers:- command:- kube-apiserver- --feature-gates=RemoveSelfLink=false       #添加这一行- --advertise-address=192.168.10.10
......
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

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: Delete
#定义pv的回收策略,retain,另一个是delete,不支持回收
allowVolumeExpansion: true
#pv的存储空间可以动态扩缩容(仅云平台)。
kubectl apply -f nfs-client-storageclass.yaml [root@master01 auto-volumn]# kubectl get storageclasses.storage.k8s.io 
NAME                      PROVISIONER   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client-storageclass   nfs-storage   Delete          Immediate           true                   114m

vim pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc
spec:accessModes:- ReadWriteManystorageClassName: nfs-client-storageclassresources:requests:storage: 2Gi
#创建一个pvc,名称为nfs-pvc,使用的pv属性是nfs-client-storageclass
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- image: nginx:1.22name: nginx1volumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlpersistentVolumeClaim:claimName: nfs-pvc

kubectl apply -f test-pvc-pod.yaml//PVC 通过 StorageClass 自动申请到空间
kubectl get pvc
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS              AGE
nfs-pvc   Bound    pvc-7dcb826f-dbd8-4abb-8a3f-e4f669a741fd   2Gi        RWX            nfs-client-storageclass   55m

删除

kubectl delete deployments.apps nginx1
kubectl delete pvc nfs-pvc

删除后,如果是Retain,pv可以保留复用

              如果是Delete,pv将会被直接删除

动态pv的默认策略Delete。

总结:

provisioner插件-..--支持nfs

5troageclass: 定义pv的属性

动态pv的默认策略是删除。没有回收

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

  1. 创建账号,给卷插件能够在集群内部通信,获取资源,监听事件,创建、删除、更新pv
  2. 创建卷插件pod:卷插件的pod插件pv
  3. storageclass:给pv赋予属性 (pvc被删除之后pv的状态,以及回收策略)
  4. 创建pvc-------完成。

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

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

相关文章

利用gulp工具对常规web项目进行压缩打包

前言 对于一个常规的web项目,如下项目目录 |- imgs | - img1.png | - img2.png |- js | - user.js | - utils.js |- css | - index.css | - user.css |- html | - user.html |- index.html可以使用各种构建工具(如webpack、gulp、grunt等)来…

话题浏览暴涨558%!从DIY到爆改,小红书数据洞察用户关注焦点

最近走红的“爆改”你们听说了吗?各大社媒平台明星爆改、素人爆改,频上热门。改造风流行的小红书,热度更盛,从DIY到爆改,用户关注焦点是什么?博主和品牌如何讲述“改造”?通过数据分析&#xff…

【Linux】 nohup命令使用

nohup命令 nohup是Linux和Unix系统中的一个命令,其作用是在终端退出时,让进程在后台继续运行。它的全称为“no hang up”,意为“不挂起”。nohup命令可以让你在退出终端或关闭SSH连接后继续运行命令。 nohup 命令,在默认情况下&…

明年评职称,现在就要准备论文了吗?

明年评职称不仅需要提前补好继续教育课时,同样的还需要准备好论文和业绩材料,初级职称的相对来说对论文和业绩要求不高,但是中高级职称业绩和论文的质量代表着你的评审通过率,那为什么需要提前准备好呢?甘建二再给大家…

创建ROS模型与小机器人地图规划

1、打开自己的VM系统 2、安装小机器人的安装包,输入如下命令,回车输入密码(自己设的): sudo apt install ros-noetic-turtlebot3-simulations ros-noetic-turtlebot3-slam ros-noetic-turtlebot3-navigation 提示我之前安装过了 3、用rosla…

17_网络编程

文章目录 网络数据传输的基本原理UDP发送端步骤接收端步骤DatagramSocketDatagramPacket举例版本1:发送端发送消息,接收端接收并打印版本2:创建一个NetworkUtils工具类优化版本1版本3:发送端接收端相互发送版本4:使用多线程 TCP客…

湘鄂赣三省职称互认,这个消息是真的吗?

甘建二今天明确告诉大家,是真的,这个是属实的,就是说湖南、湖北、江西三地职称是互认的。 2022年就有文件出来了,说的就是三省职称互认,具体看文件: 职称原则都是互相认可,通用的,所…

Alphafold2蛋白质结构预测AI工作站配置推荐

AlphaFold2计算特点 蛋白质三维结构预测是一项计算量非常巨大的任务,科学家多年的探索研究,形成了X射线晶体学法、核磁共振法、冷冻电镜等。 2021年底,谷歌的DeepMind团队的采用人工智能方法的AlphaFold2算法在生物界引起了极大的轰动…

18-链表-移除链表元素

这是链表的第18题,力扣链接。 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,…

PHP短链接url还原成长链接

在开发过程中,碰到了需要校验用户回填的短链接是不是系统所需要的,于是就需要还原找出短链接所对应的长链接。 长链接转短链接 在百度上搜索程序员,跳转页面后的url就是一个长链接。当然你可以从任何地方复制一个长链接过来。 长链接 http…

17- Echarts 配置系列之:单轴 singleAxis

singleAxis: 用于展示只有一个数据维度的数据。它通常用于展示时间序列数据或者数值序列数据。 对于单轴的应用和绘制,其实就相当于我们平时的直角坐标系少一个 X 或者 Y ,然后进行图形绘制。 注意: 1.在使用单轴时&#xff0…

Android Firebase (FCM)推送接入

官方文档: 向后台应用发送测试消息 | Firebase Cloud Messaging 1、根级(项目级)Gradlegradle的dependencies中添加: dependencies {...// Add the dependency for the Google services Gradle pluginclasspath com.google.gm…