14|ConfigMap/Secret:怎样配置、定制我的应用
- 深入了解
- 翻译
- 解释
- 总结
Kubernetes中的ConfigMap和Secret是管理应用配置信息的重要对象。ConfigMap用于保存明文配置,而Secret用于保存敏感信息。通过YAML文件创建ConfigMap和Secret对象,并使用kubectl命令管理它们。这些对象可以通过环境变量或加载文件的方式注入到Pod中,以便应用程序读取配置信息。文章详细介绍了ConfigMap和Secret的创建和使用方法,包括以环境变量和Volume的方式使用它们。通过示例和图表,读者可以清晰了解如何在Pod中使用ConfigMap和Secret,以及它们与应用的解耦关系。总结了ConfigMap和Secret的异同点,并提出了两个思考题作为课下作业。整体而言,本文深入浅出地介绍了Kubernetes中配置管理的重要概念和实践方法,适合读者快速了解和掌握相关知识。
《Kubernetes 入门实战课》,新⼈⾸单¥59
全部留言(34)
- 最新
- 精选
- 江湖十年ConfigMap 和 Secret 对存储数据的大小是有限制的,限制为 1MiB,官方文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/#motivation
作者回复: 感谢补充。
2022-07-22248 - 陶乐思用env和volume两种方式创建的pod都尝试了,修改了ConfigMap/Secret 的 YAML后 kubectl apply,Pod里的value并不会改变。 所以这两种方式在创建pod的时候,其实都是一次性拷贝,POD controller manager只会管理POD这个层级,并不会发现POD之下层级发生的变化。
作者回复: good
2022-07-23327 - 朱雯1. configmap 和secret相同点有很多,其中一点就是键值对数据存储。不同点就是一个加密,一个不加密,但是secret只支持base64加密吗,可以支持其他格式加密吗?如果都是base64加密,存在破解的可能性吗。是否不安全,如果不是可以选择不同的加密方式,会不会安全点。 2. 我看大家的答案是pod并不会修改里面的值,可我测试的结果是env-pod确实不会修改值,实际上应该是大家说的一次性拷贝,但另外一个vol-pod我测试的结果是,会改变值啊,难道我测试的方式有什么问题吗?
作者回复: 1.base64只是一种编码方式,不是加密,Kubernetes里可以配置成对secret加密。 2.环境变量是pod启动时注入的,所以不会改,volume的方式会改,两种方式不一样。
2022-07-27218 - 星垂平野阔把configmap挂进了pod里面,然后重新deploy了下configmap,发现pod里面的变量还是原来的,没有同步更新。 个人猜测应该是挂载的同时已经把configmap的内容引入pod内部,除非pod重启,不然不会随着它更新。
作者回复: great
2022-07-2227 - Jasper迫不及待的看完,期待下一节
作者回复: nice
2022-07-226 - 霍霍相见恨晚,老师带着,感觉k8s的概念学起来轻松愉快
作者回复: great.
2023-02-17归属地:陕西4 - lesserror老师,有几个小问题: 1. 像配置这块儿,有多少个不同类型的配置,就需要定义多少个不同的Volume进行挂载吗?例如ConfigMap 和 Secret 这里挂载了两个Volume。 2. vol-pod 0/1 CrashLoopBackOf 当pod变成这个状态的时候,只能删除了再重新创建吗? 使用命令 :kubectl delete -f vol-pod.yml。 3. 课外小贴士的最后一条,没太明白,老师能再说说看吗?
作者回复: 1.是的,一个对象只能挂成一个volume。 2.是的,不过删之前最好用describe看看它为什么出错,不然可能删除后也不能恢复。 3.加载volome的文件名就是ConfigMap、secret的key名,有的时候就不合适,可以用这种方式来改名。
2022-08-01归属地:北京4 - 郑小鹿课后问题回答: 1、说一说你对 ConfigMap 和 Secret 这两个对象的理解,它们有什么异同点? 相同点: 都可以用来把配置数据和服务程序分离 都是一种用于存储的API对象 都以键值对k-v的方式存储数据 都可以作为数据卷挂载在其他API对象上使用 都不适合存储大数据,每个 ConfigMap /Secret 最多支持存储1MB的数据,毕竟对内存有消耗 不同点: ConfigMap一般存储非机密信息 Secret用于存储机密信息,默认是Base64编码方式对value字符进行处理。 Secret保存在etcd中内容是未经过加密的,对于Secret资源的权限要做好控制,可以通过RBAC规则来限制或者是使用其他加密方式 2、如果我们修改了 ConfigMap/Secret 的 YAML,然后使用 kubectl apply 命令更新对象,那么 Pod 里关联的信息是否会同步更新呢?你可以自己验证看看。 如果 ConfigMap 是作为环境变量方式使用的,那数据不会被自动更新。 想要更新这些数据需要重新启动 Pod。
作者回复: great
2022-07-28归属地:北京34 - pyhhou想请教老师几个问题: 1、`echo -n "123456" | base64` 加 -n 仅仅是为了去掉换行符吗,`"123456"` 中并没有换行符,为什么加 -n 与不加 -n 的结果有区别? 2、构建 Pod 的时候,Secret 中的变量会被自动解码,K8S 是如何知道该用何种方式进行解码?需要通过 Secret 对象中的参数进行指定吗?
作者回复: 1. echo会默认加上一个换行符,看不到但是有,所以-n就可以去掉。 2.Secret的规范就是用base64编码,所以不需要指定。
2022-07-2324 - 罗耀龙@坐忘yaml文件还真不好写,我对着课文写minikube运行不了,用老师的一下就过了
作者回复: 一开始肯定容易写错,特别是多个嵌套字段的层次,可以先用kubectl create创建样板,写多了就熟能生巧。
2022-07-223