原来是用单机容器部署的, 现在要上 k8s,遇到两个问题
原来容器里要读取配置文件, 放在 K8S 上是直接把所有配置项写在 ConfigMap 里吗? (把镜像里配置文件对应的值替换为环境变量, 然后用 ConfigMap 设置环境变量?)
原来的容器(A)会依赖另一个容器做日志读取(B), 那在 K8S 里是分成两个 Deployment, 分别部署 A 和 B 还是用一个 Deployment 呢
1
chenset 2021-12-10 08:58:40 +08:00 1
1. 配置中心 /随镜像打包 /ConfigMap/目录共享
2. 两种都可以, 看自己需求 或者使用 DaemonSet 这些都不是唯一解的 |
2
qping 2021-12-10 09:26:28 +08:00 1
2. 放一个 deployment 的好处是,启动的时候 deployment 会同时启动两个, 如果需要多个 AAAAA 依赖于一个 B 就分成两个 deploy 吧
|
3
xx6412223 2021-12-10 10:22:03 +08:00
1 不同环境的镜像应该一致,配置不一致,K8S 最佳实践就是放 CM 里,为了不改变代码,可以错 volumeMount
2 一个 Deployment 就是一个微服务,如果 AB 不是一一对应,就多个 Deployment |
4
basefas 2021-12-10 10:24:29 +08:00
需要看下原来的日志采集容器有没有特殊规则或者使用,否则可以考虑部署 k8s 集群的日志采集工具统一采集
|
5
qq1009479218 2021-12-10 10:27:39 +08:00 1
1. 如果读取的是文件配置的话,不用环境变量,把文件内容写进 configMap ,挂载到容器的对应目录就行
2. 看 B 是不是只为 A 提供服务,如果是的话,建议一个 Deployment ,当然,两种都行 和一楼说的一样,确实可以随意一点,怎么快怎么来,怎么简单怎么来 |
6
zhanggg 2021-12-10 10:31:58 +08:00 1
1. ConfigMap mount 到 deploy 里成为一个文件,这样在 deploy 里起的 pod 能直接读到文件(也可以直接把配置写进 deploy 的 env 配置,程序通过 env 读
2. 如果你的依赖指的就是 A 生成的日志 B 读取,且 B 的功能仅有读日志功能,那建议放在一个 deploy 里面,通过一个 volumn 挂载到两个 pod 里面去,这样相当于直接有了共享目录 |
7
Alliot 2021-12-10 10:35:53 +08:00 via Android
第一题 configMap 或者 volume 或者配置中心
第二题 为了灵活可以用边车模式 一个 deployment 里面跑两个容器 和 docker 之前无异。 |
10
goushenggege 2021-12-10 13:45:57 +08:00
1 是的
2 有多种方式,甚至用边车都可以 |
11
fisherwei 2021-12-10 14:37:46 +08:00 1
@Davic1
configmap 有两种用法 1 、把 configmap 每一项当作一个文件映射为 pod 内的某个路径的某个文件(这文件是只读的) 2 、把 configmap 每一项当作一个 env 注入 pod 没有什么优缺点,看你的 pod 内跑的应用是怎么设计的。 |
12
amrom 2021-12-10 15:02:27 +08:00
虽然方案有很多组合,但是我比较倾向于以下:
1. 全部配置以 configmap 存在 2. 一个 deployment 对应一个服务,服务间的日志共享用 pv 实现 |
13
swulling 2021-12-10 15:13:44 +08:00
一个 Pod 里可以放多个容器~
|
14
az467 2021-12-11 01:25:14 +08:00
1.使用 SubPath 是不会更新,但是 Env 也不会更新啊。而且修改配置之后一般都是要重启的吧……
2.如果 A 和 B 合起来对外提供一个服务,那就用一个 Deployment 。 |
15
dayeye2006199 2021-12-11 03:13:49 +08:00
ConfigMap 变更之后需要重启服务,有几种办法;
1. 手动模式 kubectl rollout restart xxxxx 重新启动 deployment 2. 需要将 deployment 指向一个新的 configmap 才能触发更新;例如老的 configmap 叫 config1 ,新的更改了里面的部分值之后,重命名成 config2 ,然后 deployment 里面指向 config2 。 一些做 release 管理的工具,例如 kustomize 用的是方法 2 ; helm 用的是生成一个 configmap hash 的 annotation 放在 deployment 上;每次 configmap 内容变更之后,这个 annotation 也会变更,所以会触发 deployment 自动更新 |