动态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------完成。

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

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

相关文章

【入门】字符串对比(UPC)

题目描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到100之间),它们之间的关系是以下4种情况之一: 1:两个字符串长度不等。比如 Beijing 和 Hebei 2:两个字符串不仅长度相等,而且相应位置上的字符完…

x-cmd pkg | tsx - Node.js 的直接替代品

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 tsx 代表 “TypeScript execute”,由 TypeScript 编写,内部使用由 Go 语言编写的 esbuild 核心二进制实现超快的 TypeScript 编译,旨在增强 Node.js 以无缝运行 TypeScript / ESM /…

Golang的API项目快速开始

开启一个简单的API服务。 golang的教程网上一大堆,官网也有非常详细的教程,这里不在赘述这些基础语法教程,我们意在快速进入项目开发阶段。 golang好用语法教程传送门: m.runoob.com/go/ 编写第一个API 前提:按照上一…

3.3 设计模式基础

设计模式的识别:经验丰富的开发者经常会发现,新问题往往与他们之前所遇到的问题存在相似之处,虽然这些问题和解决方案可能各不相同。正是这些问题之间的共性催生了设计模式的概念:将对类似问题解决方案的理解泛化和形式化。 模式…

17. 从零用Rust编写正反向代理, Rust中一些功能的实现

wmproxy wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现过程分享出来&#xff…

vite前端工具链,为开发提供极速响应

一、概念 Vite是一个高性能的分布式智能合约平台。它使用了一种名为“异步架构”的设计,能够支持高吞吐量和低延迟的交易处理。Vite采用了基于DAG(有向无环图)的账本结构,可以实现并行处理多个交易,并且具有快速确认的…

【Golang】十六进制字符串转二进制字符串

使用Go语言将十六进制转换为二进制 在计算机科学中,我们经常需要在不同进制的数字之间进行转换。Go语言提供了一系列的标准库来方便我们进行这些进制转换。本文将介绍如何使用Go语言将十六进制字符串转换为二进制字符串。 函数概述 首先,我们定义一个…

[Oracle][详细] Win完全卸载Oracle

前提准备 进入服务 找到Oracle开头的服务 将这些服务全部停止 Top 1 点击开始菜单找到Oracle,然后点击Oracle安装产品,再点击【Universal Installer】 Top 2 点击之后稍等一会然后会进入进入下图界面,点击卸载产品 Top 3 选中要删除的Oracle产品,然后点击【删除】 Top 4 进…

性能监控软件选择攻略

随着企业对应用程序性能的关注度不断增加,选择适当的性能监控软件变得至关重要。性能监控软件能够帮助企业实时追踪应用程序的性能指标,识别潜在问题并提高系统的稳定性。在选择性能监控软件时,以下攻略将有助于确保您的选择符合业务需求并能…

SpringIOC之support模块GenericApplicationContext

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

鸿蒙开发笔记(一):ArkTS概述及声明式UI的使用

ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。 ArkTS在TS的基础上主要扩展了如下能力: 基本语法:ArkTS定义…

Docker实战06|深入剖析Docker Run命令

前几篇文章中,重点讲解了Linux Namespace、Cgroups、AUFS的核心原理,同样也是Docker的底层原理实现。目录如下: • 《Docker实战01|容器与开发语言》 • 《Docker实战02|Namespace》 • 《Docker实战03|C…

软件测试公式之如何高质量的做BUG分析?

对于BUG分析,测试人员再熟悉不过了。但如果是面对大量的BUG,要如何有效的分析呢?有什么好的方案和行动项?今天聊聊这个话题。 01 BUG分析简单可以分为两类:宏观BUG分析 和 微观BUG分析。 宏观BUG分析:在…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例3-5 CSS3 动画

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>CSS3 动画</title> <style> .img {width: 150px; } keyframes rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg);} } img…

【C++】入门与过渡

【C】入门与过渡 文章目录 【C】入门与过渡一、命名空间二、输入输出(cin/cout)三、缺省参数四、函数重载五、引用作用使用注指针和引用的区别 六、内联函数七、auto关键字八、空指针 注&#xff1a;本文为学习笔记&#xff0c;只记录了一些重点&#xff0c;有些比较简单的内容…

使用boost.hana在编译期加密字符串

在当今数字时代&#xff0c;软件安全问题愈发凸显&#xff0c;攻击者利用各种手段对应用程序进行破解和逆向工程的尝试也日益猖獗。其中&#xff0c;通过使用OllyDbg、IDA等软件加载应用程序&#xff0c;分析程序中的字符串&#xff0c;进而找到关键条件判断&#xff0c;实施软…

【python】进阶--->MySQL数据库(一)

一、mysql数据库 关系型数据库 &#xff1a; 一些相关的表和其他数据库对象的集合。 表是由行和列组成。列包含一组命名的属性(也称为字段)。 行包含一组记录&#xff0c;行和列的交集称为数据项(也叫字段值)。 数据库(database) : 存储数据的仓库&#xff0c;本质上就是一个文…

《C++ Primer》第14章 重载运算与类型转换(二)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 14.8 函数调用运算符&#xff08;P506&#xff09; 如果类重载了函数调用运算符&#xff0c;则我们可以像使用函数一样使用该类的对象。这样的类同时也能存储状态&#xff0c;所以它们比普通函数更加灵活。…

x-cmd pkg | czg - git commit 智能生成工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 czg 源于 commitizen/cz-cli 交互插件中 cz-git 的延伸项目&#xff0c;重新使用 TypeScript 编写的零依赖独立的 Node.js 命令行工具。旨在使用交互友好的方式&#xff0c;辅助用户生成规范的 git commit message 约…

游泳耳机哪种款式好?最值得入手的游泳耳机大全

在如今注重健康和娱乐的生活方式中&#xff0c;游泳作为一项全身性的运动备受欢迎。然而&#xff0c;对于热爱水中活动的人们来说&#xff0c;选择一款出色的游泳耳机至关重要。好的游泳耳机不仅能提供清晰的音质&#xff0c;还能有效防水&#xff0c;让您在水中尽情畅游的同时…