【问题标题】:How to make a rolling upgrade with ansible in a different AWS VPC subnet?如何在不同的 AWS VPC 子网中使用 ansible 进行滚动升级?
【发布时间】:2014-04-04 07:28:15
【问题描述】:

我们正在 AWS VPC 的公共子网中运行持续集成服务器 (jenkins),我们希望在向 master 提交时触发升级作为构建后任务...

最简单的方法是让 ansible ssh-in 机器,拉取最新的master 并重新启动服务,然后继续下一个;但由于 CI 主机在不同的子网中运行,我们无法访问服务器。

我们的自动扩缩配置用户数据脚本在启动时自动获取存储库的HEAD,因此我们需要做的就是终止 ELB 中的所有现有实例,让自动扩缩功能启动新实例。

问题是我不知道如何在 playbook 中指定它应该等到新实例启动并运行后再终止下一个实例。

另一个可行的选择是立即启动所有新实例,当它们启动并运行时,从 ELB 中分离并终止所有旧实例(但我也找不到有关如何执行此操作的示例!)。

【问题讨论】:

  • 您想让这一切完全自动化吗?
  • 是的,我们希望在提交被推送到某个分支时自动在 CI 服务器中实现

标签: amazon-web-services ansible continuous-deployment


【解决方案1】:

另一种选择是使用新的 ELB 和所有新实例创建一个新的自动缩放组。当它们启动时,您可以针对新的 ELB 运行测试,确认一切正常,然后切换 DNS。这种方法的问题在于 ELB 预热。如果您的站点很忙,新的 ELB 将不会处理流量,除非您要求亚马逊为您“预热”它。

【讨论】:

    【解决方案2】:

    如果您想检查服务器是否已启动或关闭,您可以从您的 Jenkins 服务器执行此操作,但它需要能够访问您的 VPC 中的实例。

    ---
    name: Deployment playbook
    hosts: all
    
    tasks:
      # Using port 2222 here but you can use port 80 or 443
      - name: Wait for new deployment instance to come up.
        local_action: wait_for host=your_new_deployment_host port=2222
    
      - name: Shutdown or terminate old servers
        local_action: command ec2-terminate-instances <your-old-server-instance-id>
    

    要解决 VPC 问题,您可能可以在启动时设置从 您的服务器 到您的 Jenkins 服务器(公共 IP)的 ssh 隧道,如下所示:

    ssh -f -N -R2222:localhost:22  jenkins@yourjenkinsserver.com -S /tmp/control-socket
    

    如果你想在 Jenkins 的 8888 端口上检查 http

    ssh -f -N -R8888:localhost:80  jenkins@yourjenkinsserver.com -S /tmp/control-socket-http
    

    这里的诀窍是您需要按顺序启动新服务器,因为您始终使用 Jenkins 服务器上的相同端口 8888 进行检查。您还需要在完成检查后终止隧道。从您的 Jenkins 服务器:

    name: Terminate tunnel HTTP
    local_action: shell ssh -p 2222 localhost 'ssh -S /tmp/control-socket-http -O exit yourjenkinsserver.com'
    
    name: Terminate tunnel SSH
    local_action: shell ssh -p 2222 localhost 'ssh -S /tmp/control-socket -O exit yourjenkinsserver.com'
    

    很多移动的部分,但应该可以解决问题。

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 2020-12-29
      • 2021-12-13
      • 1970-01-01
      • 2016-06-19
      相关资源
      最近更新 更多