huangmingyou

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

  •  
  •   huangmingyou · Oct 29, 2021 · 4848 views
    This topic created in 1661 days ago, the information mentioned may be changed or developed.
    我只比较过 helm 和 kustomize ; 简单的使用了一下 kustomize, 发现好多想要的功能都没有。这两个项目都是聚焦管理单个项目。
    对于普通企业来说,更需要的是管理多个项目,并且每个项目之间的差异很小。还有一点就是多环境下的项目,有些全局的配置不一样,比如 hostsalias.我发现用 kustomize 要修改类似 hostsalias 的值就比较麻烦。也不是说不能实现,就是很麻烦。别扭。需要用到 patchesJson6902 这样的方式。
    helm 2.0 时代看过,那时候要安装一个组件到 k8s, 就放弃了。3.0 似乎不用安装了。

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

    我就想问下,有什么好的解决方案吗?
    25 replies    2021-11-02 21:54:24 +08:00
    Rubbick
        1
    Rubbick  
       Oct 29, 2021
    我是环境变量注入+配置中心
    simon7878
        2
    simon7878  
       Oct 29, 2021
    helm3+values 定制方式可以的吧,实际就是把变化的部分拎出来单独管理,实现自动化。
    liuxu
        3
    liuxu  
       Oct 29, 2021
    我是一个 helm 包下面多个 values.yaml ,helm 可以指定 value 文件 --values xx.yaml
    vast0906
        4
    vast0906  
       Oct 29, 2021   ❤️ 1
    我们是 jenkins + ansible + k8s 发布的。。ansible 的 template
    YzSama
        5
    YzSama  
       Oct 29, 2021
    helm 做一个包,通过环境变量注入。
    jeffreystoke
        6
    jeffreystoke  
       Oct 29, 2021
    同样的痛点, 我一直觉得 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  
       Oct 29, 2021 via Android
    试试 flux ?虽然我只有一个环境,但是按官方文档的说法是方便管理多环境用的。
    huangmingyou
        8
    huangmingyou  
    OP
       Oct 29, 2021
    @jeffreystoke 看上去不错,我研究研究
    huangmingyou
        9
    huangmingyou  
    OP
       Oct 29, 2021
    @locoz 不错的项目,先看看
    huangmingyou
        10
    huangmingyou  
    OP
       Oct 29, 2021
    @locoz 看了一下,这个工具对我的需求来说太重了,这看上去是一个野心很大的工具,啥都想管,而且有点类似 ansible 的思路,让配置和运行状态保持同步。
    huangmingyou
        11
    huangmingyou  
    OP
       Oct 29, 2021
    @jeffreystoke 用下面的命令测试一下,KENV=pro dukkha render my.yml ;
    符合预期,具体到 k8s 的场景,我还的研究下怎么组织文件,可能需要组合 4 ,5 个文件。 看上去比较方便,似乎还能支持执行脚本?
    jeffreystoke
        12
    jeffreystoke  
       Oct 29, 2021 via Android
    @huangmingyou 是的,还支持从远程 http 服务拉取配置,以及 git ssh 仓库抽取配置( renderer 文档部分)
    RedrumSherlock
        13
    RedrumSherlock  
       Oct 29, 2021 via Android
    我们是主用 helm 的,单个 helm chart 通用的放 values.yaml ,随环境变化的放各自 profile 的 values.yaml ,多个 chart 公用的通过环境变量用 helm 的 set 来做,目前体验还行
    zqcolor
        14
    zqcolor  
       Oct 30, 2021
    argocd + helm
    plko345
        15
    plko345  
       Oct 30, 2021 via Android
    helm 完全能解决你的问题
    huangmingyou
        16
    huangmingyou  
    OP
       Oct 30, 2021
    对于企业内部部署,能管理生成 yaml 基本够用了,用 helm 感觉有点重,每次一看 helm 文档,就看到大堆的文件需要定义就头大。
    37Y37
        17
    37Y37  
       Oct 30, 2021
    我们全部给做成系统了,任务系统,通过不同变量(环境 /项目)动态创建,https://blog.ops-coffee.cn/s/U88HPUYiVDar-7yBx3IoIA
    zhaoyeye
        18
    zhaoyeye  
       Oct 31, 2021 via Android
    @vast0906 老哥给个链接指导下,我们也准备这么做,但是没有一点思路。
    vast0906
        19
    vast0906  
       Nov 1, 2021
    @zhaoyeye deployment 之类的写到 template 里面,不同应用拥有自己的 vars.json ,在执行 playbook 的时候 -e 选择相对应的 vars.json
    huangmingyou
        20
    huangmingyou  
    OP
       Nov 1, 2021
    @vast0906 var 文件可以用多个吗,例如把项目的 var 和环境的 var 带入到 templte . 能发一下文件目录的组织结构例子吗?
    cheng6563
        21
    cheng6563  
       Nov 1, 2021
    直接写 k8s 的 yml 。然后 jenkins 部署时用 yq 脚本修改更新。
    vast0906
        22
    vast0906  
       Nov 1, 2021
    @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
       Nov 1, 2021
    @vast0906 谢谢!
    xabcstack
        24
    xabcstack  
       Nov 2, 2021
    推荐一下 https://github.com/ywgx/ki 这个管理多个 k8s 的利器
    zhaoyeye
        25
    zhaoyeye  
       Nov 2, 2021 via Android
    @vast0906 好的 多谢建议
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2953 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 15:22 · PVG 23:22 · LAX 08:22 · JFK 11:22
    ♥ Do have faith in what you're doing.