老问题,现在流行什么方法管理多个环境下的 k8s 项目

2021-10-29 14:39:28 +08:00
 huangmingyou
我只比较过 helm 和 kustomize ; 简单的使用了一下 kustomize, 发现好多想要的功能都没有。这两个项目都是聚焦管理单个项目。
对于普通企业来说,更需要的是管理多个项目,并且每个项目之间的差异很小。还有一点就是多环境下的项目,有些全局的配置不一样,比如 hostsalias.我发现用 kustomize 要修改类似 hostsalias 的值就比较麻烦。也不是说不能实现,就是很麻烦。别扭。需要用到 patchesJson6902 这样的方式。
helm 2.0 时代看过,那时候要安装一个组件到 k8s, 就放弃了。3.0 似乎不用安装了。

目前我自己是用 yaml 管理这些需要修改的值,然后通过 sed 方式替换到 deploy.yaml 和 service.yaml.

我就想问下,有什么好的解决方案吗?
3723 次点击
所在节点    Kubernetes
25 条回复
Rubbick
2021-10-29 17:07:00 +08:00
我是环境变量注入+配置中心
simon7878
2021-10-29 17:14:27 +08:00
helm3+values 定制方式可以的吧,实际就是把变化的部分拎出来单独管理,实现自动化。
liuxu
2021-10-29 17:15:10 +08:00
我是一个 helm 包下面多个 values.yaml ,helm 可以指定 value 文件 --values xx.yaml
vast0906
2021-10-29 17:24:47 +08:00
我们是 jenkins + ansible + k8s 发布的。。ansible 的 template
YzSama
2021-10-29 17:35:41 +08:00
helm 做一个包,通过环境变量注入。
jeffreystoke
2021-10-29 18:41:38 +08:00
同样的痛点, 我一直觉得 kustomize 的路走错了, helm 更适合需要大量动态调整的复杂部署 (可能是我看问题的高度不够?)

为了解决这个问题, 外加需要管理多个仓库里的 yaml 配置并且实现重用以便统一结果, 我自己开发了一个工具 dukkha, 但是目前还没有实际用到生产环境中 (项目地址: https://github.com/arhat-dev/dukkha )

对应到你的需求可以用 dukkha 这么管理:

首先给不同环境创建 host-alias.yml 文件

production 环境: inventory/production/host-alias.yml

```yaml
- hostnames:
- production-foo
ip: ...
```

dev 环境: inventory/dev/host-alias.yml

```yaml
- hostnames:
- dev-foo
ip: ...
```

```yaml
apiVersion: v1
kind: Pod
spec:
hostAliases@env|file: inventory/${ENVIRONMENT}/host-alias.yml
```

把目录结构建好, 然后在不同环境里面设置好 ENVIRONMENT 变量 (production/dev) 即可使用 `dukkha render` 进行渲染

有进一步了解需求的话, 可以看项目里的文档, 应该是够用的

另外如果想深入讨论相关内容的, 欢迎邮件到 aW5xdWlyaWVzQGFyaGF0LnNvbHV0aW9ucw== , 内容需要注明 v2 用户名以及一个可交叉验证身份的第三方平台链接 (如 github 用户链接)
locoz
2021-10-29 20:07:19 +08:00
试试 flux ?虽然我只有一个环境,但是按官方文档的说法是方便管理多环境用的。
huangmingyou
2021-10-29 21:13:59 +08:00
@jeffreystoke 看上去不错,我研究研究
huangmingyou
2021-10-29 21:14:32 +08:00
@locoz 不错的项目,先看看
huangmingyou
2021-10-29 21:21:27 +08:00
@locoz 看了一下,这个工具对我的需求来说太重了,这看上去是一个野心很大的工具,啥都想管,而且有点类似 ansible 的思路,让配置和运行状态保持同步。
huangmingyou
2021-10-29 21:38:19 +08:00
@jeffreystoke 用下面的命令测试一下,KENV=pro dukkha render my.yml ;
符合预期,具体到 k8s 的场景,我还的研究下怎么组织文件,可能需要组合 4 ,5 个文件。 看上去比较方便,似乎还能支持执行脚本?
jeffreystoke
2021-10-29 22:15:15 +08:00
@huangmingyou 是的,还支持从远程 http 服务拉取配置,以及 git ssh 仓库抽取配置( renderer 文档部分)
RedrumSherlock
2021-10-29 23:38:34 +08:00
我们是主用 helm 的,单个 helm chart 通用的放 values.yaml ,随环境变化的放各自 profile 的 values.yaml ,多个 chart 公用的通过环境变量用 helm 的 set 来做,目前体验还行
zqcolor
2021-10-30 00:01:44 +08:00
argocd + helm
plko345
2021-10-30 00:51:58 +08:00
helm 完全能解决你的问题
huangmingyou
2021-10-30 08:36:05 +08:00
对于企业内部部署,能管理生成 yaml 基本够用了,用 helm 感觉有点重,每次一看 helm 文档,就看到大堆的文件需要定义就头大。
37Y37
2021-10-30 09:15:13 +08:00
我们全部给做成系统了,任务系统,通过不同变量(环境 /项目)动态创建,https://blog.ops-coffee.cn/s/U88HPUYiVDar-7yBx3IoIA
zhaoyeye
2021-10-31 02:52:33 +08:00
@vast0906 老哥给个链接指导下,我们也准备这么做,但是没有一点思路。
vast0906
2021-11-01 09:08:04 +08:00
@zhaoyeye deployment 之类的写到 template 里面,不同应用拥有自己的 vars.json ,在执行 playbook 的时候 -e 选择相对应的 vars.json
huangmingyou
2021-11-01 09:23:04 +08:00
@vast0906 var 文件可以用多个吗,例如把项目的 var 和环境的 var 带入到 templte . 能发一下文件目录的组织结构例子吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/811528

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX