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

【kubernetes】持久化存储 —— nfs,emptyDir,hostPath

一,概要

1,实现步骤

想要使用存储卷,需要经历如下步骤
1、定义pod的volume,这个volume指明它要关联到哪个存储上的
2、在容器中要使用volumemounts挂载对应的存储

2,常用存储类型

# kubectl explain pods.spec.volumesemptyDir	<Object>   # 临时目录,随之删除
hostPath	<Object>   # 宿主机目录
nfs	        <Object>
persistentVolumeClaim	<Object>
glusterfs	<Object>
cephfs	    <Object>
configMap	<Object>
secret	    <Object>

二,应用

(1)emptyDir类型

在宿主机上,创建临时目录作为存储地址。当pod删除后,该临时目录一并删除。

# cat emptydir.yaml apiVersion: v1
kind: Pod
metadata:name: name-emptydir
spec:containers:- name: pod-emptydirimage: nginximagePullPolicy: IfNotPresentvolumeMounts:       # 定义pod的目录参数- name: pod-volume  # 目录名字必须与volumes的名字相同mountPath: /cache # pod内的指定的挂在目录volumes:              # 定义宿主机目录参数- emptyDir: {}        # 设定宿主机指定临时目录name: pod-volume    # 目录名字必须与 volumeMounts名字相同

【查找临时目录的位置】:

第一步:查找uid

kubectl get pods name-emptydir -o yaml | grep uiduid: a105fca2-b82c-46c2-8ba3-e0aa3f528540

第二步:在pod分配node节点拼接路径

/var/lib/kubelet/pods/ + uid值 可以通过tree命令向下查找

完整地址
第三步:测试内容同步
在这里插入图片描述

缺点:
pod删除,数据删除。

(2)hostPath类型

hostPath Volume是指Pod挂载宿主机上的目录或文件。
hostPath Volume使得容器可以使用宿主机的文件系统进行存储,

hostpath(宿主机路径):节点级别的存储卷,在pod被删除,这个存储卷还是存在的,不会被删除,所以只要同一个pod被调度到同一个节点上来,在pod被删除重新被调度到这个节点之后,对应的数据依然是存在的。

# cat hostpath.yamlapiVersion: v1
kind: Pod
metadata:name: test-hostpath
spec:containers:- image: nginximagePullPolicy: IfNotPresentname: test-nginxvolumeMounts:- mountPath: /test-nginxname: test-volume    # 与volumes的名称一致- image: tomcat:8.5-jre8-alpineimagePullPolicy: IfNotPresentname: test-tomcatvolumeMounts:- mountPath: /test-tomcatname: test-volume    # 与volumes的名称一致volumes:- name: test-volume      # 与容器pod的名称一致hostPath:           path: /data1         # 宿主机的路径type: DirectoryOrCreate  # 查看下面图说明:

在这里插入图片描述

进入到指定pod内的指定容器内:

kubectl exec -it test-hostpath -c test-tomcat -- /bin/bash

缺点:
单节点。 pod删除之后,数据虽然没有丢失,但是重新创建的pod,必须调度到同一个node节点,数据才会还原。

(3)nfs类型
一,安装NFS:网络文件系统。

第一步:在master和其他node节点安装NFS

yum install nfs-utils -y
systemctl start nfs
systemctl enable nfs --now
systemctl status nfs

第二步:在master节点配置NFS

# 在宿主机创建NFS需要的共享目录
mkdir /data/volumes -pv # vim /etc/exports
/data/volumes *(rw,no_root_squash)# 保持生效
exportfs -arv
service nfs restart
  • rw 该主机对该共享目录有读写权限
  • no_root_squash 登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限

第三步:在node01上,手动测试 挂载/卸载

【挂载】:

mkdir /test 
mount 192.168.40.180:/data/volumes /test/# 如果执行如下命令,查看挂载卷,说明nfs可以被正常挂载
df -h
192.168.40.180:/data/volumes   50G  5.2G   45G  11% /test

挂载成功

【卸载】:

umount /test
二,创建Pod,挂载NFS共享出来的目录。
# cat nfs.yaml apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-test
spec:replicas: 3selector:matchLabels:cunchu: nfstemplate:metadata:labels:cunchu: nfsspec:containers:- name: test-nfsimage: xianchao/nginx:v1imagePullPolicy: IfNotPresentports:- containerPort: 80protocol: TCPvolumeMounts:- name: nfs-volumes    # 与指定的卷名称一致mountPath: /usr/share/nginx/htmlvolumes:- name: nfs-volumes      # 卷名称nfs:server: 192.168.40.180   # 服务主机ip,此处为master主机ippath: /data/volumes      # 与之前创建的nfs的共享卷地址一致

删除其中一个pod,自动生成的pod后,依然数据可以访问。
在这里插入图片描述

缺点:
单节点。 存储节点一单宕机,所有pod共享数据集,均丢失。


http://www.mrgr.cn/news/19219.html

相关文章:

  • Linux编程学习记录
  • ffmpeg音视频开发从入门到精通——ffmpeg实现音频抽取
  • c++ 156函数
  • MySQL高阶语句(一)
  • DrissionPage设置启动浏览器为edge
  • C高级编程 第十四天
  • 编译工具链【持续更新中】
  • mac 安装brew并配置国内源
  • Linux【1】基础
  • windows11交叉编译ffmpeg的android版本库
  • AFFiNE简介
  • 深入理解 JavaScript DOM 操作
  • LLM agentic模式之multi-agent: ChatDev,MetaGPT, AutoGen思路
  • Xilinx系FPGA学习笔记(三)Vivado的仿真及ILA使用
  • 科研绘图系列:python语言制标准差的直方图(STD histogram plot)
  • 域名证书,泛域名证书,sni
  • 解释 JVM 的内存模型(堆、栈、方法区等),并简述如何通过调整 JVM 参数来优化应用程序的性能?
  • 深度学习从入门到精通——yolov3算法介绍
  • Datawhale X李宏毅苹果书进阶 AI夏今营 task03学习笔记
  • 【重学 MySQL】二、MySQL 介绍