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

K8S Pod 常见数据存储方案

 假设有如下三个节点的 K8S 集群:

k8s31master 是控制节点

k8s31node1、k8s31node2 是工作节点

容器运行时是 containerd

一、理论介绍

1.1、Volumes 卷

Kubernetes 的卷是 pod 的⼀个组成部分,因此像容器⼀样在 pod 的规范(pod.spec)中就定义了。它们不是独立的 Kubernetes 对象,也不能单独创建或删除。pod 中的所有容器都可以使用卷,但必须先将它挂载在每个需要访问它的容器中。在每个容器中,都可以在其文件系统的任意位置挂载卷。

通过上面的描述,我们知道了使用卷的两个步骤:

  1. 在 .spec.volumes 字段中设置为 Pod 提供的卷。
  2. 在 .spec.containers[*].volumeMounts 字段中声明卷在容器中的挂载位置。

1.2、为什么需要? 

总结:

  1. 数据持久性。容器的文件在磁盘上是临时存放的,当容器崩溃重启或被删除时,数据也会随之丢失。
  2. 共享存储。多个容器之间共享文件数据。

1.3、常用卷类型

emptyDir、hostPath、nfs、persistentVolumeClaim、configMap、secret。

kubectl explain pod.spec.volumes

二、emptyDir 卷类型

  • emptyDir 类型的 Volumes 是在 Pod 被指派到某节点时被创建。
  • 就像其名称所表示的那样,emptyDir 卷最初是空的。
  • Kubernetes 会在节点上自动分配一个目录,因此无需指定节点上对应的目录文件。
  • 当 Pod 因为某些原因被从节点上删除时,emptyDir 卷中的数据也会被永久删除。

2.1、实践

定义一个 Pod,里面有两个容器:一个 nginx,一个 alpine。

alpine 每隔3秒往容器目录 /data 生成一个 index.html。

nginx 读取这个 index.html 作为首页。

apiVersion: v1
kind: Pod
metadata:name: emptydir-pod
spec:volumes:- name: sharediremptyDir: {}containers:- name: html-generatorimage: alpine:latest  imagePullPolicy: IfNotPresentcommand: ["/bin/sh", "-c", "while true; do echo \"您好,现在时间是 $(date)\" > /data/index.html; sleep 3; done"]volumeMounts:- name: sharedirmountPath: /data- name: nginximage: nginx:1.14.2imagePullPolicy: IfNotPresentvolumeMounts:- name: sharedirmountPath: /usr/share/nginx/htmlreadOnly: trueports:- containerPort: 80protocol: TCP
  • emptyDir: {} 表示这是一个空卷。
  • command: ["/bin/sh", "-c", "while true; do echo \"您好,现在时间是 $(date)\" > /data/index.html; sleep 3; done"] 表示容器启动的时候执行命令,该命令每隔3秒往 /data/index.html 打印当前系统时间。
  • date:这是一个用于显示或设置系统日期和时间的命令。当不带任何参数使用时,它会显示当前的日期和时间。
  • $(command):这是命令替换的语法,在 Shell 中用来获取命令执行的结果。这里的command 是指任何有效的命令。在本例中,就是 date 命令。Shell 会先运行括号内的命令,并将输出结果替换掉这个整个表达式。
  • 容器 html-generator 和容器 nginx 都挂载了相同的卷 sharedir。

  • 每隔3秒请求 Pod IP

 Pod IP 是 10.244.9.1 ; Pod 被调度到 node2。

2.2、查看本机临时目录

  • 查看 pod 的 uid
kubectl get pod emptydir-pod -oyaml | grep uid

  • 进入 node2 /var/lib/kubelet/pod-uid/volumes 下

http://www.xdnf.cn/news/172675.html

相关文章:

  • Lua 第12部分 日期和时间
  • PH热榜 | 2025-04-27
  • HTML倒数
  • java 类的实例化过程,其中的相关顺序 包括有继承的子类等复杂情况,静态成员变量的初始化顺序,这其中jvm在干什么
  • xe-upload上传文件插件
  • WPF常用技巧汇总 - Part 2
  • Qt项目全局设置UTF-8编码方法(MSVS编译中文报错解决办法)
  • 新能源汽车运动控制器核心芯片选型与优化:MCU、DCDC与CANFD协同设计
  • 设计一个新能源汽车控制系统开发框架,并提供一个符合ISO 26262标准的模块化设计方案。
  • Java高频常用工具包汇总
  • [特殊字符]实战:使用 Canal + MQ + ES + Redis + XXL-Job 打造高性能地理抢单系统
  • Spark Mllib 机器学习
  • 第二章,网络类型及数据链路层协议
  • SMART:大模型在关键推理步骤辅导小模型,在保持高推理效率的同时,显著提升小模型的推理能力!!
  • python合并一个word段落中的run
  • 决策树相关案例
  • 【Node.js 】在Windows 下搭建适配 DPlayer 的轻量(简陋)级弹幕后端服务
  • Linux系统之设置开机启动运行桌面环境
  • 力扣hot100_子串_python版本
  • Nginx配置文件介绍
  • 机器学习day2-seaborn绘图练习
  • 数模学习:二,MATLAB的基本语法使用
  • 跨专业自学AI人工智能学习路线图(2025版)
  • Android完整开发环境搭建/Studio安装/NDK/本地Gradle下载配置/创建AVD/运行一个Android项目/常用插件
  • 金融数据分析(Python)个人学习笔记(13):自然语言处理
  • Kubernetes学习笔记-配置Service对接第三方访问
  • 【Redis】服务端高并发分布式结构演进之路
  • 零基础小白如何上岸数模国奖
  • IDEA 连接 Oracle 数据库
  • 安卓7.0以上抓包配置--Charles