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

文章目录

  • [k8s热更新-subPath 不支持热更新](#k8s热更新-subPath 不支持热更新)
    • 背景
    • [subPath 不支持热更新](#subPath 不支持热更新)
    • [1. 为什么 subPath 不支持热更新?](#1. 为什么 subPath 不支持热更新?)
    • [2. 挂载整个目录为何支持热更新?](#2. 挂载整个目录为何支持热更新?)
    • [使用demo举例:挂载整个目录(不使用 subPath)](#使用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 挂载到容器

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

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod
spec:
  containers:
  - name: mycontainer
    image: nginx
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config          # 目录
  volumes:
  - name: config-volume
    configMap:
      name: my-configmap             # 使用的 ConfigMap 名
相关推荐
Thneonl39 分钟前
Flink Operator 的隐藏陷阱:容器名不是你以为的那个
安全·kubernetes
Thneonl39 分钟前
kubectl scale ds 是个 404:DaemonSet 没有 replicas
安全·kubernetes
穷人小水滴40 分钟前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
AKAMAI1 小时前
随着瓦尔·基尔默的AI分身诞生,生成式AI是否正在将好莱坞推向边缘?
人工智能·云原生·云计算
暗不需求1 小时前
Docker 入门:从「光盘与 DVD」到全栈项目容器化实战
docker·容器·面试
AllFiles1 小时前
K8s Node Exporter 异常 Write 超时排查实录
运维·后端·kubernetes
Thneonl1 小时前
etcd 不只是数据库:K8s 控制面的命脉
后端·kubernetes
探索云原生1 小时前
一个 Deployment 就能跑 vLLM,为什么还需要 KServe?
docker·ai·云原生·kubernetes·go
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS5 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储