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 ...
随机推荐
- 获得MySQL数据库存放位置
更新记录 2022年6月13日 发布. 2022年6月11日 开始. 通过查看MySQL与存储目录相关的参数 show variables like '%dir%'; 通过查询后datadir参数的值 ...
- 密码学系列之:PKI的证书格式表示X.509
目录 简介 一个证书的例子 X.509证书的后缀 .pem .cer, .crt, .der .p7b, .p7c .p12 .pfx 证书的层级结构和交叉认证 x.509证书的使用范围 总结 简介 ...
- Django cors跨域问题
Django cors跨域问题 前后端分离项目中的跨域问题 即同源策略 同源策略:同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器 ...
- vue按需引入第三方ui插件优化
components.js import { fullScreenContainer, borderBox12, scrollBoard, loading, borderBox10, borderBo ...
- vue 的常用事件
vue 的常用事件 事件处理 1.使用 v-on:xxx 或 @xxx 绑定事件,其中 xxx 是事件名: 2.事件的回调需要配置在 methods 对象中,最终会在 vm 上: 3.methods ...
- RPA 微信财务报销机器人 竹间智能
1.首先通过微信对话机器人收集报销信息及内容 2.上传发票并进行OCR识别 3.收集相关的出差信息,支持对话中修改内容 4.完成信息收集后,后台RPA机器人执行报销操作,并发送确认邮件 5.收到邮件后 ...
- sql-DQL-单表查询
单表查询 select [distint]* 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定 ...
- plain framework的实际应用和扩展
首先在这里庆祝香港回归祖国的怀抱25周年,想起那年还是一个小学生戴着红领巾和胸章激动不已,实现祖国的统一是每个中华儿女从小的梦想!趁着这欢庆的日子,突然想要写些什么,其实最近也在做一些事,由于工作繁忙 ...
- NC20241 [SCOI2005]扫雷MINE
NC20241 [SCOI2005]扫雷MINE 题目 题目描述 相信大家都玩过扫雷的游戏.那是在一个 \(n \times m\) 的矩阵里面有一些雷,要你根据一些信息找出雷来. 万圣节到了 ,&q ...
- P1189 SEARCH—搜索
将这题加进来的原因 因为他的优化令人眼前一新! 题目传送门() 相似的题目之 血色先锋队 ↑这一题也要用到标记数组 优化!!! 对于一个位置, 如果他在同样的深度再一次被访问,那他接下来所走的路径,所 ...