k8s之存储卷管理

存储卷

持久卷

卷概述

  1. 容器化带来的问题
    容器中的文件在磁盘上是临时存放的,这给容器中的运行的重要的应用程序带来一些问题
  • 问题1:当容器崩溃或重启的时候,kubelet会以干净的状态(镜像的状态)重启容器,容器内的历史数据会丢失
  • 问题2:当容器被删除时(k8s没有停止容器的概念,只有创建、删除),容器内的数据也会被一起清理
  • 问题3:多个容器中有共享文件或目录的需求
  1. 卷是什么?
  • 卷是一个抽象化的存储设备
  1. 为什么要使用卷?
  • 卷可以解决容器崩溃或重启后历史数据丢失的问题
  • 卷可以解决容器或Pod被删除后数据持久保存的问题
  • 卷可以解决在多个容器内共享数据的问题
  • Pod可以同时使用任意数目的卷
  1. k8s支持的卷类型
  • 持久卷:持久卷是集群中的存储资源,就像他的名字一样,在里面存储的数据不会随着Pod的删除而丢失
  • 临时卷:有些应用程序需要额外的存储,但并不关系数据在重启后是否仍然可用。卷会遵从Pod的生命周期,与Pod一起创建和删除
  • 投射卷:它允许将多个现有卷源映射到同一个目录。通过将这些不同类型的卷源组成一个统一的卷,可以更方便地管理和使用这些资源
  1. 如何使用卷?
  • 首先编写一个Pod的资源清单文件
  • 在Pod.spec下添加volumes字段,配置外部存储为卷
  • 在Pod.spec.containers[*]中添加volumeMounts字段,声明卷在容器中的挂载位置
  1. 注意事项
  • 卷不能挂载到其他卷之上,也不能与其他卷有硬链接
  • Pod配置中的每个容器必须独立指定各个卷的挂载位置

hostPath存储卷

  1. hostPath是持久卷
  • hostPath卷的本质是使用本地设备,例如磁盘、分区、目录、Socket、CharDevice和BlockDevice等等。hostPath卷的可用性取决于底层节点的可用性,如果节点变得不健康,那么hostPath卷也将不可被访问
  • hostPath卷里面的数据不会随着Pod的结束而消失
  • 注意事项:配置相同的Pod,可能在不同的节点上表现不同,因为不同节点上映射的文件内容不同,因为不同节点上映射的文件内容不同
  • 使用hostPath卷保存日志
  1. type对应类型
类型 说明
DirectoryOrCreate 卷映射对象是一个目录,如果不存在就创建它
Directory 卷映射对象是一个目录,且必须存在
FileOrCreate 卷映射对象是一个文件,如果不存在就创建它
File 卷映射对象是一个文件,且必须存在
Socket 卷映射对象是一个Socket套接字,且必须存在
CharDevice 卷映射对象是一个字符设备,且必须存在
BlockDevice 卷映射对象是一个块设备,且必须存在
  1. hostPath卷
[root@master ~] vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: web1
spec:
  volumes:                     # 卷定义
  - name: logdata              # 卷名称
    hostPath:                  # 资源类型
      path: /var/weblog        # 宿主机路径
      type: DirectoryOrCreate  # 目录不存在就创建
  containers:
  - name: nginx
    image: myos:nginx
    volumeMounts:                       # mount 卷
    - name: logdata                     # 卷名称
      mountPath: /usr/local/nginx/logs  # 容器内路径
  • 验证 hostPath 卷
[root@master ~] kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~] kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP             NODE
web1   1/1     Running   0          45m   10.244.2.16    node-0002

[root@master ~] curl http://10.244.2.16/
Nginx is running !

# 删除Pod ,日志数据也不会丢失
[root@master ~] kubectl delete pod web1
pod "web1" deleted

# 来到 node 上查看日志
[root@node-0002 ~] cat /var/weblog/access.log 
10.244.0.0 - - [27/Jun/2022:02:00:12 +0000] "GET / HTTP/1.1" 200 19 "-" "curl/7.29.0"

NFS存储卷

  1. NFS存储
  • k8s中允许将nfs存储以卷的方式挂载到你的Pod中。
  • 在删除Pod时,nfs存储卷会被卸载(umount),而不是被删除。nfs卷可以在不同节点的Pod之间共享数据
  1. NFS卷的用途
  • NFS最大的功能就是在不同节点的不同Pod中共享读写数据。本地NFS的客户端可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
  1. 部署NFS服务
  • 购买云主机部署NFS服务
名称 IP地址 配置
nfs 192.168.1.10 1CPU,1GMEM
# 创建共享目录,并部署测试页面
[root@nfs ~] mkdir -p /var/webroot
[root@nfs ~] echo "nfs server" >/var/webroot/index.html

# 部署 NFS 服务
[root@nfs ~] dnf install -y nfs-utils
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值