Kubernetes-持久卷(PV、PVC)

目录

1.概念

(1)PersistentVolume(PV)

(2)PersistentVolumeClaim(PVC)

(3)静态PV和动态PV

(4)绑定

2.持久化卷PV声名保护

3.持久化卷PV的类型

4.持久卷PV的yaml文件详解

5.PV的访问模式

6.PV回收策略

7.PV的状态

8.PV和PVC创建实验

(1)安装nfs服务

(2)nfs服务端配置

(3)创建PV

(4)创建StatefulSet和PVC

(5)访问测试


1.概念

(1)PersistentVolume(PV)

       是由管理员设置的存储,它是群集的一部分。就像节点是集群中的资源一样,PV 也是集群中的资源。 PV 是 Volume 之类的卷插件,但具有独立于使用 PV 的 Pod 的生命周期。此 API 对象包含存储实现的细节,即 NFS、iSCSI 或特定于云供应商的存储系统。

(2)PersistentVolumeClaim(PVC)

       是用户存储的请求。它与 Pod 相似。Pod 消耗节点资源,PVC 消耗 PV 资源。Pod 可以请求特定级别的资源(CPU 和内存)。声明可以请求特定的大小和访问模式(例如,可以以读/写一次或 只读多次模式挂载)

(3)静态PV和动态PV

静态PV:

    集群管理员创建一些 PV。它们带有可供群集用户使用的实际存储的细节。它们存在于 Kubernetes API 中,可用于消费

动态PV:

        当管理员创建的静态 PV 都不匹配用户的 PersistentVolumeClaim 时,集群可能会尝试动态地为 PVC 创建卷。此配置基于 StorageClasses:PVC 必须请求 [存储类],并且管理员必须创建并配置该类才能进行动态创建。声明该类为 "" 可以有效地禁用其动态配置

    要启用基于存储级别的动态存储配置,集群管理员需要启用 API server 上的 DefaultStorageClass  [准入控制器] 。例如,通过确保 DefaultStorageClass 位于 API server 组件的 --admission-control 标志,使用逗号分隔的有序值列表中,可以完成此操作

(4)绑定

       master 中的控制环路监视新的 PVC,寻找匹配的 PV(如果可能),并将它们绑定在一起。如果为新的 PVC 动态调配 PV,则该环路将始终将该 PV 绑定到 PVC。否则,用户总会得到他们所请求的存储,但是容量可能超出要求的数量。一旦 PV 和 PVC 绑定后,`PersistentVolumeClaim` 绑定是排他性的,不管它们是如何绑定的。 PVC 跟 PV 绑定是一对一的映射。

2.持久化卷PV声名保护

       PVC 保护的目的是确保由 pod 正在使用的 PVC 不会从系统中移除,因为如果被移除的话可能会导致数据丢失。

<!--注意:当 pod 状态为 `Pending` 并且 pod 已经分配给节点或 pod 为 `Running` 状态时,PVC 处于活动状态-->

       当启用PVC 保护 alpha 功能时,如果用户删除了一个 pod 正在使用的 PVC,则该 PVC 不会被立即删除。PVC 的删除将被推迟,直到 PVC 不再被任何 pod 使用。

3.持久化卷PV的类型

PersistentVolume 类型以插件形式实现。Kubernetes 目前支持以下插件类型:

(1)GCEPersistentDisk      AWSElasticBlockStore        AzureFile         AzureDisk        FC (Fibre Channel)

(2)FlexVolume        Flocker      NFS           iSCSI          RBD (Ceph Block Device)             CephFS

(3)Cinder (OpenStack block storage)      Glusterfs           VsphereVolume         Quobyte Volumes

(4)HostPath        VMware Photon        ortworx Volumes        ScaleIO Volumes        StorageOS

4.持久卷PV的yaml文件详解

apiVersion: v1
kind: PersistentVolume	#资源对象类别为持久卷
metadata:name: pv0003		#当前pvc的名字为pv0003
spec:capacity:		#容量storage: 5Gi	#存储空间为5GIvolumeMode: Filesystem		#卷的模式,模拟的文件系统类型accessModes:		#返回模式- ReadWriteOnce	#单节点读写persistentVolumeReclaimPolicy: Recycle	#回收的策略storageClassName: slow		#存储类的名字,后面写一个字符串,叫什么没有意义,看公司怎么定义mountOptions:		#挂载的选项- hard- nfsvers=4.1		#nfs的版本nfs:		#使用nfs创建的pvpath: /tmp		#服务器的共享路径在/tmp下server: 172.17.0.2	#服务器的地址是172.17.0.2

5.PV的访问模式

       PersistentVolume可以以资源提供者支持的任何方式挂载到主机上。如下表所示,供应商具有不同的功能,每个 PV 的访问模式都将被设置为该卷支持的特定模式。例如,NFS 可以支持多个读/写客户端,但特定的 NFS PV 可能以只读方式导出到服务器上。每个 PV 都有一套自己的用来描述特定功能的访问模式

         ReadWriteOnce——该卷可以被单个节点以读/写模式挂载

         ReadOnlyMany——该卷可以被多个节点以只读模式挂载

         ReadWriteMany——该卷可以被多个节点以读/写模式挂载

在命令行中,访问模式缩写为:

         RWO - ReadWriteOnce

         ROX - ReadOnlyMany

         RWX - ReadWriteMany

<!--!一个卷一次只能使用一种访问模式挂载,即使它支持很多访问模式。例如,GCEPersistentDisk 可以由单个节点作为 ReadWriteOnce 模式挂载,或由多个节点以 ReadOnlyMany 模式挂载,但不能同时挂载-->

Volume 插件

ReadWriteOnce

ReadOnlyMany

ReadWriteMany

AWSElasticBlockStoreAWSElasticBlockStore

-

-

AzureFile

AzureDisk

-

-

CephFS

Cinder

-

-

FC

-

FlexVolume

-

Flocker

-

-

GCEPersistentDisk

-

Glusterfs

HostPath

-

-

iSCSI

-

PhotonPersistentDisk

-

-

Quobyte

NFS

RBD

-

VsphereVolume

-

- (当 pod 并列时有效)

PortworxVolume

-

ScaleIO

-

StorageOS

-

-

6.PV回收策略

(1)Retain(保留)——手动回收

(2)Recycle(回收)——基本擦除(`rm -rf /thevolume/*`)

(3)Delete(删除)——关联的存储资产(例如 AWS EBS、GCE PD、Azure Disk 和 OpenStack Cinder 卷)将被删除.

当前,只有 NFS 和 HostPath 支持回收策略。AWS EBS(持久存储)、GCE PD(持久化存储)、Azure Disk (亚马逊云的块存储)和 Cinder 卷(openstack的卷)支持删除策略。(都是由云服务器提供的)。

7.PV的状态

卷可以处于以下的某种状态:

(1)Available(可用)——一块空闲资源还没有被任何声明绑定

(2)Bound(已绑定)——卷已经被声明绑定

(3)Released(已释放)——声明被删除,但是资源还未被集群重新声明

(4)Failed(失败)——该卷的自动回收失败

命令行会显示绑定到 PV 的 PVC 的名称。

8.PV和PVC创建实验

(1)安装nfs服务

 yum install -y nfs-common nfs-utils  rpcbind#所有K8S节点安装nfs服务

(2)nfs服务端配置

mkdir /nfsdata && cd /nfsdata/ && mkdir {1..10}#nfs服务端创建共享目录echo "1" >> 1/index.html
echo "2" >> 2/index.html
echo "3" >> 3/index.html
echo "4" >> 4/index.html
echo "5" >> 5/index.html
echo "6" >> 6/index.html
echo "7" >> 7/index.html#在共享目录下创建共享文件chown nfsnobody /nfsdata -R#将共享目录的所有者改为nfsnobodyvim /etc/exports#配置nfs允许客户端连接的权限/nfsdata/1 *(rw,no_root_squash,no_all_squash,sync)	#代表所有客户端都可以访问/nfsdata/2 *(rw,no_root_squash,no_all_squash,sync)/nfsdata/3 *(rw,no_root_squash,no_all_squash,sync)/nfsdata/4 *(rw,no_root_squash,no_all_squash,sync)/nfsdata/5 *(rw,no_root_squash,no_all_squash,sync)/nfsdata/6 *(rw,no_root_squash,no_all_squash,sync)/nfsdata/7 *(rw,no_root_squash,no_all_squash,sync)/nfsdata/8 *(rw,no_root_squash,no_all_squash,sync)/nfsdata/9 *(rw,no_root_squash,no_all_squash,sync)/nfsdata/10 *(rw,no_root_squash,no_all_squash,sync)chmod 777 -R /nfsdata/#实验环境给777权限的原因是为了后面让容器内的用户调用共享目录时有权限连接,真实生产环境这里不应该给777,要么把docker里面的用户改成root,要么在这里映射一个虚拟用户为docker里的用户,两边用的权限得对上,要不然没权限。systemctl start rpcbind#先启动rpcbindsystemctl start nfs#在启动nfs服务showmount -e 192.168.159.81#服务端IP,查看nfs服务的共享目录情况。

(3)创建PV

k8s的master节点配置yaml文件创建PV
vim pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: nfspv1
spec:capacity:storage: 2GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: nfsnfs:path: /nfsdata/1server: 192.168.159.81
---
apiVersion: v1
kind: PersistentVolume
metadata:name: nfspv2
spec:capacity:storage: 3GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: nfsnfs:path: /nfsdata/2server: 192.168.159.81
---
apiVersion: v1
kind: PersistentVolume
metadata:name: nfspv3
spec:capacity:storage: 2GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: nfsnfs:path: /nfsdata/3server: 192.168.159.81
---
apiVersion: v1
kind: PersistentVolume
metadata:name: nfspv4
spec:capacity:storage: 2GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RetainstorageClassName: nfsnfs:path: /nfsdata/4server: 192.168.159.81
---
apiVersion: v1
kind: PersistentVolume
metadata:name: nfspv5
spec:capacity:storage: 2GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: nfs1nfs:path: /nfsdata/5server: 192.168.159.81
---
apiVersion: v1
kind: PersistentVolume
metadata:name: nfspv6
spec:capacity:storage: 2GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: nfsnfs:path: /nfsdata/6server: 192.168.159.81kubectl apply -f 1.pv.yaml#基于yaml文件创建pvkubectl get pv#查看创建的pv

(4)创建StatefulSet和PVC

vim statefulset-pvc.yamlapiVersion: v1
kind: Service
metadata:name: nginxlabels:app: nginx
spec:ports:- port: 80name: webclusterIP: Noneselector:app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:selector:matchLabels:app: nginxserviceName: "nginx"replicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentports:- containerPort: 80name: webvolumeMounts:- name: wwwmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: wwwspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "nfs"resources:requests:storage: 2Gikubectl apply -f statefulset-pvc.yaml#基于yaml文件创建statefulsetkubectl get podkubectl get pvc

(5)访问测试

kubectl get pod -o wide#查看pod的IP地址curl 172.20.0.222#访问pod的ip测试

kubectl delete pod web-1#删除pod,删除后statefulset控制器会再拉起一个podkubectl get pod -o wide#查看新pod的ip地址curl 172.20.0.223#访问测试,pod重拉后,数据不变。实现持久化存储的功能。#数据不变,稳定的存储,pod是跟pvc绑定的,pvc是跟pod名绑定的,名字不变,创建一个新的,还是会保持这个pvc,这个pvc后面还是哪个pv,所以数据不变。

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

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

相关文章

【Linux】nc 网络诊断 | 文件传输 命令详解

目录 一、命令简介 二、命令使用 2.1 测试服务器 2.2 端口连通性测试 2.2.1tcp端口连通性测试 2.2.2udp端口连通性测试 2.3 文件及目录的传输 2.3.1 文件传输(TCP端口) 2.3.2 文件传输(UDP端口) 相关文章&#xff1a; 【网络】抓包工具Wireshark下载安装和基本使用教…

Vue3前端开发,如何获取组件内dom对象以及子组件的属性和方法

Vue3前端开发,借助Ref来获取组件内dom对象&#xff0c;借助defineExpose编译宏可以获取到子组件的属性和方法。 <script setup> import {onMounted, ref} from vue import Base from ./components/Base.vue import SetupDemo from ./components/SetupDemo.vue import Rea…

手把手教你如何搭建性能测试环境

前言 在进行性能则试前&#xff0c;需要完成性能测试的搭建工作&#xff0c;一般包括硬件环境、软件环境及网络环境&#xff0c;可以要求配置和开发工程师协助完成&#xff0c;但是作为一个优秀性能测试工程师&#xff0c;这也是你的必备技能之一。 性能测试环境与功能测试环…

1、中级机器学习课程简介

文章目录 1、课程简介2、先决条件 本课程所需数据集夸克网盘下载链接&#xff1a;https://pan.quark.cn/s/9b4e9a1246b2 提取码&#xff1a;uDzP 1、课程简介 欢迎来到机器学习中级课程&#xff01; 如果你对机器学习有一些基础&#xff0c;并且希望学习如何快速提高模型质量…

10w 字前端技术文档分析

在 2023 年 11 月份&#xff0c;有小伙伴跟我说前端学习得很迷茫&#xff0c;不知道该学什么&#xff0c;也不知道已经学过的学得怎么样&#xff0c;于是&#xff0c;我立即萌生了一种想法&#xff0c;我要写一份前端文档&#xff0c;既可以帮助我自己查漏补缺&#xff0c;也可…

day25 组合总和Ⅲ 电话号码的字母组合

题目1&#xff1a;216 组合总和Ⅲ 题目链接&#xff1a;216 组合总和Ⅲ 题意 找出相加之和为n的k个数的组合 数字只可使用1~9之间的数&#xff08;包括 1 9&#xff09;且每个数字只能使用1遍 题目中有两个限制条件&#xff1a;1&#xff09;k个数 2&#xff09;k个…

Pandas.DataFrame.count() 非空单元格计数 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.1.2 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 Pandas稳定版更新及变动内容整合专题&#xff1a; Pandas稳定版更新及变动迭持续更新。 Pandas API参…

Ansys Zemax | 如何使用光学制造全息图修正像差

附件下载 联系工作人员获取附件 本文介绍了利用光学全息图降低单透镜像差的方法。在描述了表示全息图构造光束的两个 ZMX 文件之后&#xff0c;本文演示了如何在重现文件中设置 OFH。然后解释了如何轻松地从重现文件中访问任何结构造光束变量&#xff0c;以实现衍射受限单透镜…

【数据结构】常见八大排序算法总结

目录 前言 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 6.1Hoare版本 6.2挖坑法 6.3前后指针法 6.4快速排序的递归实现 6.5快速排序的非递归实现 7.归并排序 8.计数排序&#xff08;非比较排序&#xff09; 9.补充:基数排序 10.总结…

第八讲_ArkTS装饰器(五)

ArkTS装饰器&#xff08;五&#xff09; 1. Watch装饰器1.1 Watch装饰器的特点1.2 Watch装饰器使用示例 2. ArkTS装饰器总结 1. Watch装饰器 Watch用于对状态变量的监听。如果需要关注某个状态变量的值是否改变&#xff0c;可以使用Watch为状态变量设置回调函数。 何为状态变…

产品经理学习-用户运营和用户分层模型

目录什么是用户运营用户运营三大工作体系用户分层模型-AARRR介绍 什么是用户运营 定义&#xff1a;用户运营就是搭建用户运营体系&#xff0c;围绕用户来做一系列的产品运营机制&#xff0c;提升太湖的活跃和留存&#xff0c;最终让用户进行付费。 例如小红书就是建立了用户…

C++进阶--哈希表的的闭散列和开散列(哈希桶)实现

哈希表的的闭散列和开散列&#xff08;哈希桶&#xff09;实现 一、哈希概念二、哈希冲突三、哈希函数3.1 直接定址法--&#xff08;常用&#xff09;3.2 除留余数法--&#xff08;常用&#xff09;3.3 平方取中法--&#xff08;了解&#xff09;3.4 折叠法--&#xff08;了解&…