第七章 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会被标记为不可变状态,带来两个收益:- 防止意外、非预期修改Secret内容导致业务故障
- kube-apiserver不需要再监听该Secret的变化,降低API Server负载,提升集群性能
- 适用前提:仅适用于生命周期内不需要修改的Secret场景
5.2 限制规则
immutable字段一旦设置为true后不可逆,无法再修改为false;如果需要修改Secret内容,只能删除该Secret后重新创建同名的、未开启immutable的Secret
5.3 演示验证
- 先修改
MySecret的your_name值为base64编码后的薪享宏福,验证非子路径挂载的Volume会在数秒延迟后更新为新值,证明热更新生效 - 给
MySecret添加immutable: true标记,再次尝试修改Secret内容,kubectl edit会直接拒绝保存,修改内容会被回滚到更新前的值,验证不可变特性生效
AI 总结
本小节围绕Kubernetes Secret资源展开实操讲解,系统梳理了Secret的两类使用方式(环境变量注入、Volume挂载)、Volume挂载的两个特殊配置(自定义文件权限、单键子路径挂载)、热更新的适用规则与延迟机制,以及immutable不可变字段的作用、限制与适用场景,通过完整的实验演示验证了各特性的实际表现,帮助学习者掌握Secret在云原生场景中的正确使用方法与注意事项。