动态pv策略和组件

pv和pvc,存储卷:

存储卷:

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

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

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

pv和pvc:

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

pv:持久化存储的目录,ReadWriteMany

                                        ReadOnlyMany

                                        ReadWriteOnce

NFS可以支持三种方式

hostPath 只支持ReadWriteOnce

ISCSI  不支持ReadWirteMany

pv的回收策略:

                         Retain    released 需要人工设置,调整回Avaliable

                         Recycle  回收,自动调整回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-client-provisioner卷插件。

准备共享目录

rpcbind

到其他节点查看

回到master节点

serviceAccount:

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

rbac:Role based ACCESS CONTROL

定义角色在集群中可以使用的资源

查看ServiceAccount的格式

创建 Service Account,用来管理 NFS Provisioner 在 k8s 集群中运行的权限,

设置 nfs-client 对 PV,PVC,StorageClass 等的规则

vim nfs-client-rbac.yaml
#创建 Service Account 账户,用来管理 NFS Provisioner 在 k8s 集群中运行的权限
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---

#创建集群角色
kubectl explain ClusterRole  
#查看Kubernetes RBAC(Role-Based Access Control)的 ClusterRole 配置,
命名为 nfs-client-provisioner-clusterrole。这个 ClusterRole 定义了一组权限规则,
允许一个特定的服务账户(通常是用于 NFS 客户端 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"]

#表示获取权限的动作:获取资源,获取资源列表,监听API,创建,删除pv的信息


  - 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"]
---

#集群角色绑定 kubectl explain ClusterRoleBinding 查看字段详情


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

查看apiversion的信息

查看如何绑定角色和权限

kubectl apply -f nfs-client-rbac.yaml

apiVersion 和 kind:
apiVersion: rbac.authorization.k8s.io/v1: 表示这是 RBAC API 的版本。

kind: ClusterRole: 表示这是一个 ClusterRole,即集群级别的角色。

metadata:
name: nfs-client-provisioner-clusterrole: 给这个 ClusterRole 起一个名字,方便在集群中引用。

rules:
这是权限规则的列表,定义了该角色拥有的权限。
每个规则(rule)的结构如下:
apiGroups: 定义这个规则适用的 API 组。在这里,使用了空字符串 "" 表示核心 API 组。

resources: 定义了这个规则适用的资源类型。例如,persistentvolumes 表示持久卷,
persistentvolumeclaims 表示持久卷声明,storageclasses 表示存储类,
events 表示事件,
endpoints 表示服务的终结点。
verbs: 定义了这个规则允许的操作,
如 get(获取资源信息)、list(列出资源列表)、
watch(监视资源变化)、create(创建资源)、delete(删除资源)等。

核心 API 组通常是默认的 API 组,无需额外的路径前缀

通过这个 ClusterRoleBinding,服务账户 nfs-client-provisioner 将被
授予 ClusterRole nfs-client-provisioner-clusterrole 中定义的一组权限,
使其能够执行与持久卷、持久卷声明、存储类、事件和服务终结点相关的操作。
 

角色 权限都已经创建完毕

部署插件:

NFS-privisioner。deployment来创建插件  pod

1.20之后有一个新的机制

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

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

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

feature-gates=RemoveSelfLink=false

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

禁用不影响之前的规则。

部署nfs-provisioner的插件:

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

于NFS服务器相关的pv。

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

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

spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=RemoveSelfLink=false       #添加这一行
    - --advertise-address=192.168.233.91

Feature Gate 提供了一种在不破坏现有功能的基础上引入新功能或修改现有功能的机制。
通过在 API Server 启动时设置 Feature Gate 选项,可以在集群中启用或禁用特定功能。

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: nfs-provisioner

  labels:

    app: nfs1

spec:

  replicas: 1

  selector:

    matchLabels:

      app: nfs1

  template:

    metadata:

      labels:

        app: nfs1

  spec:

    serviceAccountName: nfs-client-provisioner

    containers:

      - name: nfs1

        image: quay,io/external_storage/nfs-client-provisioner;latest

        volumeMounts:

        - name: nfs

          mountPath: /persistentvolumes

        env:

          - name: PROVISIONER_NAME

            value: nfs-storage

#配置provisioner的账户名称,要和storageclass的资源名称一致

          - name: NFS_SERVER

#指的是nfs共享服务器的地址

            value: 192.168.233.94

          - name: nfs

            nfs:

              server: 192.168.233.94

              path: /opt/k8s

vim stroageclass.yaml

apiVersion: storage.k8s.io/v1

kind: StorageClass

metadata:

  name: nfs-client-storageclass

#匹配provisioner:  nfs-storage

parameters:

  archiveOnDeleate: "false"

#pvc被删除之后,pv的状态,定义的是false,pvc被删除,pv的状态将是released,可以人工调整,继续使用

#如果是true,pv的将是Archived,表示pv不再可用

reclaimPolicy:  Retain

#定义pv的回收策略,retain,另一个是delete。不支持回收

allowvolumeExpansion: true

#表示pv的存储空间可以动态的扩缩容。

kubectl apply -f nfs-client

provisioner的作用,创建pv

kubectl get storageclass.storage.k8s.io

name:storageclass的名称

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

RECLAIMPOLICY:回收策略,保留

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

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

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

10:55

kubectl expalain pvc

定义pvc

vim pvc-pod.yaml

apiversion:v1

kind:PersistentVolumeClaim

metadata:

  name: nfs-pvc

spec:

  accessModes:

    - ReadWriteMany

  storageClassName: nfs-client-storageclass

  resources:

    requests:

      storage: 2Gi

#创建一个pvc,名称为nfs-pvc,使用的pv属性是nfs-client-storageclass定义的属性,创建的pv的大小是2G

---

apiVersion:apps/v1

kind:Deployment

metadata:

  name: nginx1

spec:

  replicas: 1

  selector:

    matchLabels:

      app: nginx

  template:

    matadata:

      labels:

        app: nginx1

      spec:

        containers:

        - name: nginx1

          image: nginx:1.22

          volumeMounts:

          - name: html

            mountPath: /usr/share/nginx/html

        volumes:

        - name: html

          persistentVolumeClaim:

            claimName: nfs-pvc

到共享目录上写入信息

回到master查看情况

vim test1.yaml

删除字段

查看

重新apply,查看一下,又可以继续使用

 

修改回复策略:

改为Recycle,试试是否支持

发现只支持保留和删除策略

改为删除策略:

创建

查看,然后删除,查看状态

变为不可用状态,然后重新创建一下,用的就是删除的策略

查看

删除pvc查看一下状态

pv的共享目录也被删除

动态pv的默认策略是删除。delete

不加默认就是delete

注:一定要先删除原来的storageclass再重新创建

查看,发现动态的默认策略是delete

总结:动态pv

provisioner插件------支持nfs,创建pv目录

storageclass:定义pv的属性

动态pv的默认策略是删除(重要)

动态pv删除pvc之后的状态,最好调整为released

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

2、创建卷插件pod,卷插件的pod创建pv

3、storageclass:给pv赋予属性(pvc被删除之后pv的状态,以及回收策略)

4、创建pvc------完成。

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

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

相关文章

centos7下升级openssh9.4p1及openssl1.1.1v版本

背景:客户服务器扫描出一些漏洞,发现和版本有关,漏洞最高的版本是9.3p2,所以我们安装一个openssh9.4p1版本及openssl1.1.1v版本 虽然我们进行了镜像备份,为了安全先安装telnet以防止升级失败无法通过ssh连接服务器 一…

大模型在广告ctr预估中的应用

背景 预训练大模型在ctr预估方面取得了不错的效果,但是应用大模型方面还主要停留在提取离线预训练,然后使用大模型的打分结果或者中间的embedding向量,这种级联的应用方式相对灵活方便。但是这种使用大模型提取特征的方式存在自身的问题&…

无法解析的外部符号 “public: virtual void * __cdecl MyTcpsocket::qt_metaca

问题:严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2001 无法解析的外部符号 "public: virtual void * __cdecl MyTcpsocket::qt_metacast(char const *)" (?qt_metacastMyTcpsocketUEAAPEAXPEBDZ) SmartTool D:\…

[软件工具]pdf多区域OCR识别导出excel工具使用教程

首先我们打开软件,界面如下: 如上图,使用非常简单,步骤如下: (1)选择工具-取模板选择一个pdf文件划定自己需要识别的区域,如果你选择第2页指定区域则软件统一识别所有pdf第2页指定区…

鸿蒙基础开发实战-(ArkTS)像素转换

像素单位转换API的使用 主要功能包括: 展示了不同像素单位的使用。展示了像素单位转换相关API的使用。 像素单位介绍页面 在像素单位介绍页面,介绍了系统像素单位的概念,并在页面中为Text组件的宽度属性设置不同的像素单位,fp…

AI副业拆解:文字生成图文绘本,赋予你的故事生命,Story Agent智能绘本创作神器震撼登场!

大家好我是在看,记录普通人学习探索AI之路。 对话即创作,颠覆传统!🚀 Story Agent,一款前所未有的开源故事绘本生成智能体,让你与科技的边界交融,以对话的形式轻松唤醒内心深处的故事精灵。&…

Object.keys()

目录 1、Object.keys() 是什么? 2、Object.keys(obj) 用法: 2.1 如果对象是一个对象,会返回对象的属性名组成的数组; 2.2 如果对象是一个数组,则返回索引组成的数组: 2.3 如果是字符串,返回…

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

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

【Redis】Redis持久化方式

Redis 中有两种持久化方式,分别为 RDB 和 AOF。 RDB RDB 全称 Redis Database Backup file,也叫做 Redis 数据快照。简单来说就是把 Redis 中的数据记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。 RDB有…

Vue新手村(二)

目录 1、计算属性 2、事件修饰符 2.1、stop事件修饰符 2.2、prevent事件修饰符 2.3、self事件修饰符 2.4、once事件修饰符 3、按键修饰符 3.1、enter回车键 1、计算属性 计算属性: computed:vue官方提供一个计算属性作用:在完成某种业…

文件上传进阶绕过技巧(一)和靶场实战

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 0、环境准备 请移步《文件上传靶场实战:upl…

【C语言刷题每日一题#牛客网HJ73】——计算日期到天数转换(给定日期,计算是该年的第几天)

目录 问题描述 思路分析 数据结构构建部分 计算部分 代码实现 结果测试 此问题解决方法不唯一,这里介绍的是一种使用数组和循环实现的简单办法 问题描述 思路分析 问题的要求是输入一个日期,计算这是当年的第几天——要解决这个问题,逻…

S7-200SMART实例之冒泡法排序子程序

需求分析 编写程序实现冒泡法排序的算法。 冒泡法排序是一种简单的排序算法。因其过程如同水中气泡最终会上浮到水面一样,故被形象地称为“冒泡法排序”。 实现原理 根据以上需求分析可以按以下步骤实现算法: 1.比较相邻的元素。如果第一个比第二个…

Java面试题之JVM

Java面试题之JVM 1. JVM的组成部分及其作用?2. JVM的堆和栈的区别?3. 简述一下垃圾回收机制?(垃圾回收的原理?)4. 垃圾回收器都有什么?该怎么选择?5. 如何判断垃圾可以回收了?6. 垃圾回收算法有…

c++学习笔记-STL案例-机房预约系统1-准备工作

前言 准备工作包括:需求分析、项目创建、主菜单实现、退出功能实现 目录 1 机房预约系统需求 1.1 简单介绍 1.2 身份介绍 1.3 机房介绍 1.4 申请介绍 1.5 系统具体要求 1.6 预约系统-主界面思维导图 2 创建项目 2.1 创建项目 2.2 添加文件 ​编辑 3 创建…

小程序基础学习(事件处理)

概述&#xff1a;点击某一个标题&#xff0c;使标题选中增加不同颜色。 <!--pages/four/four.wxml--> <navigation-bar title"牧原" back"{{false}}" color"black" background"#FFF"></navigation-bar> <view c…

讲讲关于跨域的问题,什么是跨域?怎么办?

文章目录 什么是跨域如果非同源&#xff0c;共有三种行为受到限浏览器客户端和向服务器跨域请求的判定流程 跨域问题演示参考 以下内容为我结合他人知识进行的自我总结, 如有错误欢迎指出~ 什么是跨域 跨域就是不同的域名下的资源访问&#xff0c;会被浏览器的本地安全策略阻…

CISP-DSG证书含金量分析

CISP-DSG证书的含金量主要体现在以下几个方面&#x1f447; 1️⃣专业知识 CISP-DSG认证要求持有者具备深入的数据an全治理知识&#xff0c;包括数据分类、数据隐私、合规性、风险管理等。&#x1f4d2;这些知识对于处理和保护组织的敏感数据至关重要&#xff0c;因此具有高含金…

ubantu中的docker安装

1.Ubuntu Docker 安装 | 菜鸟教程 (runoob.com) 我就是看这个教程进行操作的 2.执行下面两步&#xff0c;就算是安装完成了 3.启动&#xff0c;并检查是否安装成功&#xff1a; 4.安装之后&#xff0c;怎么用&#xff0c;那就是自己随便探索咯&#xff0c;可以看博客&#xf…

【已解决】c语言编写的lib如何调用

本博文源于笔者在vs2015正在编写的lib想要调用的问题&#xff0c;正常的操作是将项目生成lib&#xff0c;但是然后又如何操作呢&#xff0c;本博文就是解决这样的问题 文章目录 问题再现步骤1&#xff1a;编写lib.h与lib.c步骤2&#xff1a;生成lib步骤3&#xff1a;添加用得到…