Administrator
发布于 2026-08-15 / 7 阅读
0
0

第七章.k8s存储-Secret-2

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=0e85828f19fba96334ebaebea2da3e2f&p=46

第七章 k8s存储 - Secret 小节笔记

1. 前置实验准备

  • 本小节实验基于已提前创建的MySecret对象展开,无需重复创建Secret资源
  • 为避免资源冲突,先清理已有的Deployment控制器、对应Service等旧资源,确认集群无其他运行中的应用后删除旧实验Pod,避免后续实验混淆

2. Secret使用方式1:环境变量(ENV)注入

  • 创建Pod资源清单,通过env字段引用MySecret中的键值对,将Secret内容注入为容器的环境变量
  • 验证方式:进入容器执行kubectl exec -it <Pod名称> -- env命令,可看到testPassword、testUser等环境变量的值已经是MySecret中base64编码解码后的明文(如admin、EFRDEE)
  • 核心特性:Secret的value在创建时需要通过base64编码,但注入到容器环境变量时会自动解码为明文,无需额外处理

3. Secret使用方式2:Volume卷挂载

3.1 基础全量挂载

  • Pod资源清单中声明secret类型的Volume,指定关联的Secret名称为MySecret;在容器的volumeMounts配置中将Volume绑定到容器的指定路径(如根目录下的/data目录)
  • 创建Pod后进入容器查看/data目录,会发现存在和Secret中键同名的文件(如your_name、password),文件内容是对应值的解码后明文(admin、EFRDEE)

3.2 特殊挂载配置

3.2.1 自定义挂载文件权限(defaultMode)
  • 在声明Secret类型的Volume时,可通过defaultMode参数设置挂载文件的权限,参数值为八进制权限掩码转换后的十进制值:
    • 八进制400(对应权限-r--------)转换为十进制为256
    • 八进制644(对应权限-rw-r--r--)转换为十进制为420
  • 演示验证:设置defaultMode为256,查看挂载的/data/password文件权限为-r--------,符合预期
3.2.2 items.path单键子路径挂载
  • 若不需要挂载Secret的全部键值对,可仅指定单个键进行挂载,且可自定义挂载后的文件名和路径
  • 演示验证:仅挂载MySecret中的your_name键,挂载到容器/my_group/my_your_name路径下,文件内容为解码后的admin
  • 注意:最新版本的kubernetes的secret单键子路径挂载支持热更新,挂载的是普通文件而非符号链接,Secret内容更新,挂载的文件内容也会自动同步

4. Secret热更新特性

  • 生效场景:仅非子路径的Volume挂载方式支持热更新;env环境变量注入、volumeMounts.subPath 单文件粘合、envFrom 一次性批量注入挂载方式均不支持热更新,内容为挂载/注入时的快照,不会随Secret更新变化
  • 更新规则:非子路径Volume挂载方式下,kubelet会周期性检查Secret是否有更新,但会优先使用本地缓存的值,因此Secret更新后到容器内生效会有一定延迟
  • 失效场景:环境变量注入的方式使用Secret时,直接使用初始值,完全不会感知后续Secret的变化

5. Secret的immutable不可变字段

5.1 核心作用

  • 将Secret的immutable字段设置为true后,Secret会被标记为不可变状态,带来两个收益:
    1. 防止意外、非预期修改Secret内容导致业务故障
    2. kube-apiserver不需要再监听该Secret的变化,降低API Server负载,提升集群性能
  • 适用前提:仅适用于生命周期内不需要修改的Secret场景

5.2 限制规则

  • immutable字段一旦设置为true后不可逆,无法再修改为false;如果需要修改Secret内容,只能删除该Secret后重新创建同名的、未开启immutable的Secret

5.3 演示验证

  1. 先修改MySecret的your_name值为base64编码后的薪享宏福,验证非子路径挂载的Volume会在数秒延迟后更新为新值,证明热更新生效
  2. 给MySecret添加immutable: true标记,再次尝试修改Secret内容,kubectl edit会直接拒绝保存,修改内容会被回滚到更新前的值,验证不可变特性生效

AI 总结

本小节围绕Kubernetes Secret资源展开实操讲解,系统梳理了Secret的两类使用方式(环境变量注入、Volume挂载)、Volume挂载的两个特殊配置(自定义文件权限、单键子路径挂载)、热更新的适用规则与延迟机制,以及immutable不可变字段的作用、限制与适用场景,通过完整的实验演示验证了各特性的实际表现,帮助学习者掌握Secret在云原生场景中的正确使用方法与注意事项。


评论