k8s数据持久化,pv和pvc
k8s中为什么使用存储:
k8s中的副本控制器保证了pod的始终存储,却保证不了pod中的数据。只有启动一个新pod的,之前pod中的数据会随着容器的删掉而丢失!
pv和pvc的概念:
PersistentVolume(一些简称PV):由管理员添加的的一个存储的描述,是一个全局资源,包含存储的类型,存储的大小和访问模式等。它的生命周期独立于Pod,例如当使用它的Pod销毁时对PV没有影响。
PersistentVolumeClaim(一些简称PVC):是Namespace里的资源,描述对PV的一个请求。请求信息包含存储大小,访问模式等。
创建pv
后端存储用的是nfs,nfs共享存储配置可以看之前发布的博文
[root@k8s-master1 pv]# cat nginx-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-pv
labels:
type: nginx-pv
spec:
capacity: #存储能力
storage: 2Gi #大小2G
accessModes:
- ReadWriteMany #多节点读写
persistentVolumeReclaimPolicy: Recycle #可回收
nfs: #指定nfs存储
path: "/data/k8s" #nfs主机存储路径,这个路径需要主机真实存在
server: 192.168.198.144 #nfs 服务端地址,是主机地址
readOnly: false
创建pv
[root@k8s-master1 pv]# kubectl apply -f nginx-pv.yaml
创建pvc
[root@k8s-master1 pv]# cat nginx-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginxpvc
spec:
accessModes:
- ReadWriteMany
resources: #需求资源
requests:
storage: 2Gi #需求资源大小2G
[root@k8s-master1 pv]# kubectl apply -f nginx-pvc.yaml
pvc会自动绑定和他需求资源大小最接近的pv资源(有个前提:pv资源必须答应pvc需求资源大小)
查询pv,pvc

pod使用pvc
[root@k8s-master1 pv]# cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment #deployment 控制器
metadata:
name: my-dep-pvc #deploymen 名称
spec: #deployment 元数据
replicas: 1 #副本数
selector: #选择器
matchLabels:
app: my-dep-pvc #label名称
template: #容器模板
metadata:
labels:
app: my-dep-pvc
spec: #容器元数据
containers:
- name: nginx #容器名称
image: centos-nginx:1.23.0 #容器镜像,本地build的一个镜像
imagePullPolicy: Never #容器镜像拉取方式,never表示只从本地拉取,不从远程仓库拉取
ports:
- containerPort: 80 #容器镜像
volumeMounts: #容器挂载的pvc卷
- name: nginx-data #自定义容器挂载卷的名称
mountPath: /apps/nginx/html #需要挂载出去的容器的路径,我的html文件放在了apps这个目录下
volumes: #挂载卷
- name: nginx-data #卷名称,需要和自定义容器挂载卷的名称一致
persistentVolumeClaim:
claimName: nginxpvc #本地创建的pvc名称
restartPolicy: Always
创建deployment
[root@k8s-master1 pv]# kubectl apply -f nginx-deployment.yaml
查询 pod卷信息
[root@k8s-master1 pv]# kubectl describe pod my-dep-pvc-6bc6fb7dd9-pnxs8
#截取一部分,mounts挂载情况,Volumes:信息
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/apps/nginx/html from nginx-data (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-clqrl (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
nginx-data:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: nginxpvc
ReadOnly: false
default-token-clqrl:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-clqrl
主机上df -h可以查询到对应挂载信息
[root@k8s-node2 pods]# df -h | grep nginx-pv
192.168.198.144:/data/k8s 17G 3.7G 14G 22% /var/lib/kubelet/pods/74972e11-8dc1-4c39-a2ba-58050d8224d3/volumes/kubernetes.io~nfs/nginx-pv
测试pod容器数据持久性
nginx-pv对应主机真实路径:/data/k8s
在/data/k8s上传对应html文件,测试pod容器数据持久性
[root@k8s-master1 pv]# cd /data/k8s/
#这两个html文件从Nginx中拷贝过来
[root@k8s-master1 k8s]# ll
total 8
-rw-r--r-- 1 root root 497 Aug 29 09:21 50x.html
-rw-r--r-- 1 root root 5 Aug 29 09:22 index.html
#修改index文件
[root@k8s-master1 k8s]# echo xmxm > index.html
发布服务service
[root@k8s-master1 pv]# cat svc.yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
name: my-svc-pvc
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: my-dep-pvc
type: NodePort
status:
loadBalancer: {}
[root@k8s-master1 pv]# kubectl apply -f svc.yaml
查询svc,端口为32432
[root@k8s-master1 pv]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 16d
my-svc-pvc NodePort 10.102.155.197 <none> 80:32432/TCP 81m
readiness-svc NodePort 10.108.113.163 <none> 80:30663/TCP 5d19h
使用浏览器测试

删除pod后,重新测试
[root@k8s-master1 pv]# kubectl get pods
NAME READY STATUS RESTARTS AGE
httpget 1/1 Running 6 5d23h
my-dep-68dbd87f47-pmcdq 1/1 Running 7 10d
my-dep-pvc-6bc6fb7dd9-pnxs8 1/1 Running 0 82m
my-dep3-6f4f5bbc-48pml 1/1 Running 7 9d
my-dep3-6f4f5bbc-d8zmt 1/1 Running 7 9d
readiness-57cbcdfc6d-52ffg 1/1 Running 6 5d19h
[root@k8s-master1 pv]# kubectl delete pod my-dep-pvc-6bc6fb7dd9-pnxs8
pod "my-dep-pvc-6bc6fb7dd9-pnxs8" deleted
[root@k8s-master1 pv]#
[root@k8s-master1 pv]#
[root@k8s-master1 pv]# kubectl get pods
NAME READY STATUS RESTARTS AGE
httpget 1/1 Running 6 5d23h
my-dep-68dbd87f47-pmcdq 1/1 Running 7 10d
my-dep-pvc-6bc6fb7dd9-f828l 1/1 Running 0 5s
my-dep3-6f4f5bbc-48pml 1/1 Running 7 9d
my-dep3-6f4f5bbc-d8zmt 1/1 Running 7 9d
readiness-57cbcdfc6d-52ffg 1/1 Running 6 5d19h
再次使用浏览器访问,页面还是xmxm,数据没有丢失

k8s数据持久化,pv和pvc的更多相关文章
- k8s入门之PV和PVC(八)
某些应用是要持久化数据的,如果直接持久化在pod所在节点,当pod因为某种原因重建或被调度另外一台节点,是无法访问到之前持久化的数据,所以需要一个公共存储数据的地方,无论pod删除重建或重新调度到其他 ...
- k8s数据持久化实验
Step 1:创建PV ============================================ apiVersion: v1kind: PersistentVolumemetadat ...
- 容器编排系统K8s之PV、PVC、SC资源
前文我们聊到了k8s中给Pod添加存储卷相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14180752.html:今天我们来聊一下持久存储卷相关话题 ...
- Kubernetes集群PV和PVC详解
Kubernetes集群高级存储资源PV及PVC 文章目录 Kubernetes集群高级存储资源PV及PVC 1.高级存储PV和PVC概念部分 2.PV和PVC资源的生命周期 3.PV资源介绍与案例配 ...
- k8s的持久化存储PV&&PVC
1.PV和PVC的引入 Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足. 拿前面 AWS EBS 的例子来说,要使用 Volume,Pod 必须事先知道如下信息: 当前 Volu ...
- k8s集群,使用pvc方式实现数据持久化存储
环境: 系统 华为openEulerOS(CentOS7) k8s版本 1.17.3 master 192.168.1.244 node1 192.168.1.245 介绍: 在Kubernetes中 ...
- K8S学习笔记之Kubernetes数据持久化方案
在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath.configmap以及secret的机制和用途. 0x00 Emptydir EmptyDir是一个空目录, ...
- Kubernetes 系列(六):持久化存储 PV与PVC
在使用容器之后,我们需要考虑的另外一个问题就是持久化存储,怎么保证容器内的数据存储到我们的服务器硬盘上.这样容器在重建后,依然可以使用之前的数据.但是显然存储资源和 CPU 资源以及内存资源有很大不同 ...
- 6.k8s.存储Volume.PV.PVC
#Volume Volume 解决数据持久化和容器间共享数据 Kubernetes支持几十种类型的后端存储卷 #hostPath挂载实例,挂载Node节点/tmp/test-volume目录到容器/t ...
随机推荐
- Vue路由的模块自动化与统一加载
首先呢,我们来看看一般项目路由是怎么划分的. 为什么这么划分呢?如果大项目业务非常多,单纯的单页面很难维护,我们只有这样规范化,才能高效率. 模块自动化与统一加载的好处: 规范化命名(模块名.业务名. ...
- HDLBits->Verilog Language->Modules:Hierarchy->Modules and vectors
题目要求如上不再赘述,主要关注到最后的四选一多路选择器. 最初编写的选择器代码如下 always@(sel) case(sel) 2'd0:q <= d; 2'd1:q <= in1; 2 ...
- VisionPro · C# · 加载与保存取像工具
VisionPro 项目程序设计,取像工具可被包含在工具包内被调用,一般,为了满足程序取像可以实现单次取像,循环取像,实时取像等多方面应用,会将取像工具独立打包. 加载代码: 1 using Syst ...
- 基于Svelte3.x桌面端UI组件库Svelte UI
Svelte-UI,一套基于svelte.js开发的桌面pc端ui组件库 最近一直忙于写svelte-ui,一套svelte3开发的桌面端ui组件库.在设计及功能上借鉴了element-ui组件库.所 ...
- NC25136 [USACO 2006 Ope B]Cows on a Leash
NC25136 [USACO 2006 Ope B]Cows on a Leash 题目 题目描述 给定如图所示的若干个长条.你可以在某一行的任意两个数之间作一条竖线,从而把这个长条切开,并可能切开其 ...
- 【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
问题描述 创建一个Java Console程序,用于使用Azure Key Vault Secret.在VS Code中能正常Debug,但是通过mvn clean package打包为jar文件后, ...
- 反向传播神经网络(BP)
实验部分: ①输入.输出矢量及问题的阐述 由题意输入变量取值范围为e={-2,-1,0,1,2}和ec={-2,-1,0,1,2},则输入矢量有25种情况,分别如下所示: 则由T=int((e+ec) ...
- linux新建分区和磁盘
1.查看已有分区 ]# df –hl fdisk -l 查看磁盘情况 ]# fdisk –l 2.对未分区的进行分区 # fdisk /dev/vdb 硬盘分区 创建了一个55G的分区磁盘 1.新建第 ...
- ooday08 Java_多态_向下强制转型
笔记: 多态: 表现: 同一个对象被造型为不同的类型时,有不同的功能 --对象的多态:我.你.水......------所有对象都是多态的(明天体会) 同一类型的引用指向不同的对象时,有不同的实现 - ...
- Java之struts2框架学习
Java之struts2框架学习 About Struts2 Struts也是一款MVC框架 , Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全 ...