【云原生 | 从零开始学Kubernetes】二十二、kubernetes持久化存储下

news/2024/5/19 2:26:51/文章来源:https://blog.csdn.net/qq_45400861/article/details/126961159

该篇文章已经被专栏《从零开始学k8s》收录
上一篇文章:kubernetes持久化存储上 点击跳转

在这里插入图片描述

持久化存储下

  • k8s 持久化存储:hostPath
  • k8s 持久化存储:nfs
  • k8s 持久化存储: PVC
    • k8s PV 是什么?
    • k8s PVC 是什么?
    • k8s PVC 和 PV 工作原理
    • 创建 pod,使用 pvc 作为持久化存储卷
  • 写在最后

k8s 持久化存储:hostPath

hostPath Volume 是指 Pod 挂载宿主机上的目录或文件。 hostPath Volume 使得容器可以使用宿主 机的文件系统进行存储,hostpath(宿主机路径):节点级别的存储卷,在 pod 被删除,这个存储卷还是存在的,不会被删除,所以只要同一个 pod 被调度到同一个节点上来,在 pod 被删除重新被调度到这个节点之后,对应的数据依然是存在的。

#查看 hostPath 存储卷的用法 
[root@k8smaster cjh]# kubectl explain pods.spec.volumes.hostPath 
KIND:     Pod
VERSION:  v1RESOURCE: hostPath <Object>DESCRIPTION:HostPath represents a pre-existing file or directory on the host machinethat is directly exposed to the container. This is generally used forsystem agents or other privileged things that are allowed to see the hostmachine. Most containers will NOT need this. More info:https://kubernetes.io/docs/concepts/storage/volumes#hostpathRepresents a host path mapped into a pod. Host path volumes do not supportownership management or SELinux relabeling.FIELDS: path <string> -required- type <string> node1和2下载tomcat#创建一个 pod,挂载 hostPath 存储卷 
[root@k8smaster cjh]# vim hostpath.yaml 
apiVersion: v1
kind: Pod 
metadata: name: test-hostpath
spec: containers:- image: nginximagePullPolicy: IfNotPresentname: test-nginxvolumeMounts:- mountPath: /test-nginx name: test-volume- image: tomcatimagePullPolicy: IfNotPresentname: test-tomcat  volumeMounts:- mountPath: /test-tomcatname: test-volumevolumes: - name: test-volume 			  hostPath:path: /data1					#宿主机的目录 根下的data1type: DirectoryOrCreate		# DirectoryOrCreate 表示本地有/data1 目录,就用本地的,本地没有就会在 pod 调度到的节点自动创建一个 
#更新资源清单文件 
[root@k8smaster cjh]# kubectl apply -f hostpath.yaml 
pod/test-hostpath created#查看 pod 调度到了哪个物理节点 
[root@k8smaster cjh]# kubectl get pods -o wide | grep hostpath 
test-hostpath           2/2     Running   0          31s   10.244.2.8   k8snode    <none>           <none>#由上面可以知道 pod 调度到了 node1 上,登录到 node1 机器,查看是否在这台机器创建了存储目录 [root@k8snode ~]# cd /data1/
[root@k8snode data1]# ll
total 0
#上面可以看到已经创建了存储目录/data1,这个/data1 会作为 pod 的持久化存储目录 #在 node1 上的/data1 下创建一个目录 
[root@k8snode data1]# mkdir paopao
#测试存储卷是否可以正常使用,登录到 nginx 容器 [root@k8smaster cjh]# kubectl exec -it test-hostpath -c test-nginx -- /bin/bash 
root@test-hostpath:/# cd /test-nginx/ 
#/test-nginx/目录存在,说明已经把宿主机目录挂载到了容器里 
root@test-hostpath:/test-nginx# ls
paopao#测试存储卷是否可以正常使用,登录到 tomcat 容器 
[root@k8smaster cjh]# kubectl exec -it test-hostpath -c test-tomcat -- /bin/bash
bash-4.4# cd /test-tomcat/
#/test-tomcat/目录存在,说明已经把宿主机目录挂载到了容器里 
bash-4.4# ls
paopao#通过上面测试可以看到,同一个 pod 里的 test-nginx 和 test-tomcat 这两个容器是共享存储卷的。 
hostpath 存储卷缺点: 
单节点 
pod 删除之后重新创建必须调度到同一个 node 节点,数据才不会丢失 可以用分布式存储: 
nfs,cephfs,glusterfs 

k8s 持久化存储:nfs

上节说的 hostPath 存储,存在单点故障,pod 挂载 hostPath 时,只有调度到同一个节点,数据才不会丢失。那可以使用 nfs 作为持久化存储。

1、搭建 nfs 服务 
以 k8s 的控制节点作为 NFS 服务端 
[root@k8smaster cjh]# yum install nfs-utils -y
#在宿主机创建 NFS 需要的共享目录 
[root@k8smaster cjh]# mkdir /data/volumes -pv pv是层级创建以及信息
mkdir: created directory ‘/data’ 
mkdir: created directory ‘/data/volumes’ 
#配置 nfs 共享服务器上的/data/volumes 目录 
[root@k8smaster cjh]# systemctl start nfs 
[root@k8smaster cjh]# vim /etc/exports 
/data/volumes 192.168.11.0/24(rw,no_root_squash)
#no_root_squash: 用户具有根目录的完全管理访问权限 #使 NFS 配置生效 
[root@k8smaster cjh]# exportfs -arv 
exporting 192.168.11.0/24:/data/volumes
[root@k8smaster cjh]# service nfs start 
Redirecting to /bin/systemctl start nfs.service
#设置成开机自启动 
[root@k8smaster cjh]# systemctl enable nfs 
#查看 nfs 是否启动成功 
[root@k8smaster cjh]# systemctl status nfs
Active: active (exited) since Tue 2022-07-12 23:48:29 PDT; 1min 33s ago
看到 nfs 是 active,说明 nfs 正常启动了 1 2节点也要下载nfs
yum install nfs-utils -y 
systemctl enable nfs 在 node1 上手动挂载试试: 
[root@k8snode data1]# mkdir /test 
[root@k8snode data1]# mount 192.168.11.139:/data/volumes /test/ 
[root@k8snode data1]# df -h
192.168.11.139:/data/volumes   32G  6.4G   25G  21% /test#nfs 可以被正常挂载 
#手动卸载: 
[root@k8snode data1]# umount /test #创建 Pod,挂载 NFS 共享出来的目录 Pod 挂载 nfs 的官方地址: 
https://kubernetes.io/zh/docs/concepts/storage/volumes/ [root@k8smaster cjh]# vim nfs.yaml 
apiVersion: v1
kind: Pod
metadata:name: test-nfs-volume
spec:containers:- name: test-nfsimage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80protocol: TCPvolumeMounts:- name: nfs-volumesmountPath: /usr/share/nginx/htmlvolumes:- name: nfs-volumes nfs:path: /data/volumesserver: 192.168.11.139注:path: /data/volumes #nfs 的共享目录 
server:192.168.40.180 是 master1 机器的 ip,这个是安装 nfs 服务的地址 #更新资源清单文件 
[root@k8smaster cjh]# kubectl apply -f nfs.yaml 
pod/test-nfs-volume created
#查看 pod 是否创建成功 
[root@k8smaster cjh]# kubectl get pods -o wide | grep nfs 
test-nfs-volume         1/1     Running   0          10s   10.244.1.10   k8snode2   <none>           <none>
#登录到 nfs 服务器,在共享目录创建一个 index.html 
[root@k8smaster ~]# cd /data/volumes/
[root@k8smaster volumes]# ls
[root@k8smaster volumes]# pwd
/data/volumes
[root@k8smaster volumes]# vim index.html 
Hello, Everyone 
My name is paopao#请求 pod,看结果 
[root@k8smaster volumes]# curl 10.244.1.10
Hello, Everyone 
My name is paopao#通过上面可以看到,在共享目录创建的 index.html 已经被 pod 挂载了 
#登录到 pod 验证下 
[root@k8smaster volumes]# kubectl exec -it test-nfs-volume -- /bin/bash 
root@test-nfs-volume:/# cat /usr/share/nginx/html/index.html 
\Hello, Everyone 
My name is paopao#上面说明挂载 nfs 存储卷成功了,nfs 支持多个客户端挂载,可以创建多个 pod,挂载同一个 nfs服务器共享出来的目录;但是 nfs 如果宕机了,数据也就丢失了,所以需要使用分布式存储,常见的分布式存储有 glusterfs 和 cephfs 

k8s 持久化存储: PVC

参考官网: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes

k8s PV 是什么?

PersistentVolume(PV)是群集中的一块存储,由管理员配置或使用存储类动态配置。 它是集群中的资源,就像 pod 是 k8s 集群资源一样。 PV 是容量插件,如 Volumes,其生命周期独立于使用 PV 的任何单个 pod。

k8s PVC 是什么?

PersistentVolumeClaim(PVC)是一个持久化存储卷,我们在创建 pod 时可以定义这个类型的存储卷。 它类似于一个 pod。 Pod 消耗节点资源,PVC 消耗 PV 资源。 Pod 可以请求特定级别的资源(CPU和内存)。 pvc 在申请 pv 的时候也可以请求特定的大小和访问模式(例如,可以一次读写或多次只读)。

k8s PVC 和 PV 工作原理

PV 是群集中的资源。 PVC 是对这些资源的请求。PV 和 PVC 之间的相互作用遵循以下生命周期:

(1)pv 的供应方式

可以通过两种方式配置 PV:静态或动态。

静态的: 集群管理员创建了许多 PV。它们包含可供群集用户使用的实际存储的详细信息。它们存在于 Kubernetes API 中,可供使用。

动态的: 当管理员创建的静态 PV 都不匹配用户的 PersistentVolumeClaim 时,群集可能会尝试为 PVC 专门动态配置卷。此配置基于 StorageClasses,PVC 必须请求存储类,管理员必须创建并配置该类,以便进行动态配置。(基于存储类,必须提前创建)

(2)绑定

用户创建 pvc 并指定需要的资源和访问模式。在找到可用 pv 之前,pvc 会保持未绑定状态

(3)使用

a)需要找一个存储服务器,把它划分成多个存储空间;

b)k8s 管理员可以把这些存储空间定义成多个 pv;

c)在 pod 中使用 pvc 类型的存储卷之前需要先创建 pvc,通过定义需要使用的 pv 的大小和对应的访问模式,找到合适的 pv;

d)pvc 被创建之后,就可以当成存储卷来使用了,我们在定义 pod 时就可以使用这个 pvc 的存储卷

e)pvc 和 pv 它们是一一对应的关系,pv 如果被 pvc 绑定了,就不能被其他 pvc 使用了;

f)我们在创建 pvc 的时候,应该确保和底下的 pv 能绑定,如果没有合适的 pv,那么 pvc 就会处于 pending 状态。

(4)回收策略

当我们创建 pod 时如果使用 pvc 做为存储卷,那么它会和 pv 绑定,当删除 pod,pvc 和 pv 绑定就会解除,解除之后和 pvc 绑定的 pv 卷里的数据需要怎么处理,目前,卷可以保留,回收或删除:

Retain

Recycle (不推荐使用,1.15 可能被废弃了)

Delete

Retain 当删除 pvc 的时候,pv 仍然存在,处于 released 状态,但是它不能被其他 pvc 绑定使用,里面的数据还是存在的,当我们下次再使用的时候,数据还是存在的,这个是默认的回收策略

Delete 删除 pvc 时即会从 Kubernetes 中移除 PV,也会从相关的外部设施中删除存储资产

创建 pod,使用 pvc 作为持久化存储卷

1、创建 nfs 共享目录 
#在宿主机创建 NFS 需要的共享目录 
[root@k8smaster ~]# mkdir /data/volume_test/v{1,2,3,4,5,6,7,8,9,10} -p 
#配置 nfs 共享宿主机上的/data/volume_test/v1..v10 目录 
[root@k8smaster ~]# vim /etc/exports 
/data/volumes 192.168.11.0/24(rw,no_root_squash)
/data/volume_test/v1 192.168.11.139/24(rw,no_root_squash)
/data/volume_test/v2 192.168.11.139/24(rw,no_root_squash)
/data/volume_test/v3 192.168.11.139/24(rw,no_root_squash)
/data/volume_test/v4 192.168.11.139/24(rw,no_root_squash)
/data/volume_test/v5 192.168.11.139/24(rw,no_root_squash)
/data/volume_test/v6 192.168.11.139/24(rw,no_root_squash)
/data/volume_test/v7 192.168.11.139/24(rw,no_root_squash)
/data/volume_test/v8 192.168.11.139/24(rw,no_root_squash)
/data/volume_test/v9 192.168.11.139/24(rw,no_root_squash)
/data/volume_test/v10 192.168.11.139/24(rw,no_root_squash)
#重新加载配置,使配置成效 
[root@k8smaster ~]# exportfs -arv 
exporting 192.168.11.139/24:/data/volume_test/v10
exporting 192.168.11.139/24:/data/volume_test/v9
exporting 192.168.11.139/24:/data/volume_test/v8
exporting 192.168.11.139/24:/data/volume_test/v7
exporting 192.168.11.139/24:/data/volume_test/v6
exporting 192.168.11.139/24:/data/volume_test/v5
exporting 192.168.11.139/24:/data/volume_test/v4
exporting 192.168.11.139/24:/data/volume_test/v3
exporting 192.168.11.139/24:/data/volume_test/v2
exporting 192.168.11.139/24:/data/volume_test/v1
exporting 192.168.11.0/24:/data/volumes2、如何编写 pv 的资源清单文件 
#查看定义 pv 需要的字段 
[root@k8smaster ~]# kubectl explain pv 
KIND:     PersistentVolume
VERSION:  v1DESCRIPTION:PersistentVolume (PV) is a storage resource provisioned by anadministrator. It is analogous to a node. More info:https://kubernetes.io/docs/concepts/storage/persistent-volumes
FIELDS: apiVersion <string>s kind <string> metadata <Object> spec <Object> #查看定义 nfs 类型的 pv 需要的字段 
[root@k8smaster ~]# kubectl explain pv.spec.nfs 
KIND:     PersistentVolume
VERSION:  v1RESOURCE: nfs <Object>DESCRIPTION:NFS represents an NFS mount on the host. Provisioned by an admin. Moreinfo: https://kubernetes.io/docs/concepts/storage/volumes#nfsRepresents an NFS mount that lasts the lifetime of a pod. NFS volumes donot support ownership management or SELinux relabeling.
FIELDS: path <string> -required- readOnly <boolean> server <string> -required- 3、创建 pv 
参考:https://kubernetes.io/zh/docs/concepts/storage/persistent-volumes/#reclaiming 
ReadWriteOnce
卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式也允许运行在同一节点上的多个 Pod 访问卷。
ReadOnlyMany
卷可以被多个节点以只读方式挂载。
ReadWriteMany
卷可以被多个节点以读写方式挂载。
ReadWriteOncePod
卷可以被单个 Pod 以读写方式挂载。 如果你想确保整个集群中只有一个 Pod 可以读取或写入该 PVC, 请使用ReadWriteOncePod 访问模式。这只支持 CSI 卷以及需要 Kubernetes 1.22 以上版本。[root@xianchaomaster1 ~]# vim pv.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:name: v1
spec:capacity:storage: 1Gi	 #pv 的存储空间容量 accessModes: ["ReadWriteOnce"]	#访问模式nfs:path: /data/volume_test/v1	#把 nfs 的存储空间创建成 pv server: 192.168.11.139		#nfs 服务器的地址 
--- 
apiVersion: v1
kind: PersistentVolume
metadata:name: v2
spec:capacity:storage: 2GiaccessModes: ["ReadWriteMany"] nfs:path: /data/volume_test/v1server: 192.168.11.139
--- 
apiVersion: v1
kind: PersistentVolume
metadata:name: v3
spec:capacity:storage: 3GiaccessModes: ["ReadWriteMany"] nfs:path: /data/volume_test/v1server: 192.168.11.139
--- 
apiVersion: v1
kind: PersistentVolume
metadata:name: v4
spec:capacity:storage: 4GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/volume_test/v1server: 192.168.11.139
--- 
apiVersion: v1
kind: PersistentVolume
metadata:name: v5
spec:capacity:storage: 5GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/volume_test/v1server: 192.168.11.139
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v6
spec:capacity:storage: 6GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/volume_test/v1server: 192.168.11.139
--- 
apiVersion: v1
kind: PersistentVolume
metadata:name: v7
spec:capacity:storage: 7GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/volume_test/v1server: 192.168.11.139
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v8
spec:capacity:storage: 8GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/volume_test/v1server: 192.168.11.139
--- 
apiVersion: v1
kind: PersistentVolume
metadata:name: v9
spec:capacity:storage: 9GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/volume_test/v1server: 192.168.11.139
---
apiVersion: v1
kind: PersistentVolume
metadata:name: v10
spec:capacity:storage: 10GiaccessModes: ["ReadWriteOnce","ReadWriteMany"]nfs:path: /data/volume_test/v1server: 192.168.11.139#更新资源清单文件 
[root@k8smaster ~]# kubectl apply -f pv.yaml 
persistentvolume/v1 created
persistentvolume/v2 created
persistentvolume/v3 created
persistentvolume/v4 created
persistentvolume/v5 created
persistentvolume/v6 created
persistentvolume/v7 created
persistentvolume/v8 created
persistentvolume/v9 created
persistentvolume/v10 created#查看 pv 资源 
[root@k8smaster ~]# kubectl get pv 
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
v1     1Gi        RWO            Retain           Available                                   29s
v10    10Gi       RWO,RWX        Retain           Available                                   29s
v2     2Gi        RWX            Retain           Available                                   29s
v3     3Gi        RWX            Retain           Available                                   29s
v4     4Gi        RWO,RWX        Retain           Available                                   29s
v5     5Gi        RWO,RWX        Retain           Available                                   29s
v6     6Gi        RWO,RWX        Retain           Available                                   29s
v7     7Gi        RWO,RWX        Retain           Available                                   29s
v8     8Gi        RWO,RWX        Retain           Available                                   29s
v9     9Gi        RWO,RWX        Retain           Available                                   29s
#STATUS 是 Available,表示 pv 是可用的 
[root@k8smaster ~]# cd /data/volume_test/			#pv目录
[root@k8smaster volume_test]# ls
v1  v10  v2  v3  v4  v5  v6  v7  v8  v94、创建 pvc,和符合条件的 pv 绑定 
[root@k8smaster ~]# vim pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim 
metadata: name: my-pvc
spec: accessModes: ["ReadWriteMany"]resources: requests:storage: 2Gi #更新资源清单文件 
[root@k8smaster ~]# kubectl apply -f pvc.yaml 
persistentvolumeclaim/my-pvc created#查看 pv 和 pvc 
[root@k8smaster ~]# kubectl get pv 
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM            STORAGECLASS   REASON   AGE
v1     1Gi        RWO            Retain           Available                                            5m8s
v10    10Gi       RWO,RWX        Retain           Available                                            5m8s
v2     2Gi        RWX            Retain           Bound       default/my-pvc                           5m8s
v3     3Gi        RWX            Retain           Available                                            5m8s
v4     4Gi        RWO,RWX        Retain           Available                                            5m8s
v5     5Gi        RWO,RWX        Retain           Available                                            5m8s
v6     6Gi        RWO,RWX        Retain           Available                                            5m8s
v7     7Gi        RWO,RWX        Retain           Available                                            5m8s
v8     8Gi        RWO,RWX        Retain           Available                                            5m8s
v9     9Gi        RWO,RWX        Retain           Available                                            5m8s#STATUS 是 Bound,表示这个 pv 已经被 my-pvc 绑定了 
[root@k8smaster ~]# kubectl get pvc
NAME     STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
my-pvc   Bound    v2       2Gi        RWX                           32s
pvc 的名字-绑定到 pv-绑定的是 v2 这个 pv-pvc 可使用的容量是 2G 5、创建 pod,挂载 pvc 
[root@k8smaster ~]# vim pod_pvc.yaml 
apiVersion: v1
kind: Pod 
metadata: name: pod-pvc
spec: containers:- name: nginximage: nginximagePullPolicy: IfNotPresentvolumeMounts: - name: nginx-htmlmountPath: /usr/share/nginx/htmlvolumes:- name: nginx-html persistentVolumeClaim:claimName: my-pvc
#更新资源清单文件 
[root@k8smaster ~]# kubectl apply -f pod_pvc.yaml 
pod/pod-pvc created
#查看 pod 状态 
[root@k8smaster ~]# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
pod-pvc                 0/1     Running   0          5s
#通过上面可以看到 pod 处于 running 状态,正常运行
#每次pvc和pv绑定,pv只认哪一个,如果pvc被删除,那么pv会进入释放状态(有数据)并且不让其他pvc绑定。如果原来的pv不能绑定,会自动找最接近需求的新的pv,如果找不到就会进入pending状态。
注:使用 pvc 和 pv 的注意事项
1、我们每次创建 pvc 的时候,需要事先有划分好的 pv,这样可能不方便,那么可以在创建 pvc 的时候直接动态创建一个 pv 这个存储类,pv 事先是不存在的
2、pvc 和 pv 绑定,如果使用默认的回收策略 retain,那么删除 pvc 之后,pv 会处于 released 状态,我们想要继续使用这个 pv,需要手动删除 pv,kubectl delete pv pv_name,删除 pv,不会删除 pv里的数据,当我们重新创建 pvc 时还会和这个最匹配的 pv 绑定,数据还是原来数据,不会丢失。
#先删除pod 不然删不掉pvc 删掉pvc之后再删pv 是这个顺序 如果不删除pod在用pvc的话是不让删除的
[root@k8smaster ~]# kubectl delete pods pod-pvc --grace-period=0 --force
[root@k8smaster ~]# kubectl delete -f pvc.yaml 
persistentvolumeclaim "my-pvc" deleted
[root@k8smaster ~]# kubectl delete -f pv.yaml
[root@k8smaster ~]# kubectl apply -f pv.yaml 
[root@k8smaster ~]# kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
v1     1Gi        RWO            Retain           Available                                   5s
v10    10Gi       RWO,RWX        Retain           Available                                   4s
v2     2Gi        RWX            Retain           Available                                   5s
v3     3Gi        RWX            Retain           Available                                   4s
v4     4Gi        RWO,RWX        Retain           Available                                   4s
v5     5Gi        RWO,RWX        Retain           Available                                   4s
v6     6Gi        RWO,RWX        Retain           Available                                   4s
v7     7Gi        RWO,RWX        Retain           Available                                   4s
v8     8Gi        RWO,RWX        Retain           Available                                   4s
v9     9Gi        RWO,RWX        Retain           Available                                   4s
[root@k8smaster ~]# kubectl get pvc
NAME     STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
my-pvc   Bound    v2       2Gi        RWX                           7s
#还是和2绑定#修改回收策略
[root@k8smaster ~]# kubectl explain pv.spec.persistentVolumeReclaimPolicy
KIND:     PersistentVolume
VERSION:  v1FIELD:    persistentVolumeReclaimPolicy <string>
[root@k8smaster ~]# vim pv.yaml 
#修改第二个
apiVersion: v1
kind: PersistentVolume
metadata:name: v2
spec:persistentVolumeReclaimPolicy: Delete
[root@k8smaster ~]# kubectl apply -f pv.yaml 
[root@k8smaster ~]# kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
v1     1Gi        RWO            Retain           Available                                   7s
v10    10Gi       RWO,RWX        Retain           Available                                   7s
v2     2Gi        RWX            Delete           Available                                   7s
v3     3Gi        RWX            Retain           Available                                   7s
v4     4Gi        RWO,RWX        Retain           Available                                   7s
v5     5Gi        RWO,RWX        Retain           Available                                   7s
v6     6Gi        RWO,RWX        Retain           Available                                   7s
v7     7Gi        RWO,RWX        Retain           Available                                   7s
v8     8Gi        RWO,RWX        Retain           Available                                   7s
v9     9Gi        RWO,RWX        Retain           Available                                   7s
#变成delete了 测试一下更新pvc然后是否绑定等
[root@k8smaster ~]# kubectl apply -f pvc.yaml 
persistentvolumeclaim/my-pvc created
[root@k8smaster ~]# kubectl get pvc
NAME     STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
my-pvc   Bound    v2       2Gi        RWX                           11s
#如果此时删除了pvc和pv,pv存储目录的数据文件不会丢失,如果想彻底清理,删除pvc,pv和目录存储的数据删除

写在最后

创作不易,如果觉得内容对你有帮助,麻烦给个三连关注支持一下我!如果有错误,请在评论区指出,我会及时更改!
目前正在更新的系列:从零开始学k8s
感谢各位的观看,文章掺杂个人理解,如有错误请联系我指出~

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

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

相关文章

【Docker】简单搭建Portainer

既然是家用的Docker那就不上Rancher了&#xff0c;直接通过Portainer轻量化解决所有问题。还好最新的Portainer还是很人性化的&#xff0c;搭建也比较简单&#xff0c;说白了原理就是直接通过宿主机的Docker进行同调&#xff08;这个可以通过下面的启动语句得知&#xff09;。 …

MySQL数据库之进阶查询语句

目录 一、常用查询 1、按关键字查询 ①升序排序 ②降序排序 ③结合where进行条件过滤 ④多字段排序 2、and和or判断 ①and和or的使用 ②嵌套、多条件使用 3、distinct 查询不重复记录 4、group by 对结果进行分组 5、limit限制结果条目 6、设置别名&#xff…

Sentinel核心算法设计与实现

这里我们先一起了解一下Sentinel的一些比较重要的概念 ,Sentinel 整体工作流程采用责任链模式,功能定义Slot,计数通过Node,在Slot中通过选用不同的Node实现不同的流控模式。 Node 用于不同纬度的计数Slot 实现不同的功能Resource 受保护的资源Rule 保护资源规则 回顾完了S…

跟踪元素可视?试试Intersection Observer

本文将讲解Intersection Observer的用法及其polyfill的原理&#xff0c;我们一起来看下。背景现在有以下几种场景。页面滚动时懒加载图片实现无线滚动页面&#xff08;Infinite scrolling&#xff09;根据某个元素是否出现在视窗从而执行某些逻辑&#xfeff;对于这些传统的实现…

ONES 参与《软件研发效能权威指南》编写

9月16-17日&#xff0c;2022 年 QECon 全球软件质量&效能大会在上海举行&#xff0c;ONES 联合创始人兼 CTO 冯斌受邀参加本次大会&#xff0c;并做了主题为《大型软件团队项目管理数字化实践》的分享。演讲剖析了百人以上大型团队的研发管理痛点&#xff0c;并结合 ONES 丰…

Sqlserver 根据父节点ID查询所有子节点

举例: 根据父节点ID查询出所有子节点 不含父节点DECLARE @ParentID int SET @ParentID=3; with CTEGetChild as ( select * from [dbAssetCheck-yili].[dbo].[vFinaceDepartment] where PFDepartmentId=@ParentID UNION ALL (SELECT a.* from [dbAssetCheck-yili].[dbo].[vFi…

【JavaWeb篇】快速学习MyBatis|实战项目详解

作者主页&#xff1a;橙子! 主页 系列专栏&#xff1a;JavaWeb基础教程系列 精彩回顾&#xff1a;HTTP协议详解 文章目的&#xff1a;快速学习MyBatis及实战项目详解 文章目录1.什么是MyBatis?2. JDBC存在的缺点3.Mybatis简化JDBC开发4.MyBatis快速入门1.什么是MyBatis? 简单…

工具推荐-使用RedisInsight工具对Redis集群CURD操作及数据可视化和性能监控

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Balk——你不来,我走了

模式概要 通过synchronized关键字保护&#xff0c;判断一个契机&#xff0c;如果契机满足则继续执行&#xff0c;不满足则直接返回。 与Guarded Suspension模式有显著的对比。Guarded Suspensionhttps://blog.csdn.net/Day_and_Night_2017/article/details/126945643 核心思路…

kafka的学习笔记

kafka - producer&#xff1a;发布消息的对象称之为主题生产者&#xff08;Kafka topic producer&#xff09; - topic&#xff1a;Kafka将消息分门别类&#xff0c;每一类的消息称之为一个主题&#xff08;Topic&#xff09; - consumer&#xff1a;订阅消息并处理发布的消息的…

通信原理学习笔记2-1:模拟调制——相干解调的载波恢复、锁相环(平方环/Costas环)、变频/混频技术

原始信号为基带模拟信号&#xff0c;要想在空气中传播信号&#xff0c;必须使用频带信号&#xff08;频率高则天线长度降低&#xff0c;且可能进行频分复用等&#xff09; 要产生频带信号&#xff0c;需要频谱搬移&#xff0c;这就是调制&#xff1b;基带信号经过调制&#xff…

CSS 面试问题的答案——第三部分 (21–34/34)

CSS 面试问题的答案——第三部分 (21–34/34) 本文是我最后发表的“CSS 面试题答案”系列。以下是所有文章的列表:CSS 面试问题的答案——第一部分 (1-10)CSS 面试问题的答案——第二部分 (11-21)CSS 面试问题的答案——第三部分 (21-34)该材料有助于为前端职位的面试做准备。…

持续集成平台Jenkins:docker镜像升级

Jenkins 2.357 及 LTS 2.361.1之后的版本要求Java 11 或者 17&#xff0c;如果使用的是Java 8&#xff0c;要升级最新版本的Jenkins&#xff0c;就需要升级Java JDK版本&#xff0c;本文记录一下如何升级jenkins容器的Java版本。 目录环境说明Jenkins镜像升级1. 删除当前jenkin…

第一阶段-基础算法

二分法 定义&#xff1a;只要能正确淘汰左/右测&#xff0c;就可以二分&#xff08;经常用单调性&#xff0c;如果左右中三个端点相同&#xff0c;则左端点往右移&#xff09;为什么能二分&#xff1f; 1、数据状况特殊2、问题本身特殊只要能构造出具有排他性的特性&#xff0…

共码未来 | 助力实现事半功倍的前端开发体验

谷歌赋能开发者高效开发通过提供简单易用且相互协同的开发工具助力开发者轻松快速的完成开发工作专注于构建用户喜爱的产品一起来看看有哪些“事半功倍”的工具能够为开发者带来更好的前端开发体验Flutter 为软件开发行业带来了革新&#xff1a;只要一套代码库&#xff0c;即可…

【Netty 从成神到升仙系列 五】Netty 的责任链真有这么神奇吗?

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;Java领域新星创作者。&#x1f4dd;个人公众号&#xff1a;爱敲代码的小黄&#x1f4d5;系列专栏&#xff1a;Java设计模式、数据结构和算法&#x…

sharding-jdbc实现分库分表

一、ShardingSphere介绍 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈&#xff0c;它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar&#xff08;计划中&#xff09;这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理…

HTML5期末大作业:动漫网站设计——神偷奶爸(10页) HT简单个人网页设计作业 静态动漫主题网页作业 DW个人网站模板下载

<h 作业&#xff1a;动漫网站设计——神偷奶爸(10页) HT简单个人网页设计作业 静态动漫主题网页作业 DW个人网站模板下载 大学生简单个人网页作品代码> 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动…

新一代子域名收集工具

项目描述 Sylas(塞拉斯)是我很喜欢的一款游戏《英雄联盟》(League of Legends)里的英雄。他在面板数值已经足够可观的情况下&#xff0c;其终极技能其人之道又能窃取其他英雄的终极技能为己用。我觉得塞拉斯很适合代表这个项目&#xff0c;我们在插件的基础功能开发完成之后&a…

记录Centos安装R语言环境,使用Rmd生成html

安装R语言环境 依次执行以下&#xff1a; yum install epel-release yum install R 安装后验证&#xff1a;输入R&#xff0c;如图代表成功 安装rmarkdown基础环境包 install.packages(“rmarkdown”) install.packages(“ggplot2”) install.packages(“openxlsx”) inst…