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

k8s热更新-subPath 不支持热更新

文章目录

  • k8s热更新-subPath 不支持热更新
    • 背景
    • subPath 不支持热更新
    • 1. 为什么 subPath 不支持热更新?
    • 2. 挂载整个目录为何支持热更新?
    • 使用demo举例:挂载整个目录(不使用 subPath)

k8s热更新-subPath 不支持热更新

背景

在 Kubernetes 中,Pod 可以通过 Volume 将宿主机(或 PV/PVC)中的文件/目录挂载到容器内。
subPath 是一个常用的功能,允许你只挂载 Volume 的某一个子目录或文件到容器的指定路径。

使用 subPath 存在一个容易踩坑的问题:热更新(文件在宿主或 PVC 中发生变化,容器内不会感知)。实在有 subPath 的场景,通过重启 Pod 方式实现刷新挂载

subPath 不支持热更新

官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#mounted-configmaps-are-updated-automatically

  • 只有目录挂载才支持热更新,subPath 方式热更新无效。

将热更新配置与非热更新配置分离到不同 ConfigMap,是推荐的 Kubernetes 最佳运维实践。

  • 主配置还是 subPath 就好,防止热更新误操作和触发程序 reload。

1. 为什么 subPath 不支持热更新?

  • subPath 文件挂载时,Kubernetes 会在 Pod 启动时,将指定的 ConfigMap/Secret 文件拷贝一份到容器的本地文件系统(通常是临时目录)。

  • 这个本地物理文件和 ConfigMap/Secret 之间不再有链接,后者发生内容变化不会影响这份副本。

  • 目的是防止多个 subPath 指向同一份数据时的可疑行为,且保证容器文本独立性。

  • 所以无论你 kubectl apply 或 helm upgrade 更新 ConfigMap,subPath 文件内容都不会热更新,除非重启/重建 Pod。

2. 挂载整个目录为何支持热更新?

mountPath:批量挂载目录,支持自动更新(需配合应用或工具)。

  • 如果你把整个目录 mount 到容器(不用 subPath),其实是把一个由 kubelet 管理的 “投影目录” 映射进容器。
  • ConfigMap/Secret 变更时,kubelet 会自动在该目录生成新版本临时文件,并切换符号链接,所有容器中读取到的就是最新内容。

使用demo举例:挂载整个目录(不使用 subPath)

ConfigMap 可作为 volume 挂载到容器
优点:挂载目录内的任何变化都能同步给容器(支持热更新)。

apiVersion: v1
kind: Pod
metadata:name: configmap-pod
spec:containers:- name: mycontainerimage: nginxvolumeMounts:- name: config-volumemountPath: /etc/config          # 目录volumes:- name: config-volumeconfigMap:name: my-configmap             # 使用的 ConfigMap 名
http://www.lryc.cn/news/2401220.html

相关文章:

  • Redis Sorted Set 深度解析:从原理到实战应用
  • docker中组合这几个命令来排查 import 模块失败 的问题
  • 若依框架修改模板,添加通过excel导入数据功能
  • web全栈开发学习-01html基础
  • 基于Socketserver+ThreadPoolExecutor+Thread构造的TCP网络实时通信程序
  • [Java 基础]枚举
  • 多线程环境中,如果多个线程同时尝试向同一个TCP客户端发送数据,添加同步机制
  • 【含文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现
  • 贝叶斯优化+LSTM+时序预测=Nature子刊!
  • NodeJS全栈WEB3面试题——P3Web3.js / Ethers.js 使用
  • Quick UI 组件加载到 Axure
  • Vue3(ref与reactive)
  • Starrocks中RoaringBitmap杂谈
  • 通过ca证书的方式设置允许远程访问Docker服务
  • 涂胶协作机器人解决方案 | Kinova Link 6 Cobot在涂胶工业的方案应用与价值
  • 理解继承与组合的本质:Qt 项目中的设计选择指南
  • 新手小白使用VMware创建虚拟机安装Linux
  • 使用 PHP 和 Guzzle 对接印度股票数据源API
  • EscapeX:去中心化游戏,开启极限娱乐新体验
  • 使用PyQt5的图形用户界面(GUI)开发教程
  • STM32实战:智能环境监测站设计方案
  • 猎板硬金镀层厚度:新能源汽车高压系统的可靠性基石
  • KEYSIGHT是德科技 E5063A 18G ENA系列网络分析仪
  • VR 虚拟仿真工器具:开启医学新视界的智慧钥匙​
  • webshell管理工具、C2远控服务器流量分析
  • JavaWeb:前端工程化-TS(TypeScript)
  • unity+ spine切换武器不换皮肤解决方案
  • [java八股文][MySQL面试篇]SQL基础
  • Ubuntu中SSH服务器安装使用
  • 【AI论文】SWE-rebench:一个用于软件工程代理的任务收集和净化评估的自动化管道