V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
raysonlu
V2EX  ›  程序员

弹性伸缩的方案中如何部署更新代码?

  •  
  •   raysonlu · 2019-04-26 18:26:51 +08:00 · 2930 次点击
    这是一个创建于 2065 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想把自己的一个项目尝试改为均衡负载+弹性伸缩方案,其他无节点化的改进方案都有了,但唯独代码更新这一块还没找到好的方案。

    我现在只有一台 ECS,上面放前端和后端的代码,平时有更新的时候,后端代码用 git pull 就 OK 了,前端代码就 webpack 打包好后上传到服务器。

    看过 Jenkins,我理解这个主要是用 git 的 webhooks 来通知 Jenkins 进行一系列自定义命令操作。

    但这种方法在没有弹性伸缩的情况下才有用吧,我甚至不用 Jenkins,登陆负载均衡集群里的一台机,进行 rsync 操作也可以,但如果加上了弹性伸缩,我无法知道我每次更新当前集群有多少台机以及每台机的 IP (内网)是多少

    我在这里就卡住了,也搜不到什么相关的方案,可能是我关键字没命中到?求各位大佬指教了~

    10 条回复    2019-04-27 18:45:13 +08:00
    yufeng0681
        1
    yufeng0681  
       2019-04-26 23:21:10 +08:00
    弹性伸缩这种大型方案,你这几百字哪里够……
    我看阿里云有卖 弹性伸缩方案,可以按他的思路看看。买来用用
    opengps
        2
    opengps  
       2019-04-26 23:31:32 +08:00
    每次去做个更新系统模版,然后逐步把所有机器更新系统
    opengps
        3
    opengps  
       2019-04-26 23:36:09 +08:00
    弹性伸缩是云的架构出来之后才开始后的,市面上确实不多见。算不上是关键字查询不到的问题
    不过真用到弹性架构了,那么主要依赖的是系统镜像。因为同样任务的机器数量很大,逐台更新不现实,自动检测更新也不够靠谱。
    一般建议是配合 slb 的权重 0,创建一批机器 0 权重的机器,然后尽量修改权重切换到新版本机器上,然后释放掉旧版本的服务器
    defunct9
        4
    defunct9  
       2019-04-26 23:40:34 +08:00
    k8s
    xdays
        5
    xdays  
       2019-04-26 23:59:01 +08:00
    你这个场景要解决两个问题:

    1. 已有机器的部署,这块需要像 ansible 之类的工具,每次动态拿到当前的机器列表,ansible 应该有阿里云的动态 inventory 脚本
    2. 对于那部分由弹性伸缩创建出来的机器,一般云厂商都支持创建机器的时候运行一个启动脚本,这个脚本就是用来初始化机器的,你要在这个脚本里完成代码环境和代码本身的安装和部署。
    shynome
        6
    shynome  
       2019-04-27 00:26:02 +08:00 via Android
    阿里云的 k8s 好像能做到,不过就是弹性伸缩的机器比较贵
    tomczhen
        7
    tomczhen  
       2019-04-27 00:43:44 +08:00
    需要可以通过云平台 api 管理云设施。

    1。利用云平台启动脚本完成 ansible / saltstack 的节点初始化工作,再使用 ansible / saltstack 完成环境初始化,部署,更新,加入或移除负载需要通过云平台 api 完成。

    2。云平台的 k8s 集群一般都有开箱可用方案,但是需要对项目做容器化改造适应。
    EileenJ
        8
    EileenJ  
       2019-04-27 17:22:05 +08:00 via Android
    代码放在文件存储 NAS 上面,系统只有运行环境
    fire9
        9
    fire9  
       2019-04-27 18:44:17 +08:00
    如果你用的是 aws auto scaling, 这个是根据设定监控的阈值来做自动的伸缩.举个栗子,如果你的设定 cpu 达到 70%负载的时候,就可以出发自动启动一台或多台实例,它也会自动使用 lb 来添加节点.反之也可以关闭实例.
    fire9
        10
    fire9  
       2019-04-27 18:45:13 +08:00
    如果你使用 Jenkins 来做,估计需要编写大量的代码了.另外,webhook 只是一种.jenkins 可以通过多种方式来实现 CD.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1251 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 18:05 · PVG 02:05 · LAX 10:05 · JFK 13:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.