huangmingyou

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

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