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

私有化部署太难搞了

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

    公司的项目是两周一迭代,中途有客户需要私有化部署的时候,我们会选用上个迭代更新到生产环境的版本,拉取镜像部署给客户。

    如何在项目(微服务)的快速迭代开发(两周一迭代)的情况下,保证私有化部署的稳定性?

    • 项目在快速迭代的情况下,可能两周前的部署配置,在两周后就不适用了

    • 开发时只考虑了企业版的场景,没有考虑私有化部署的场景,一旦私有化部署之后发现没法用,又需要改代码

    • 部署时弄错了某些配置(私有化部署的时候,某个配置应该是要变一下... 云云)

    有的企业会将系统做成镜像,到时候直接拷贝到机器里面,但是两周的迭代太快了,这种方法感觉不太现实....

    26 条回复    2024-06-07 08:59:49 +08:00
    eephee
        1
    eephee  
    OP
       249 天前
    * 部署时不允许联网,只能自己搞离线软件源,有点带着镣铐跳舞的感觉
    kkk9
        2
    kkk9  
       249 天前   ❤️ 1
    一个字:拆

    把公版和 OEM 版统一的部分拆出来,需要独立修改部分单独出两个分支,发版的时候分别合并测试就 ok 了

    然后写一个 OTA 独立工具,就像简单的 CI/CD ,你这边推更新,客户那边自己找时间打开,自动化 update
    whileFalse
        3
    whileFalse  
       249 天前
    要不用 Docker 要不用虚机镜像
    kkk9
        4
    kkk9  
       249 天前
    不能 online 就都打包好,只在不行上 docker ,给客户镜像……
    whileFalse
        5
    whileFalse  
       249 天前
    还有就是你们自己运行一个私有化部署环境这些问题测不出来吗
    eephee
        6
    eephee  
    OP
       249 天前
    唉,也是,搞一个私有部署环境去测测,谢谢两位
    likooo125802023
        7
    likooo125802023  
       248 天前
    不如改回单体应用
    zhonj
        8
    zhonj  
       248 天前
    私有化部署项目都是用 docker , 每次就上传一下 docker 包,就完事了简单轻松。然后所有项目都不拆直接 boot 一把梭。mysql redis 啥中间件的能不用就不用。以免出现漏洞又要去升级
    TH00
        9
    TH00  
       248 天前   ❤️ 1
    做过上百个服务的私有化部署, 一开始也很乱, 但是搞好标准化后面就很流畅了, 软件源问题很好解决, 打包成本地镜像, 通过 helm 来管理部署
    beneo
        10
    beneo  
       248 天前
    同面对 私有化部署 加 SAAS ,对团队要求是很高,我给团队定的调: 一套代码,插件定制,持续交付,统一运维。我的建议是,有能力就跟我们一样一套代码,没有的话就两套好了,对于私有化部署版本,按月升级,不要 和 master 离的太远。此外以用代测试,在某些时候也不是不行。
    akira
        11
    akira  
       248 天前
    仓库代码 做好分支,打好 tag 应该就好了啊。
    jsq2627
        12
    jsq2627  
       248 天前 via iPhone   ❤️ 1
    同时支持 saas 和私有化部署,要求本来就挺高的

    如果是单纯以私有化部署为目标的应用,从最初技术选型就会很不一样,开发、发布流程也可能和 agile 相去甚远。

    既然你已经提到了你们是按照微服务开发的,那注定私有化部署不是个容易事了。
    如果以私有化部署为目标,一开始就应该选择单体应用。

    上工具吧,helm 、terraform 、ansible 等等。如果客户是云环境,那还可以用各大云自己的 IaC 方案,比如 AWS CloudFormation 。相比之下,单体应用就没这么复杂,打个 zip 包丢给客户就行。
    jsq2627
        13
    jsq2627  
       248 天前 via iPhone
    后期可能私有化客户还有定制需求,分支管理会更复杂。
    securityCoding
        14
    securityCoding  
       248 天前 via Android
    微服务太多的话只能合并
    cat1879
        15
    cat1879  
       248 天前
    docker 不就是用来解决开发与生产环境不一致的问题吗?
    dayeye2006199
        16
    dayeye2006199  
       248 天前 via Android
    Ansible chef ,最好是代码描述的部署过程。用手弄肯定容易错
    layxy
        17
    layxy  
       248 天前
    我们也有这个问题,很麻烦,虽然后续需求设计的时候会考虑,但是关联系统更新等产生的兼容性问题要解决起来也很费劲
    guanzhangzhang
        18
    guanzhangzhang  
       248 天前
    我部门就是做私有化的,
    一开始也是企业版本去适配私有化,但是企业版本的开发说过类似的话:给你们修私有化 bug ,并不算到我们的 kpi ,而且历史原因,企业版本会用到很多中间件,在私有化场景下(硬盘 iops 辣鸡,cpu 内存超分)下,中间件是尽可能的少是最好的(利于维护),且要考虑客户提供中间件的情况,还有业务要支持的中间件模式,例如 redis 集群、主从和哨兵模式以及版本,并不是所有业务都支持各种模式,对象存储客户没有就私有化要部署一个
    还有安全:
    因为很多客户会扫描,需要部署安全的 agent 之类的
    客户让不允许 root 运行容器
    数据库初始化,检查工具(检查数据库权限和设置对否),甚至有的客户不让业务进程创建表,你要把所有创建表的 sql 导出来给客户
    还有升级,因为是 docker ,升级包如何兼容,sql 兼容升级吗,兼容国产数据库吗
    还有肯定要部署监控和日志的
    以及没网情况下,你肯定要部署时间服务器,如何兼容每个系统
    很多细节问题,需要多次迭代才能发现
    Lamkin
        19
    Lamkin  
       248 天前
    “项目在快速迭代的情况下,可能两周前的部署配置,在两周后就不适用了”
    这个情况跟我们公司的场景挺像
    目前解决的办法就是用 sealos 部署(解决离线部署 K8S 的问题),并且使用 sealos 的方式来制作自己的 helm-charts 镜像(解决多台机器下,每次都要手动导入 docker 镜像的问题,还有各种配置项、环境变量的自动模板渲染)
    zoharSoul
        20
    zoharSoul  
       248 天前
    润 别找 tob 的公司
    找 toc 的
    eephee
        21
    eephee  
    OP
       248 天前
    昨天我同事给一个什么学院部署,结果在测试的时候,把一个文件传到他们电脑上面测试,硬是解析不出来

    最后发现,文件传到他们的电脑上面后,大小变了,MD5SUM 也完全不一样了,然后看了下文件发现图标多了一个红星,原来他们电脑上面装了一个啥安全软件....

    后面把文件搞成压缩包传进去,然后到里面再解压,文件就是好的,我们排查这个就花了 1 天多时间 hhh
    eephee
        22
    eephee  
    OP
       248 天前
    @guanzhangzhang 太对了哥...
    uliah
        23
    uliah  
       248 天前   ❤️ 1
    前期 私有源 & ansible
    中期 ansible & docker
    后期 kubernetes & helm
    项目改造大概花了一年半的时间,TOB 比 TOC 多一章节离线方案。

    但国内 TOB 真正痛苦的是:
    1 、指定国产硬件
    2 、指定国产操作系统
    3 、指定培训甲方维护人员
    ...
    forgottencoast
        24
    forgottencoast  
       248 天前
    其实道理很简单,但是做起来可能很难。
    把你们自己当成私有化的客户。
    或者私有化部署多了,知道那些要抽象出来。
    eephee
        25
    eephee  
    OP
       247 天前
    我们给客户支持到了浏览器的 >=80 版本,客户让我们再努力努力,支持他们电脑上面安装的 chrome 50 版本,在加 polyfill 中
    youppos
        26
    youppos  
       167 天前
    可以使用 helm 部署,配置可以提取出来作为变量。
    另外,推荐一个功能非常丰富,开箱即用的 Devops 平台,可以免费使用白嫖。
    推荐链接: https://ezone.work/signup?refer=kingdomLee
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3841 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:22 · PVG 18:22 · LAX 02:22 · JFK 05:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.