K8s 存储卷
卷容器化带来的问题容器中的文件在磁盘上是临时存放1,当容器崩溃或者重启的时候,会重新去镜像重启容器,容器内的历史数据会丢失2,当容器被删除(k8s没有停止容器的概念,只有创建,删除),容器内的数据也会被清理3,多个容器中有共享文件或者目录的需求(nfs)卷是个抽象化的存储设备为什么在k8s上使用卷卷可以解决容器崩溃或者重启后 ,数据丢失的问题卷可以解决容器或Pod被删除后数据持久保存的问题卷可以解
卷
容器化带来的问题
容器中的文件在磁盘上是临时存放
1,当容器崩溃或者重启的时候,会重新去镜像重启容器,容器内的历史数据会丢失
2,当容器被删除(k8s没有停止容器的概念,只有创建,删除),容器内的数据也会被清理
3,多个容器中有共享文件或者目录的需求(nfs)
卷是个抽象化的存储设备
为什么在k8s上使用卷
卷可以解决容器崩溃或者重启后 ,数据丢失的问题
卷可以解决容器或Pod被删除后数据持久保存的问题
卷可以解决在多个容器的共享数据的问题
pod可以同时使用任意数目的卷
k8s 不提供存储,任何存储先映射成卷 volume
持久卷 临时卷 投射卷
持久卷:集群中的存储资源,就像他的名字一样,在里面存储的数据不会随着Pod的删除而丢失
临时卷:有些应用程序需要额外的存储,但并不关心数据在重启是否仍然可用。卷会遵循Pod的生命周期,与pod一起创建和删除
投射卷: 多个现有卷源映射到同一个目录。通过将不同类型的卷源组合成统一的卷,方便管理
如何使用卷?
首先编写一个Pod的资源对象文件
在pod.spec 下添加volums字段,配置外部存储为卷
在pod.spec.containers[*] 中添加volumeMounts字段,声明卷在容器中的挂载位置
注意事项:
卷不能挂载到其他卷之上,也不能与其他卷有硬链接
Pod配置中的每个容器必须独立指定各个卷的挂载位置
hostPath 持久卷
hostPath卷的本质是使用本地设备, 例如磁盘,分区,目录,socket ,chardevice
,blockdevice。hostPath卷的可用性取决于底层节点的可用性,如果节点变的不健康,hostPath卷也将不可被访问
hostPath 卷里面的数据不会随着Pod的结束而消失
注意事项: 配置相同的Pod ,可能在不同的节点上表现不同,因为不同节点上映射的文件内容不同
k8s 中允许将nfs存储以卷的方式挂载到你的Pod中。
NFS存储
在删除Pod时,nfs存储卷会被卸载(umount),而不是被删除。nfs卷可以在不同节点的Pod之间共享数据
NFS卷的用途
NFS最大的功能就是在不同节点的不同Pod中共享读写数据。本地NFS的客户端可以透明的读写位于远端NFS服务器上的文件,就像访问本地文件一样
由于Pod存在随机调度,为了保证NFS存储卷可以正确加载,需要在所有node节点都安装NFS包
PV/PVC
PV --- Persistent Volume 持久卷
PVC --- PersistentVolumeClaim 持久卷声明
提供一个通用的API来完成Pod对卷的部署管理与使用 ,PV/PVG 使集群具备了存储的逻辑抽象能力
k8s支持的存储卷:
- CephFS - CSI 容器存储接口- FC 存储 - hostPath卷 - iscsi 存储 -nfs - rbd
三大特点 :
卷的模式 volumeMode 直接可用的filesystem 文件系统 (存储)
需要格式化的块设备 block (块设备)
访问模式 accessModes (读和写)
存储空间 storage 存储空间大小
回收策略
目前的回收策略有:
- Retain -- 手动回收
- Recycle -- 简单擦除 (
rm -rf /thevolume/*
) - Delete -- 删除存储卷
如何使用PV/PVC
PV是资源的提供者 , 我提供--,集群的基础设施变化而变化,由k8s集群管理员配置
PVC是资源的使用者,我需要--,根据业务服务的需求变化来配置,用户无需知道PV的技术细节,只需要声明你需求什么样的资源
PVC会根据用户声明的需求,自动找到PV完成绑定
PVC资源文件,映射PVC为卷,persistentVolumeClaim
使用PVC用户无需关心后端存储设备,系统会自动查找匹配
存储卷挂载路径 volumeMounts
configMap 临时卷
configMap卷提供了向Pod注入配置数据的方法,允许你将配置文件与镜像分离,使容器化的应用具有可移植性
configMap在使用之前先创建它,configMap不是用来保存大量数据的,在其中保存的数据不可超过1MiB
configMap 用途:
配置环境变量
修改配置文件的参数,数据库的地址
1,修改系统时区
kubectl create configmap 名称 [选项/参数]
2.资源对象文件
kind: ConfigMap
...
TZ: Asia/Shanghai
configMap卷
配置nginx解析php,在pod中加php容器,与nginx共享同一块网卡
制作configMap配置文件 location ~\.php$ ...
kubectl create configmap nginx-php --from-file=nginx.conf
映射配置文件
configmap 引用资料对象
subPath 键值(不设置键值映射为目录)
mountPath 路径
secret卷 加密 临时卷
secret 类似于configMap 但专门用于保存机密数据
在设置secret.data 字段时,所有键值都必须是经过base64
编码的字符串
有加密需求的 ----- 用 secret 卷
- 配置一些需要加密的环境变量或者文件 (https证书)
- 访问需要认证登陆的私有镜像仓库 (harbor私有仓库)
kubectl create secret 子类型 名称 [选项/参数]
子类型 通用 kubectl create secret generic 名称 [选项/参数]
认证登陆私用仓库类型 kubectl create secret docker-registry 名称 [选项/参数]
创建TLS证书的子类型 kubectl create secret tls 名称 [选项/参数]
登陆私有仓库
仓库harbor:443/myimg/httpd:latest 需要认证
使用私有仓库中的镜像创建容器
emptyDir卷
临时卷
本质就是一个简单的空目录
可以提供临时空间,同一个Pod中容器来共享数据。 (缓存服务器,数据统计分析,排序)
随着Pod创建而创建,Pod在该节点上运行期间,一直存在。Pod被节点上删除时,临时卷中的数据也会永远删除
重启Pod中的容器不会造成emptyDir 数据的丢失
配置缓存目录
volumes: #定义卷
- name: cache # 容器内卷名称
emptyDir: {} #卷类型
volumeMounts: #在容器中挂载卷
- name: cache #卷名称
mountPath: /var/cache #路径不存在,就创建
#路径存在,就覆盖
更多推荐
所有评论(0)