V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
eephee
V2EX  ›  Kubernetes

针对一套系统同时维护 k8s 和 docker compose 两种部署方案,有没有比较好的管理方式呢?

  •  
  •   eephee · 277 天前 · 2415 次点击
    这是一个创建于 277 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司自己的 saas 版本是部署在国内云厂商的公有云上面,对客户私有化部署的话,考虑到规模较小的客户的机器资源有限,仍然使用 k8s 的话,支持 k8s 本身就需要占用机器资源,所以针对小型客户准备采用 docker compose 的方式部署。

    我最近在思考如何比较安全地维护这两种部署方式:期望是在维护过程中,针对配置文件的改动(更改环境变量等)能够同时应用到这两种部署类型的配置文件上( k8s manifest & docker-compose.yaml ),我目前打算用 ansible ,然后自己分别写两种部署的配置模板,然后改动 ansible 的配置文件,自动生成 k8s yaml 和 docker compose yaml 配置文件,但是细节还没有完全实现。

    所以在此之前,想问一下大家有没有更好的实践或者工具推荐呢

    26 条回复    2023-03-31 10:07:42 +08:00
    eephee
        1
    eephee  
    OP
       277 天前
    我目前主要担心能否利用 ansible 做到 cover 所有 docker compose 和 k8s manifest 差异比较大的一些点,有些地方就比较容易(比如两者配置都有 docker image ,k8s 有 env/envFrom ,docker compose 有 enviroment/env_file ),其他地方可能不是能很好地缝合(比如一些 k8s 独有的特性,暂时想不到很具体的...)
    xabcstack
        2
    xabcstack  
       277 天前
    docker compose 本身和 k8s 没有多大区别,这不是一个好问题
    xabcstack
        3
    xabcstack  
       277 天前
    一个服务,你需要维护镜像的更新, 一个 deployment.yml 和 一个 docker-compose.yml 解决你的问题
    eephee
        4
    eephee  
    OP
       277 天前
    不是,有十几个微服务
    xabcstack
        5
    xabcstack  
       277 天前
    一个 deployment.yml 可以写十几个容器
    一个 docker-compose.yml 也可以十几个以此拉起
    defunct9
        6
    defunct9  
       277 天前
    都用 k8s ,这才是正解。
    Kumo31
        7
    Kumo31  
       277 天前
    肯定只维护一套比较好,kompose 可以把 docker compose 的配置转化成 k8s 格式。或者反过来用可以兼容 k8s 配置的 podman 代替 docker
    cnbattle
        8
    cnbattle  
       277 天前 via Android
    第一时间想到的方式,一个 dapr ,一个 k3s
    seashell2000
        9
    seashell2000  
       277 天前
    ansible 完全没必要,不同的 yml 可以解决,关键是 yml 可能要根着 image 版本联动
    还有就是 k8s 的某些配置太多选项,这就是为什么有了 helm
    yso
        10
    yso  
       277 天前 via iPhone
    podman play kube 你看看,我没用过,看有英文博客提: https://www.redhat.com/sysadmin/podman-play-kube-updates
    vus520
        11
    vus520  
       277 天前
    k3s 不就是为了这种需求而生吗? 256M 的 k8s 开销,能差多少?
    sniperking1234
        12
    sniperking1234  
       277 天前
    wheeler
        13
    wheeler  
       277 天前 via iPhone
    compose 和 k8s 表达能力差不少吧。维护两套费劲啊。
    zzl22100048
        14
    zzl22100048  
       276 天前
    k8s 占用资源太多就用 k3s 呗
    k3s 内存应该不超过 512M
    julyclyde
        15
    julyclyde  
       276 天前
    @xabcstack 不是“也可以”
    应该说“恰恰是为了”
    guanzhangzhang
        16
    guanzhangzhang  
       276 天前
    作为过来人表示,你这个我们内部就是,为了多台机器的 docker 的业务能够少改造的,也就是保留 svc 访问。
    我们内部的业务很多调用其他业务组的 svc 都是默认的,不是 env 传入的。我把 k8s 的 svc 逻辑摸通后用 keepalived+ipset+iptables 搞出来了(可以看我博客)
    k8s 我们把 env 和 svc 的和 volume 的部分抽象成一个 yml 文件给各个业务组,部署业务的时候主模板+各个业务组的 values 文件渲染。docker 版本也用 ansible 服用了这个 yml 文件,然后写了个 docker-compose 模板,并且单独搞了个大 yaml ,覆盖业务里的某些 env 和挂载。

    但是业务多了就麻烦了,还是推荐你先用 k3s ,或者 swarm 的 swarmkit 啥的
    mingwiki
        17
    mingwiki  
       276 天前
    没想到还有 kompose 这种工具 就是转换后文件太多了 维护有点懵 所以平时维护 compose 再用 kompose 转换 然后使用 k8s 这种方法可行吗?
    eephee
        18
    eephee  
    OP
       276 天前
    k3s 确实值得尝试一番,我先记到 todolist 里面。

    我们优先是维护 k8s 配置,docker compose 的支持位于第二等,所以如果能从 k8s 的 yaml 生成 docker compose 是我的目标,kompose 好像只能单向转换( docker compose --> k8s ),所以我应该用不到。

    昨天了解了一下 k8s 和 docker compose 在配置文件上有些地方还是蛮像的(env/envFrom ==> environment/env_file ,service ==> network alias...),所以一个简易的 ansible module 脚本可以搞定这个转换。
    eephee
        19
    eephee  
    OP
       276 天前
    @guanzhangzhang 感谢,我去拜读一下。
    eephee
        20
    eephee  
    OP
       276 天前
    感谢大家的回复和帮助~
    salmon5
        21
    salmon5  
       276 天前
    冒昧的问下,OP 岗位是开发还是运维,或者交付,
    这块我想了解下是谁负责。
    salmon5
        22
    salmon5  
       276 天前
    在我看来,阿里云或者 AWS 这种公司,应该是开发负责。
    eephee
        23
    eephee  
    OP
       276 天前
    @salmon5 前段时间做开发,最近重心转到了运维上面,最近处理部署相关的事情。我怎么感觉这个应该就是由运维负责。

    我们公司之前,虽然 saas 在公有云上面,但是给客户私有化部署是手工拿 jar 包部署的,今年 Q1 计划改成更加自动化的部署方式。
    salmon5
        24
    salmon5  
       276 天前
    @eephee #感觉这个开发或运维负责没有统一的界限,有 2 个维度:
    1 ,谁受益最大谁负责,欲戴皇冠必承其重(现实中有时候有人摘果子:收益大不负责)
    2 ,谁做更合适,偏业务型开发负责,偏 Infra 运维负责。( k8s 是次要的,有些项目开发可能会用将近 10 年前的技术栈,完全无法容器化)
    eephee
        25
    eephee  
    OP
       252 天前 via iPhone
    最终还是用 k3s 了
    XyIsMy
        26
    XyIsMy  
       251 天前
    @eephee 用起来之后分享下生产环境使用 k3s 咋样呗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   963 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 20:21 · PVG 04:21 · LAX 12:21 · JFK 15:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.