k8s 中的卷

news2024/12/23 23:31:03

前面的文章我们分享了 pod ,RC,RS,DaemonSet,CJ,Service 等各种资源

今天我们来分享一波如何将磁盘挂载到容器中,在 docker 里面这种技术叫做 数据卷,感兴趣的小伙伴可以查看一下文章:【Docker 系列】docker 学习六,探究一下数据卷容器

对于一个 pod ,他有自己的 CPU,RAM,网络接口等资源都是可以被 pod 里面的容器共享的,但是每一个容器是有自己独立的文件系统的,那么在我们平时使用需要使用给到文件系统的时候就会出现这个问题

举个例子

当前 pod1 运行着,产生了一些数据,由于某种原因,该 pod 被重启了(删除该 pod1 ,重新启动一个 pod2),新的 pod2 若期望继续使用前一个 pod1 产生的数据,那么这种情况是不行的

因此,卷就有了用处

卷是什么呢?

这里的就是指的数据卷,**他并不是 k8s 里面的一类资源,他只是被定义为 pod 的一部分,**他在 k8s 中也不是独立的对象,他是 pod 的一个组成部分,我们在写 pod 清单的时候,就可以使用关键字 volume 来指定卷

我们知道,一个 pod 里面可以定义多个容器,pod 里面的卷也可以被这这里面的多个容器共享对于 pod 里面的卷,也并不是每一个容器都要使用,这些都是可以按照自己的需求进行配置的

看图说话:

一个 pod 里面有 3 个容器,2 个卷,可以按照自己的需求去配置

卷的多种类型

卷的类型多种多样,不同的需求会用到不同的卷,有如下这些类型

  • emptyDIr

  • gitRepo

  • hostPath

  • nfs

  • 云服务商特定的存储类型等等

  • 特殊类型的卷

此处说的特殊类型的卷,指的是 configMap,secret,downloadApi 等类型的卷

本次分享主要是前 4 种类型的应用场景和使用方式

emptyDir ,gitRepo

emptyDir

emptyDir ,根据名称我们大概知道这是一个空目录,也就是卷是从一个空的目录开始的,咱们 pod 里面的多个容器都可以对他进行写入数据,写入一下临时的大量数据也是可行的

但是有一点我们需要注意:

emptyDir 类型的卷,会随着 pod 的启动而生成,随着 pod 的删除而消失

小案例

我们可以来模拟一下 pod 中,多个容器共享一个挂载的小案例

创建一个在卷中写数据的镜像,和创建一个从卷中读取数据的镜像

echo_uuid.sh

#~/bin/bash
mkdir /var/testuuid

while :
do
  STR=`cat /proc/sys/kernel/random/uuid`
  echo ${STR} > /var/testuuid/info.txt
  echo uuid - ${STR}
  sleep 5
done

主要功能是每隔 5 秒钟在就会输入一个 uuid 到 文件/var/testuuid/info.txt

Dockerfile

FROM ubuntu:latest
ADD echo_uuid.sh /bin/echo_uuid.sh
ENTRYPOINT /bin/echo_uuid.sh

制作镜像 echo_uuid

此处的 DockerHub 的账号,可以修改成读者你自己的,记得需要在环境中登录 docker 账号

docker build -t xiaomotong888/echo_uuid .
docker push xiaomotong888/echo_uuid

query_uuid.sh

#~/bin/bash

while :
do
  echo queryuuid:
  cat /var/testuuid/info.txt
  sleep 5
done

主要功能就是每隔 5 秒钟就会读取一下文件 /var/testuuid/info.txt 的内容

Dockerfile

FROM ubuntu:latest
ADD query_uuid.sh /bin/query_uuid.sh
ENTRYPOINT /bin/query_uuid.sh

制作镜像 query_uuid

docker build -t xiaomotong888/query_uuid .
docker push xiaomotong888/query_uuid

编写 yaml 文件:emptyDir_test.yaml

apiVersion: v1
kind: Pod
metadata:
  name: testuuiddemo
spec:
  containers:
  - image: xiaomotong888/echo_uuid
    name: echo-uuid
    volumeMounts:
    - name: uuid
      mountPath: /var/testuuid
  - image: xiaomotong888/query_uuid
    name: query-uuid
    volumeMounts:
    - name: uuid
      mountPath: /var/testuuid
      readOnly: true
  volumes:
  - name: uuid
    emptyDir: {}

上述编写一个 Pod 的清单,里面有 2 个容器,拉取的镜像分别是 xiaomotong888/echo_uuid , xiaomotong888/query_uuid ,且都挂载到 名为 uuid ,挂载路径为 /var/testuuid

这里还需要注意一点的是,query-uuid 容器 对于上述挂载路径是只读的

通过 kubectl create -f emptyDir_test.yaml 之后我们可以看到效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AFZlwBTi-1689167926458)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2c80799cd8f64b0b86986ee64e9a546b~tplv-k3u1fbpfcp-zoom-1.image)]

查看 echo-uuid 容器的日志,在 pod 里面有多个容器的时候,查看日志的方式是

kubectl logs -f podName containerName

查看 query-uuid 容器的日志

通过上述例子我们就明确了,一个 pod 里面的多个容器可以共享挂载的内容

gitRepo

gitRepo 卷,其实和 emptyDir 类似,只不过 gitRepo 卷会克隆 Git 仓库并在 pod 启用的时候检出特定的版本来填充数据,就多了这么一个步骤

简单来说就是:

上面的例子是,我们自己在指定的卷上面输出数据,而 gitRepo 就是在pod 启动的时候,去 git 仓库拉取最新的 master 分支的最新版本,放到我们挂载的目录下,如下图所示:

  1. 用户会先创建一个带有 gitRepo 卷的 Pod
  2. k8s 会创建一个空目录,然后立即从 git 仓库中拉取最新的 master 版本的数据 , 通过这一点,我们就知道,gitRepo 其实 和 emptyDir 没啥区别
  3. 拉取 git 版本后,容器便启动完毕,这是卷已经挂在挂载路径上了

通过上述步骤,细心的朋友就可以看到,gitRepo 卷从 git 仓库拉取的动作,是在 pod 启动的时候,那么 pod 在运行状态的时候,若修改了 git 仓库里面的内容,那么 pod 里面的容器是不会同步数据的

必须是一个新的 pod 才会去拉取最新的 git 最新版本内容

关于创建 pod ,配置上 gitRepo 仓库我们可以简单说一下:

apiVersion: v1
kind: Pod
metadata:
  name: testuuiddemo
spec:
  containers:
  - image: xiaomotong888/echo_uuid
    name: echo-uuid
    volumeMounts:
    - name: uuid
      mountPath: /var/testuuid
  volumes:
  - name: uuid
    gitRepo:
      repository: https://xxxxxxx.git
      revision: master
      directory: .

通过清单查看到,清单定义的前半部分内容都是一致的,主要是后面 volumes 处 的区别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3nBcTsXg-1689167926483)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1cb963e5dee3429aaea1d261a967d265~tplv-k3u1fbpfcp-zoom-1.image)]

上面这俩都是比较简单,比较基础的卷,下一篇我们分享一下持久化的存储涉及的卷

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ox153eJD-1689167926486)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/52888943cadf4d6597bea8f09f54d8de~tplv-k3u1fbpfcp-zoom-1.image)]

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/747550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDK环境配置、且运行一个简单程序

目录 JDK环境配置命令行运行java文件 JDK环境配置 下载好jdk,打开jdk下的bin,复制路径。 右击我的电脑,点击属性,找到高级系统设置,点击环境变量。 双击path,新建把路径粘贴进去即可。 打开cmd输入javac -version…

不会编程也可以制作ERP、CRM系统?

在以往的编程开发中,如果想要个人开发一款简单的ERP等流程系统,肯定是需要有编程代码的功底的,再学习编程语言和框架,又得花费大量的时间,而且不能完全确保可以做出来,毕竟编程开发有一定的门槛&#xff0c…

3d Max中的Arnold渲染为黑色,这样处理!

使用Arnold渲染视图(ARV)时,图像保持黑色。 快照功能和常规3ds Max渲染设置可按预期生成图像。 解决方案: 解决方案可能需要执行下面的一项或多项操作: 添加光源 检查场景文件是否包含光源。如果场景中没有光源,渲染结果为黑色…

通信算法之178: 通信信道模型及循环/线性卷积2

上一篇见 通信算法之159: 通信信道模型和循环/线性卷积 一. 衰减 二.多径效应--时延扩展--相干带宽 三. 时变性--多普勒扩展--相干时间 四. 频率选择性衰落,时间选择性衰落 小尺度衰落,小 五.瑞丽和莱斯信道 六循环卷积与线性卷积 线性卷积定义及计算…

C# PaddleInference OCR 表格识别

效果 项目 VS2022.net4.8OpenCvSharp4Sdcb.PaddleInferenceSdcb.PaddleOCR 测试图片 代码 using OpenCvSharp.Extensions; using OpenCvSharp; using Sdcb.PaddleInference; using Sdcb.PaddleOCR; using Sdcb.PaddleOCR.Models; using Sdcb.PaddleOCR.Models.Details; using…

netwox伪造ARP响应【网络工程】(保姆级图文)

目录 伪造ARP响应1) 在模拟之前,验证局域网中是否存在主机 192.168.43.97。在主机 B 上使用 arping 命令 ping 该主机。执行命令如下:2) 在主机 A 上伪造 ARP 响应,创建虚拟主机 192.168.43.97,设置其 MAC 地址为 A1:B…

react 初学(1)

1.安装环境 需要Node.js 自行下载安装 然后全局安装create-react-app npm install -g create-react-app 如果出现报错请参考 create-react-app -V 报错无法将“create-react-app”项识别为 cmdlet、函数、脚本文件或可运行程序的名称_Java-请多指教的博客-CSDN博客 2.创建…

尚医通04:Axios Node Npm bable webpack+前端工程改造

目录 本日学习 内容介绍 Axios Node NPM包管理器 本日学习 1. 了解Axios :他是异步请求用的,前后端。 用于在浏览器和 Node.js 中发送 HTTP 请求。它支持从服务器获取数据、上传数据以及执行其他与 HTTP 相关的操作。 2.Node:它允许你在服务器端运行 JavaScrip…

stm32(adc数模转换)

ADC介绍 ADC是什么? 全称:Analog-to-Digital Converter,指模拟/数字转换器 ADC的性能指标 量程:能测量的电压范围分辨率:ADC能辨别的最小模拟量,通常以输出二进制数的位数表示,比如&#xff1…

Leetcode每日一题:931. 下降路径最小和(2023.7.13 C++)

目录 931. 下降路径最小和 题目描述: 实现代码与解析: 动态规划 原理思路: 931. 下降路径最小和 题目描述: 给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降…

mongdb实战

概述 前言 这几天轮播图想用mongdb开发,然后就有了一下代码 效果图 源码如下 package jkw.pojo;import lombok.Data; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.index.Indexed; import org.springframewo…

【JAVA】穷词——基于嵌入式的数据库derby+BeautyEye的单词字典应用

文章目录 1. 题目2. 项目结构层次3. 环境以及技术栈说明4. 项目报告4.1软件功能描述4.2项目类图4.2.1 src层级下的类图4.2.2 data层级下的类图4.2.3 gui层级下的类图4.2.4 resource层级下的类图4.2.5 view层级下的类图4.2.6 DelWord的类图4.2.7 CustomMessageDialog的类图4.2.8…

Antd List组件增加gutter属性后出现横向滚动,如何解决

第一次使用ant design的List列表组件,设置gutter间隔属性后,页面出现了横向滚动条,查阅文档发现是由于加间隔后导致容器宽度被撑开,ant design官方默认给外层容器加了margin-left和margin-right 解决方法是在外层容器预留一定的pa…

stringstream的使用

写到290题使用stringstream简化步骤&#xff0c;学习一下使用 目录 小问题&#xff1f; 成员函数clear() 那么问题来了&#xff1f;clear在啥时候用呢&#xff1f; 数据类型转换 <sstream>库定义了三种类&#xff1a;istringstream、ostringstream、stringstream &l…

RT1176 LCDIFv2 RGB565引脚不连续

RT1052和RT1176的LCDIF&#xff0c;使用RGB565格式时PIN脚分配是连续的:LCDIF_DATA00~LCDIF_DATA15。 但RT1176的LCDIFv2并不是这样&#xff0c;使用RGB565格式时PIN脚分配不是连续的&#xff0c;而是移位填充8位*324位分配的。 RT1176 LCDIFv2 RGB565LCDIF_DATA00LCDIF_DATA0…

CVE漏洞复现-CVE-2021-36934 Windows 提权漏洞

CVE-2021-36934 Windows 提权漏洞 漏洞描述 7月20日&#xff0c;微软确认了一个新的本地提权漏洞&#xff0c;安全研究成员将其称为HiveNightmare或者SeriousSAM&#xff0c;该漏洞允许低权限的用户访问Windows系统文件。成功利用此漏洞的攻击者可以使用SYSTEM特权运行任意代…

16位ADC芯片SGM58031驱动重点

16位ADC芯片SGM58031驱动重点 文章目录 16位ADC芯片SGM58031驱动重点引脚描述时间要求I2C时序图I2C通讯描述I2C接口I2C地址选择I2C常规呼叫I2C速度模式从模式操作 寄存器指针寄存器转换寄存器配置寄存器低阈值和高阈值寄存器Config1寄存器芯片ID寄存器GN_Trim1寄存器&#xff0…

Linux(驱动编程)(调试技术)(imx6ull)

调试技术 1、在写驱动程序时函数未包含头文件 在linux内核源码driver/char目录下输入命令 grep “XXXX” * -nrw查看次函数在那个.c里用过&#xff0c;然后在vscode界面下按altp搜索这个.c就可以参考这个.c的头文件。 2、编译完驱动跟应用后先 insmod xxx.ko //插入 cat /…

原创 | SQL和 NoSQL的基本操作和查询语句

作者&#xff1a;杨金珊本文约3500字&#xff0c;建议阅读7分钟本文为你介绍SQL和 NoSQL的基本操作和查询语句。 SQL&#xff08;结构化查询语言&#xff09; SQL是用于管理和操作关系型数据库的语言。它遵循结构化模式&#xff0c;将数据组织成具有预定义关系的表格形式。以下…

告别被坑!掌握合合信息AI图像篡改检测工具,轻松识别图片造假

文章目录 一、前言1.1 背景与危害1.2会议探讨1.3 技术先行 二、亮点技术1&#xff1a;AI图像篡改检测技术2.1 传统方法Python实现步骤2.2 合合信息——PS纂改检测体验 三、亮点技术2&#xff1a;生成式图像鉴别3.1 生成式图像安全问题3.2 传统方法Python实现步骤3.2 合合信息—…