老问题,现在流行什么方法管理多个环境下的 k8s 项目 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huangmingyou
V2EX    Kubernetes

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

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

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

    我就想问下,有什么好的解决方案吗?
    25 条回复    2021-11-02 21:54:24 +08:00
    Rubbick
        1
    Rubbick  
       2021-10-29 17:07:00 +08:00
    我是环境变量注入+配置中心
    simon7878
        2
    simon7878  
       2021-10-29 17:14:27 +08:00
    helm3+values 定制方式可以的吧,实际就是把变化的部分拎出来单独管理,实现自动化。
    liuxu
        3
    liuxu  
       2021-10-29 17:15:10 +08:00
    我是一个 helm 包下面多个 values.yaml ,helm 可以指定 value 文件 --values xx.yaml
    vast0906
        4
    vast0906  
       2021-10-29 17:24:47 +08:00   1
    我们是 jenkins + ansible + k8s 发布的。。ansible 的 template
    YzSama
        5
    YzSama  
       2021-10-29 17:35:41 +08:00
    helm 做一个包,通过环境变量注入。
    jeffreystoke
        6
    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
        7
    locoz  
       2021-10-29 20:07:19 +08:00 via Android
    试试 flux ?虽然我只有一个环境,但是按官方文档的说法是方便管理多环境用的。
    huangmingyou
        8
    huangmingyou  
    OP
       2021-10-29 21:13:59 +08:00
    @jeffreystoke 看上去不错,我研究研究
    huangmingyou
        9
    huangmingyou  
    OP
       2021-10-29 21:14:32 +08:00
    @locoz 不错的项目,先看看
    huangmingyou
        10
    huangmingyou  
    OP
       2021-10-29 21:21:27 +08:00
    @locoz 看了一下,这个工具对我的需求来说太重了,这看上去是一个野心很大的工具,啥都想管,而且有点类似 ansible 的思路,让配置和运行状态保持同步。
    huangmingyou
        11
    huangmingyou  
    OP
       2021-10-29 21:38:19 +08:00
    @jeffreystoke 用下面的命令测试一下,KENV=pro dukkha render my.yml ;
    符合预期,具体到 k8s 的场景,我还的研究下怎么组织文件,可能需要组合 4 ,5 个文件。 看上去比较方便,似乎还能支持执行脚本?
    jeffreystoke
        12
    jeffreystoke  
       2021-10-29 22:15:15 +08:00 via Android
    @huangmingyou 是的,还支持从远程 http 服务拉取配置,以及 git ssh 仓库抽取配置( renderer 文档部分)
    RedrumSherlock
        13
    RedrumSherlock  
       2021-10-29 23:38:34 +08:00 via Android
    我们是主用 helm 的,单个 helm chart 通用的放 values.yaml ,随环境变化的放各自 profile 的 values.yaml ,多个 chart 公用的通过环境变量用 helm 的 set 来做,目前体验还行
    zqcolor
        14
    zqcolor  
       2021-10-30 00:01:44 +08:00
    argocd + helm
    plko345
        15
    plko345  
       2021-10-30 00:51:58 +08:00 via Android
    helm 完全能解决你的问题
    huangmingyou
        16
    huangmingyou  
    OP
       2021-10-30 08:36:05 +08:00
    对于企业内部部署,能管理生成 yaml 基本够用了,用 helm 感觉有点重,每次一看 helm 文档,就看到大堆的文件需要定义就头大。
    37Y37
        17
    37Y37  
       2021-10-30 09:15:13 +08:00
    我们全部给做成系统了,任务系统,通过不同变量(环境 /项目)动态创建,https://blog.ops-coffee.cn/s/U88HPUYiVDar-7yBx3IoIA
    zhaoyeye
        18
    zhaoyeye  
       2021-10-31 02:52:33 +08:00 via Android
    @vast0906 老哥给个链接指导下,我们也准备这么做,但是没有一点思路。
    vast0906
        19
    vast0906  
       2021-11-01 09:08:04 +08:00
    @zhaoyeye deployment 之类的写到 template 里面,不同应用拥有自己的 vars.json ,在执行 playbook 的时候 -e 选择相对应的 vars.json
    huangmingyou
        20
    huangmingyou  
    OP
       2021-11-01 09:23:04 +08:00
    @vast0906 var 文件可以用多个吗,例如把项目的 var 和环境的 var 带入到 templte . 能发一下文件目录的组织结构例子吗?
    cheng6563
        21
    cheng6563  
       2021-11-01 09:39:14 +08:00
    直接写 k8s 的 yml 。然后 jenkins 部署时用 yq 脚本修改更新。
    vast0906
        22
    vast0906  
       2021-11-01 14:04:52 +08:00
    @huangmingyou
    ```
    groups/xxx
    ├── hosts
    │ ├── prod
    │ └── test
    └── vars
    ├── prod.json
    └── test.json
    ```

    ├── base
    │ ├── tasks
    │ │ └── main.yml
    │ └── templates
    │ └── deployment.yml.j2

    ingress svc pvc 之类的 按照 deployment.yml.j2 这种来写
    huangmingyou
        23
    huangmingyou  
    OP
       2021-11-01 15:34:23 +08:00
    @vast0906 谢谢!
    xabcstack
        24
    xabcstack  
       2021-11-02 18:55:48 +08:00
    推荐一下 https://github.com/ywgx/ki 这个管理多个 k8s 的利器
    zhaoyeye
        25
    zhaoyeye  
       2021-11-02 21:54:24 +08:00 via Android
    @vast0906 好的 多谢建议
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4502 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 01:06 PVG 09:06 LAX 17:06 JFK 20:06
    Do have faith in what you're doing.
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11940834-2', 'v2ex.com'); ga('send', 'pageview'); ga('send', 'event', 'Node', 'topic', 'k8s'); ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86