菜单

Nomad 编排

相关源文件

本文档涵盖了 Gumroad 基础设施中用于容器部署和服务管理的 HashiCorp Nomad 编排系统。Nomad 负责在预发布和生产环境中部署 Docker 容器,并与 CI/CD 流水线集成,实现应用程序部署自动化。

有关 Docker 镜像构建和管理,请参阅Docker 配置。有关环境特定配置管理,请参阅配置管理

Nomad 安装与版本管理

系统使用 HashiCorp Nomad 0.8.3 版本进行容器编排。安装过程通过 install_nomad 函数自动化,该函数会在二进制文件不存在时下载并安装它。

安装过程

Nomad 安装遵循标准化方法

组件详情
版本0.8.3
架构linux_amd64
安装路径/usr/local/bin/nomad
下载来源HashiCorp 发布

安装过程包括版本检查以避免重复安装,并为二进制文件设置正确的权限。

Nomad 安装工作流

来源:.buildkite/scripts/install_nomad.sh10-23

部署架构

Nomad 编排与 CI/CD 流水线集成,以管理跨不同环境的部署。系统支持基于分支的预发布部署和生产部署,并具有不同的工作流和安全措施。

Nomad 部署架构

来源:.buildkite/scripts/deploy_branch.sh60-62 .buildkite/scripts/deploy_production.sh30-32 .buildkite/scripts/install_nomad.sh10-23

分支部署流程

分支部署针对预发布环境,并包括为 Nginx 配置额外构建 Docker 镜像。该过程处理 Web 应用程序镜像和专用的分支应用 Nginx 镜像。

分支部署工作流

分支部署过程遵循以下关键步骤:

  1. 镜像验证与构建:检查现有 Nginx 镜像,必要时进行构建
  2. Nomad 安装:确保 Nomad 二进制文件可用
  3. 密钥管理:从凭证仓库复制所需密钥
  4. 目录设置:创建并配置必要的目录,并设置正确权限
  5. 部署执行:通过 Nomad 运行实际部署

分支部署流程

关键组件

组件目的位置
generate_nginx_tag根据 Git 提交生成 Docker 标签.buildkite/scripts/deploy_branch.sh14-26
BRANCH_APP_NGINX_TAG分支特有 Nginx 镜像的标签.buildkite/scripts/deploy_branch.sh28
DEPLOY_TAG预发布部署标签格式.buildkite/scripts/deploy_branch.sh69

来源:.buildkite/scripts/deploy_branch.sh10-84

生产部署流程

生产部署包括额外的安全措施,例如支付窗口检查和强制镜像验证。该过程更具限制性,并包含业务逻辑约束。

生产部署安全措施

生产部署包含一项关键业务逻辑检查,可防止在支付处理窗口期间进行部署

生产部署流程

生产特定配置

设置目的
PRODUCTION_TAGproduction-${WEB_TAG}生产镜像标签格式
DEPLOYMENT_FROM_CItrue指示 CI 触发部署的标志
支付窗口UTC 10:00-12:00受限部署时间

来源:.buildkite/scripts/deploy_production.sh1-52

目录结构和权限

Nomad 编排需要特定的目录结构和权限配置,以便在不同环境中正常运行。

目录布局

nomad/
├── staging/
│   ├── certs/
│   └── deploy_branch/
│       └── deploy.sh
├── production/
│   └── certs/
└── certs/

权限管理

部署脚本确保正确的属主和权限:

  • 属主buildkite-agent:buildkite-agent
  • 目录nomad/staging/certs, nomad/production/certs, nomad/certs
  • 创建:递归地使用 sudo mkdir -p
  • 所有权:递归地应用 sudo chown -R

目录权限流程

来源:.buildkite/scripts/deploy_branch.sh74-77 .buildkite/scripts/deploy_production.sh39-42

与 CI/CD 流水线的集成

Nomad 编排与 Buildkite CI/CD 流水线紧密集成,作为预发布和生产环境的最终部署机制。

管道集成点

集成点脚本环境触发器
分支部署deploy_branch.sh预发布分支推送
生产部署deploy_production.sh生产主分支
Nomad 安装install_nomad.sh两者预部署

环境变量

部署脚本利用以下几个环境变量进行配置:

  • BUILDKITE_COMMIT:用于标记的源提交哈希
  • BUILDKITE_BRANCH:用于部署识别的分支名称
  • ECR_REGISTRY:Docker 注册表端点
  • DEPLOYMENT_FROM_CI:CI 触发部署的标志

CI/CD 到 Nomad 的集成

来源:.buildkite/scripts/deploy_branch.sh60-83 .buildkite/scripts/deploy_production.sh30-49