本文,咱们将展示如何在Buddy创立一个流水线并在流水线上通过运用Terraform,自动扩展在AWS基础设施中增加或删去Buddy自保管额定的作业器。
由于每家公司运用的开发运维/自动化运维意图不同,该攻略仅作为装备您自己扩展过程的一个参考。
作业器变量
本攻略基于Buddy作业器变量进行开展;一种作为Buddy作业器运用行为的新式环境变量。变量可在每次流水线运转开始前生成,可用于流水线中的全部操作。您能够运用所创立的变量来核算需要多少作业器来为您的作业负载提供服务,将当时负载发送到CloudWatch、Datadog、New Relic或者在Telegram、Slack频道等上通知您的团队。
在此示例中,咱们运用脚本中的变量来更新Terraform装备并发动或封闭AWS中的EC2实例。
称号 | 值 |
---|---|
BUDDY_WORKERS 包括全部已装置作业器的JSON信息 |
{"workers":[{"name":"Primary","address":"build-server","status":"RUNNING","load":0.56,"free_slots":4,"tag":"NOT_TAGGED","locked":false}],"tags":[{"name":"NOT_TAGGED","avg_load":0.56,"free_slots":4,"workers_quantity":1}]} |
**BUDDY_WORKERS_ADDRESS_TAG∗∗<br/>用‘{TAG}** <br />用`{TAG}`符号的作业器IP地址列表 | 192.168.4.11 |
BUDDY_WORKERS_ADDRESS_NOT_TAGGED 未符号作业器的IP地址列表 |
build-server |
**BUDDY_WORKERS_AVG_LOAD_TAG∗∗<br/>全部标有‘{TAG}** <br />全部标有`{TAG}`作业器一分钟的均匀负载 | 0.69 |
BUDDY_WORKERS_AVG_LOAD_NOT_TAGGED 全部未符号作业器一分钟的均匀负载 |
2.03 |
BUDDY_WORKERS_CONCURRENT_SLOTS 全部作业器的流水线槽总数 |
4 |
**BUDDY_WORKERS_COUNT_TAG∗∗<br/>符号有‘{TAG}** <br />符号有`{TAG}`的作业器数量 | 1 |
BUDDY_WORKERS_COUNT_NOT_TAGGED 未符号的作业器数量 |
1 |
**BUDDY_WORKERS_FREE_SLOTS_TAG∗∗<br/>符号有‘{TAG}** <br />符号有`{TAG}`的作业器闲暇流水线槽数 | 4 |
BUDDY_WORKERS_FREE_SLOTS_NOT_TAGGED 全部未符号的作业器闲暇流水线槽数 |
4 |
点击此处查看Buddy默许环境变量详细列表
第一部分:项目装备
1. 分叉存储仓
首要,分叉此存储仓到您自己的GitHub帐户上:github.com/buddy-red/w…
此存储仓包括示例所需的两个作用:
-
作业器核算器(action.yml) – 这是一个核算本地网络负载的自界说操作。当负载超越约束时,操作的输出可作为通知中的变量发送。如若必要您还能够在脚本中运用它增加或删去作业器(见下文)。
-
扩展流水线(/example_pipeline) – 一个预装备流水线,运用Terraform依据核算器的输出发动或封闭EC2实例。该流水线包括示例数据,能够交换这些数据以使其与您的基础架构一起运用。
该目录/文件夹包括以下文件:
- buddy.yml – 界说流水线的操作执行
- install.tmpl.sh – 在新机器上装置Buddy的脚本模板
- main.tf与vars.tf – Terraform装备文件
- scale.sh – 更新Terraform装备的脚本
2. 同步项目
在Buddy中新建一个项目,挑选您的Git提供商,然后增加分叉的存储仓。Buddy将依据buddy.yml
界说自动创立流水线:
这些文件必须存储在根目录中,不然将不会检测到流水线装备。
若流水线依然没有显示,请查看相关动态日志记录。您或许也得从Scale workers(扩展作业器)操作中铲除Terraform的变量值。
此外,核算器将一向被增加到操作列表中:
第二部分:流水线概览
流水线的装备存储在buddy.yml
中。在攻略的这一部分,咱们将从上到下跟踪文件并展示Buddy如何解析输入数据以在应用程序中创立流水线。
1. 流水线设置
第一部分描绘流水线作用:触发模式、分配的分支和运转之间的时间间隔。咱们能够看到主分支每5分钟按守时运转一次:
- pipeline: Scale Workers
on: SCHEDULE
delay: 5
start_date: "2022-01-01T00:00:00Z"
tags:
- manage
refs:
- ":default"
保证相应地更新日期!对于设置为已曩昔的日期,流水线将不会发动运转。
在应用程序中,流水线运转时详细信息在“设置”选项卡中可用:
您可直接在应用程序中更新流水线装备。之后,单击“生成YAML”并将其更新于
buddy.yml
文件中的代码。
2. 作业器核算器
持续往下来到actions
操作部分,第一个便是Worker Calculator作业器核算器:
actions:
- action: Calculate Workers
type: CUSTOM
custom_type: Workers_Scale:latest
inputs:
WORKER_TAG: ""
WORKER_SLOTS: "2"
MAX_WORKERS: "2"
MIN_FREE_SLOTS: "1"
该操作详情说明于此 >>>
Input 输入
输入描绘了作业器的装备,以及所需的闲暇槽数。
- WORKER_TAG – 运转操作核算作业器的标签,如果您想扩展无标签的作业器,请留空。
- WORKER_SLOTS – 每个作业器的并发插槽数,即能够一起运转多少个流水线或操作。留空以获取您帐户所设置的值。
- MAX_WORKERS – 在您本地布置/自保管布置中启用的最大作业器数量
- MIN_FREE_SLOTS – 实例中所需的闲暇槽数,用于核算是否为给定标签增加或删去作业器。
在此示例中:
- 标签字段为空,说明仅指向未符号的作业器
- 实例中的每个作业器都有2个并发槽
- 最多可一起运转2个作业器
- 每个作业器上应始终有1个插槽可用
Output 输出
输入数据被传递给生成三个变量的calc.sh
:
-
WORKER_TAG
– 运转操作的作业器标签 -
WORKER_SLOTS
– 每个作业器并发槽数 -
WORKERS
– 作业器优化出的数量
3. Terraform
第二个操作是Terraform,它实质上将作业器增加到实例中。该操作运转scale.sh
脚本,该脚本运用作业器核算器的输出更新Terraform的装备。
“后端”选项卡描绘存储装备的AWS存储桶:
- action: Scale Workers
type: TERRAFORM
version: latest
variables:
- key: AWS_REGION
value: "eu-central-1"
- key: AWS_AZ
value: "eu-central-1c"
- key: INSTANCE_PRIVATE_KEY
value: "[PRIVATE KEY TO CONNECT TO WORKER]"
- key: INSTANCE_PUBLIC_KEY
value: "[PUBLIC KEY TO CONNECT TO WORKER]"
- key: INSTANCE_TYPE
value: "t3.medium"
- key: INSTANCE_AMI_ID
value: "ami-06ce824c157700cd2"
- key: INSTANCE_VOLUME_SIZE
value: "50"
- key: INSTANCE_VOLUME_THROUGHPUT
value: "125"
- key: INSTANCE_VOLUME_IOPS
value: "3000"
- key: STANDALONE_HOST
value: "172.31.15.212"
- key: STANDALONE_TOKEN
value: "[ON-PREMISES WORKER TOKEN]"
- key: BACKEND_BUCKET
value: "[BUCKET ON S3 TO SAVE TERRAFORM STATE]"
- key: BACKEND_KEY
value: "workers.tfstate"
execute_commands:
- chmod +x scale.sh
- ./scale.sh
integration_hash: "[AWS INTEGRATION HASH]"
Terraform 变量
在本文第四部分,咱们能够看到需要填写才干作业的变量:
称号 | 描绘 |
---|---|
$AWS_REGION | 保管作业器的AWS区域 |
$AWS_AZ | AWS的可用区域 |
$INSTANCE_PRIVATE_KEY | 作业器上上运用的SSH私钥 |
$INSTANCE_PUBLIC_KEY | 作业器上上运用的SSH公钥 |
$INSTANCE_TYPE | 保管作业器的实例类型 |
$INSTANCE_AMI_ID | 在实例上发动作业的的AMI ID(例如:Ubuntu in Ohio region) |
$INSTANCE_VOLUME_SIZE | 实例中磁盘的巨细(以GB为单位) |
$INSTANCE_VOLUME_THROUGHPUT | 实例中磁盘的速度(以MB/秒为单位) |
$INSTANCE_VOLUME_IOPS | 实例中磁盘设置的每秒输入操作数 |
$STANDALONE_HOST | 实例中主作业器(主机)的IP地址 |
$STANDALONE_TOKEN | 在实例中主作业器(主机)上生成的作业器令牌 |
$BACKEND_BUCKET | AWS上的S3存储桶,其中Terraform坚持其当时状况 |
$BACKEND_KEY | S3存储桶中具有当时Terraform状况的文件称号 |
第三部分:AWS装备
此部分介绍在AWS EC2上装置Buddy、为Terraform装备创立存储桶以及生成SSH密钥。
1. 装置Buddy于AWS
- IPv4 公网地址 ($STANDALONE_HOST 必填)
- AMI ID ($INSTANCE_AMI_ID 必填)
- 区域 ($AWS_REGION 必填)
- 可用区域 ($AWS_AZ 必填)
- 示例类型 ($INSTANCE_TYPE 必填)
- 磁盘尺度 ($INSTANCE_VOLUME_SIZE 必填,可坚持默许值)
- 磁盘速度 ($INSTANCE_VOLUME_THROUGHPUT 必填,可坚持默许值)
- 磁盘IOPS ($INSTANCE_VOLUME_IOPS 必填,可坚持默许值)
- 作业器授权令牌 ($STANDALONE_TOKEN 必填)
2. 为Terraform创立S3存储桶
在此,需要存储桶来存储Terraform装备。
要求条件
- 必须与EC2实例上的Buddy位于同一区域
- 必须具有权限以便实例能够运用
- 存储桶称号 ($BACKEND_BUCKET 必填)
- TF文件称号 ($BACKEND_KEY 必填,可坚持默许值)
3. 增加AWS集成
现在咱们需要将Buddy与AWS集成,以便它能够连接到AWS S3。
- id_buddy_worker 内容 ($INSTANCE_PRIVATE_KEY 必填)
- id_buddy_worker.pub 内容 ($INSTANCE_PUBLIC_KEY 必填)
第四部分:填写Terraform变量
全部准备就绪后,您现在能够在/example_pipeline
目录中的buddy.yml
文件中填写变量,依照模板并保证格式正确:
variables:
- key: AWS_REGION
value: "eu-central-1"
- key: AWS_AZ
value: "eu-central-1c"
- key: INSTANCE_PRIVATE_KEY
value: "[PRIVATE KEY TO CONNECT TO WORKER]"
- key: INSTANCE_PUBLIC_KEY
value: "[PUBLIC KEY TO CONNECT TO WORKER]"
- key: INSTANCE_TYPE
value: "t3.medium"
- key: INSTANCE_AMI_ID
value: "ami-06ce824c157700cd2"
- key: INSTANCE_VOLUME_SIZE
value: "50"
- key: INSTANCE_VOLUME_THROUGHPUT
value: "125"
- key: INSTANCE_VOLUME_IOPS
value: "3000"
- key: STANDALONE_HOST
value: "172.31.15.212"
- key: STANDALONE_TOKEN
value: "[ON-PREMISES WORKER TOKEN]"
- key: BACKEND_BUCKET
value: "[BUCKET ON S3 TO SAVE TERRAFORM STATE]"
- key: BACKEND_KEY
value: "workers.tfstate"
从现在开始,每当您所需的马力不足时,流水线都会自动在您的基础设施中新建一个作业器: