当前位置: 首页 > news >正文

Kubernetes之存储管理(中)

NFS网络存储

emptyDir和hostPath存储,都仅仅是把数据存储在pod所在的节点上,并没有同步到其他节点,如果pod出现问题,通过deployment会产生一个新的pod,如果新的pod不在之前的节点,则会出现问题,找不到对应的数据。使用网络存储可以解决该问题。
所有工作节点需安装nfs-common(ubuntu)或nfs-utils(centos7)客户端组件。

yum install -y nfs-u*
  • 在master上搭建NFS服务器
yum install -y rpcbind
yum install -y nfs-utils
# 创建共享目录
mkdir /123
chmod 777 /123
# 修改配置文件
vim /etc/exports
/123 *(rw,sync,no_root_squash)
# 启动服务
systemctl start rpcbind
systemctl start nfs-server
systemctl enable rpcbind
systemctl enable nfs-server

在这里插入图片描述

  • 测试
showmount -e

在这里插入图片描述

  • 创建nfs.yaml文件,内容如下
apiVersion: v1
kind: Pod
metadata:name: pod1
spec:volumes:- name: volume1nfs:server: 192.168.159.164path: /123containers:- image: nginximagePullPolicy: IfNotPresentname: pod1volumeMounts:- name: volume1mountPath: /usr/share/nginx/html
  • 创建pod并查看
kubectl apply -f nfs.yaml
kubectl get pod -o wide

在这里插入图片描述

  • 测试
kubectl cp nfs.yaml pod1:/usr/share/nginx/html
ls /123/# 删除pod
kubectl delete -f nfs.yaml

在这里插入图片描述

持久性存储

kubernets的持久化存储机制的核心是PV(Persistent Volume)和PVC(Persistent Volume Claim)。
在这里插入图片描述

PersistentVolume(持久卷)

pv不属于任何命名空间,全局可见。

  • 创建pv1.yaml文件,内容如下
apiVersion: v1
kind: PersistentVolume
metadata:name: pv1
spec:capacity:                                ## 指定存储容量storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Recyclenfs:server: 192.168.159.164path: /123

注意:storage的大小和accessModes的值,这是pvc和pv绑定的关键
accessModes有以下三个值:
ReadWriteOnce(RWO):允许单个节点挂载读写
ReadWriteMany(RWX):允许多个节点挂载读写
ReadOnlyMany(ROX):允许单个节点挂载只读
Deployment由于多副本,要使用RWX。

  • 创建pv,查看其属性
kubectl apply -f pv1.yaml
kubectl get pv
kubectl describe pv pv1

在这里插入图片描述
可以看到,pv1所使用的后端类型为NFS,NFS的服务器是192.168.159.164,共享目录是/123。

  • 删除pv的方法
kubectl delete -f pv1.yaml

PersistentVolumeClaim

  • pvc是基于命名空间创建的,不同命名空间里的pvc相互隔离。
  • 如果有多个不同命名空间绑定属性相同的的PVC去和PV绑定,只有一个PVC能和PV绑定,其他状态为pending。
  • pvc通过storage的大小和accessModes的值和pv进行绑定,PV storage >= PVC storage
  • 为了控制PV和PVC绑定,可以通过增加一个属性storageClassName进行控制。在PV和PVC里添加storageClassName:
spec:
- storageClassName: xyz
  • 创建pvc1.yaml文件,内容如下
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc1
spec:accessModes:- ReadWriteOncevolumeMode: Filesystemresources:requests:storage: 5Gi
  • 创建pvc,并查看其属性
kubectl apply -f pvc1.yaml
kubectl get pvc
kubectl describe pvc pvc1

在这里插入图片描述

  • 删除pvc的方法
kubectl delete -f pvc1.yaml

使用持久性存储

  • 创建pod_pvc.yaml文件,内容如下
apiVersion: v1
kind: Pod
metadata:name: pod1
spec:volumes:- name: volume1persistentVolumeClaim:claimName: pvc1containers:- image: nginximagePullPolicy: IfNotPresentname: pod1volumeMounts:- name: volume1mountPath: /mnt
  • 创建pod并查看
kubectl apply -f pod_pvc.yaml
kubectl get pod -o wide

在这里插入图片描述

  • 拷贝文件,测试
kubectl cp pod_pvc.yaml pod1:/mnt
ls /123

在这里插入图片描述

pv回收策略

前面创建pv的时候,有一句persistentVolumeReclaimPolicy: Recycle,有以下两种策略:

  • Recycle:删除pvc后,会生成一个pod回收数据,删除pv里的数据,删除pvc后pv可以复用,pv状态由Released变为Available。
  • Retain:不回收数据,删除pvc后,pv依然不可用,pv状态长期保持为Released,需要手动删除pv,然后重新创建。但是,删除pv的时候并不会删除里面的数据
http://www.lryc.cn/news/26679.html

相关文章:

  • MySQL workbench的基本操作
  • 【Flink】FlinkSQL中Table和DataStream互转
  • 网络总结知识点(网络工程师必备)一
  • 离线安装samba与配置(.tar方式安装)
  • [Java基础]—JDBC
  • 基本面向对象编程-计算机基本功能实现_
  • C++面向对象之多态性
  • Android性能优化系列篇:弱网优化
  • Mysql 插入大批量数据调优方法
  • matlab基础
  • 自动化测试——多窗口切换和切换frame
  • C#中,Elasticsearch.Net判断空字符串
  • 23种设计模式-适配器模式
  • 深入理解this指向问题
  • 事业单位联考(综合应用A类)典型例题教案
  • frp内网穿透实验
  • 认识JavaScript中的防抖函数
  • macOS 13.3 Beta 2 (22E5230e)With OpenCore 0.8.9正式版 and winPE双引导分区原版镜像
  • JetPack—DataStore核心原理与使用
  • 热烈祝贺|酒事有鲤盛装亮相2023中国(山东)精酿啤酒产业发展创新论坛暨展览会
  • 深度强化学习DLR
  • Android Handler机制(四) Message源码分析
  • 【Git】git命令(全)
  • 软考论文-成本管理(1)
  • Java 多线程 --- 锁的概念和类型划分
  • python程序员狂飙上头——京海市大嫂单推人做个日历不过分吧?
  • 浅谈子网掩码、IP地址、网络地址之间关系
  • 前端优化的解决方案
  • PYthon组合数据类型的简单使用
  • 【Java】P2 基础语法与运算符