k8s(七)

文章目录

  • 前言
  • [一、emptyDir 存储卷](#一、emptyDir 存储卷)
    • [1.1 emptyDir存储卷特点](#1.1 emptyDir存储卷特点)
    • [1.2 案例](#1.2 案例)
  • [二、hostPath 存储卷](#二、hostPath 存储卷)
    • [3.1 特点](#3.1 特点)
    • [3.2 案例](#3.2 案例)
  • [四、NFS 网络共享存储卷](#四、NFS 网络共享存储卷)
    • [4.1 特点](#4.1 特点)
    • [4.2 案例](#4.2 案例)
  • [五、PV 与 PVC 持久化机制](#五、PV 与 PVC 持久化机制)
    • [5.1 PV与PVC的概念](#5.1 PV与PVC的概念)
    • [5.2 PV和PVC生命周期](#5.2 PV和PVC生命周期)
    • [5.3 PV的状态](#5.3 PV的状态)
    • [5.4 NFS + PV + PVC 实战(静态存储)](#5.4 NFS + PV + PVC 实战(静态存储))
  • [六、StorageClass + NFS动态存储](#六、StorageClass + NFS动态存储)
    • [6.1 原理](#6.1 原理)
    • [6.2 操作实践](#6.2 操作实践)
  • 总结

前言

本文重点讲解k8s集群数据存储的几种方式,大家都知道k8s数据是非常重要的,一旦丢失,那么集群中的所有业务都会停止运行,因此数据存储就显得非常重要。

一、emptyDir 存储卷

1.1 emptyDir存储卷特点

1、Pod 调度到节点时自动创建;

2、Pod 删除后数据也随之销毁;

3、仅适合临时缓存或容器间数据共享。

4、同一个pod中的容器与容器之间进行数据共享

1.2 案例

第一步 创建pod容器(这里以nginx与busybox为例,共享卷的名字为html)

第二步 访问nginx的挂载文件

二、hostPath 存储卷

3.1 特点

1、将节点(宿主机)上的目录挂载到容器;

2、可实现持久化;

3、但节点故障会导致数据丢失。

3.2 案例

第一步 在node节点上创建一个挂载目录和文件,并在文件中写入一些数据

第二步 创建yaml文件

第三步 尝试访问nginx容器

(可以发现有之前节点文件的数据,挂载成功)

四、NFS 网络共享存储卷

4.1 特点

1、多节点共享数据;

2、数据集中存放于 NFS 服务端;

3、支持 RWX(多路读写)。

原理:通过rpcbind和nfs服务将客户端的数据传到对应的node节点。

rpcbind服务与nfs服务的作用:

简单来说:rpcbind是用于找到对端(这里指node1)的,nfs是用于共享数据的,因此在启动操作时要先启动rpcbind服务再启动nfs服务

4.2 案例

第一步 在客户端安装nfs与rpcbind服务

yum install rpcbind nfs-utils ------------------------------------------安装rpcbind与nfs服务

第二步 创建要挂载(共享)的文件

第三步 配置nfs配置文件(填写允许共享的ip或ip网段、文件路径以及权限)

重启nfs与rpcbind服务

systemctl restart rpcbind

systemctl restart nfs

第四步 在10.0.0.2创建主机映射

vim /etc/hosts ------------------------------------编辑主机映射文件

第五步 创建yaml文件

第六步 尝试访问容器,看看是否将共享数据传到容器中的挂载目录

五、PV 与 PVC 持久化机制

5.1 PV与PVC的概念

pv是服务端定义的存储资源

pvc是客户端定义的pv资源需求

(也就是PVC 必须与对应的 PV 建立关系,PVC 会根据配置的定义去 PV 申请,而 PV 是由存储空间创建出来的。PV 和 PVC 是 Kubernetes 抽象出来的一种存储资源)

pvc在选择pv资源时,会优先选择资源完全匹配的pv,以防止资源浪费,其次会在资源大于需求并且最接近的pv。

5.2 PV和PVC生命周期

1、Provisioning:即 PV 的创建,可以直接创建 PV(静态方式),也可以使用 StorageClass 动态创

2、Binding:将 PV 分配给 PVC。

3、Using:Pod 通过 PVC 使用该 Volume,并可以通过准入控制StorageProtection(1.9及以前版本

为PVCProtection) 阻止删除正在使用的 PVC

4、Releasing:Pod 释放 Volume 并删除 PVC

5、Reclaiming:回收 PV,可以保留 PV 以便下次使用,也可以直接从云存储中删除

PV和PVC之间的相互作用遵循这个生命周期:

Provisioning(配置)--> Binding(绑定)--> Using(使用)--> Releasing(释放)-->

Recycling(回收)

5.3 PV的状态

根据这 5 个阶段,PV 的状态有以下 4 种:

Available(可用):表示可用状态,还未被任何 PVC 绑定

Bound(已绑定):表示 PV 已经绑定到 PVC

Released(已释放):表示 PVC 被删掉,但是资源尚未被集群回收

Failed(失败):表示该 PV 的自动回收失败

5.4 NFS + PV + PVC 实战(静态存储)

第一步 在客户端创建nfs共享数据的目录和文件

第二步 修改nfs共享数据的配置文件

第三步 创建pv

第四步 创建pvc

因为这里pv2的资源和pvc所需标准一样,所以会绑定到pv2

第五步 创建pod

第六步 尝试访问pod容器

数据同步成功

六、StorageClass + NFS动态存储

6.1 原理

大致原理:由于k8s本身支持的动态pv不包括nfs,所以需要外部插件,外部卷插件称为 Provisioner(存储分配器),而外部插件进入集群需要有账号与角色权限去创建pv,整个存储流程就是先创建k8s集群账号和角色,然后让角色与账号互相绑定,之后创建nfs插件,让他分配pv,pv在整个过程中会自动创建,因为外部网络插件不能直接由pvc调用,所以还需要创建stroageclass去调用外部存储插件,pvc在去调用storageclass,最后创建pod,这是操作流程,实际上的存储流程是反过来的。

流程:客户端指定要同步的数据,并编写了pvc用于提出需求,pvc通过storageclass调用nfs存储插件。

6.2 操作实践

第一步 创建数据同步的目录和文件

第二步 修改nfs配置文件

第三步 创建账号和角色权限,并且绑定角色与账号

第四步 创建nfs存储插件(会自动创建一个pv)

由于 1.20 版本启用了 selfLink,所以 k8s 1.20+ 版本通过 nfs provisioner 动态生成pv会报错,因此要修改apiversion的yaml文件


第五步 创建storageclass

第六步 创建pvc

第七步 创建pod

第八步 验证

在nfs客户端的共享存储目录中创建一个文件

查看容器的/mnt目录下有没有文件

(成功将共享文件传入pod容器)

总结

本文重点讲解k8s集群数据存储的几种方式,大家都知道k8s数据是非常重要的,一旦丢失,那么集群中的所有业务都会停止运行,因此数据存储就显得非常重要。希望本文内容能对您有所帮助,谢谢观看😜

相关推荐
optimistic_chen2 小时前
【Docker入门】namespace 空间隔离
linux·运维·docker·容器·空间隔离
填满你的记忆2 小时前
【从零开始——Redis 进化日志|Day6】缓存的三剑客:穿透、击穿、雪崩,到底怎么防?(附生产级代码实战)
java·数据库·redis·缓存·面试
骇客野人2 小时前
Linux通过自动脚本自动化推送k8s Docker镜像
linux·kubernetes·自动化
侧耳4292 小时前
android9_box hdmi铺不满的问题
android·java
探序基因2 小时前
CentOS Stream release 9的Rstudio安装
linux·运维·centos
风象南2 小时前
像 ChatGPT 一样丝滑:Spring Boot 如何实现大模型流式(Streaming)响应?
java·spring boot·后端
jiaguangqingpanda2 小时前
Day23-20260119
java·开发语言
Java程序员威哥2 小时前
Spring Boot 3.x 云原生终极适配:GraalVM 原生镜像构建 + Serverless 生产级部署(完整实战+最优模板)
java·开发语言·spring boot·后端·云原生·serverless·maven
萧曵 丶2 小时前
Kubernetes(k8s)搭建指南
云原生·容器·kubernetes