在 AWS EC2 Advanced 上运行 DC/OS
使用 AWS CloudFormation 模板创建和扩展 DC/OS 群集
可以使用 AWS CloudFormation 模板创建和扩展 DC/OS 群集。高级模板包括:
- 高度可自定义
- 可堆叠;例如,您可以将多个代理池部署到同一个群集
- 复杂;需要更多设置工作
高级 AWS CloudFormation 模板为创建和扩展 DC/OS 群集带来了优势和灵活性。通过这些模板,您可以从一整套 DC/OS 配置选项中进行选择。
- 在现有的 VPC/子网组合上实例化完整的 DC/OS 群集。
- 通过添加更多的 代理 节点来扩展和更新现有的 DC/OS 群集。
模板一起用于创建 DC/OS 群集。驱动这些模板的是 AWS CloudFormation 用于创建每个堆栈的参数。
重要信息:此安装方法不支持升级。
前提条件
硬件
您必须有 AWS EC2 m3.xlarge 实例。建议不要选择较小的 VM,而选择较少的 VM 可能会导致某些资源密集型服务(如分布式数据存储)无法正常工作。
软件
dcos_generate_config
文件:- Enterprise 用户应使用 dcos_generate_config file。请联系销售代表或 sales@mesosphere.com 以访问配置文件。Enterprise
- 开源用户应使用 dcos_generate_config file。Open Source
- 带根 IAM 权限的 Amazon Web Services 帐户。安装高级模板需要高级权限。如需更多信息,请联系 AWS 管理员。
- 与群集相同分域的 AWS EC2 密钥对。密钥对不能跨分域共享。AWS 密钥对使用公钥加密功能提供对 AWS 群集的安全登录。有关创建 AWS EC2 密钥对的详细信息,请参阅 文档。
- AWS 命令行界面。
- CLI JSON 处理器 jq。
- 符合 bootstrap 节点 系统要求 的节点。
具有读写访问权限的 AWS s3 bucket。
S3 bucket 必须具备 bucket 策略,以便让启动的 AWS 实例从 s3 bucket下载文件。以下是任何人均可下载的示例政策:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::<bucket_name>/<bucket_path>/*"]
}
]
}
有关 S3 bucket 策略的详细信息,请参阅 AWS 文档。
创建模板
在节点的主目录中创建名为
genconf
的目录,然后导航到该目录。mkdir -p genconf
在
genconf
目录中创建配置文件并另存为config.yaml
。此配置文件指定您的 AWS 凭据以及用于存储生成的原图的 S3 位置。
企业和开源用户所需的参数为:
Enterprise
aws_template_storage_bucket: <your-bucket>
aws_template_storage_bucket_path: <path-to-directory>
aws_template_upload: true
aws_template_storage_access_key_id: <your-access-key-id>
aws_template_storage_secret_access_key: <your-secret-access_key>
cluster_name: <cluster-name>
安全性:[许可|严格]
superuser_password_hash: <hashed-password>
superuser_username: <username>
zk_super_credentials: <userid>:<password>
zk_master_credentials: <userid>:<password>
zk_agent_credentials: <userid>:<password>
Open Source
aws_template_storage_bucket: <your-bucket>
aws_template_storage_bucket_path: <path-to-directory>
aws_template_upload: true
aws_template_storage_access_key_id: <your-access-key-id>
aws_template_storage_secret_access_key: <your-secret-access_key>
有关参数描述和配置示例,请参阅 文档。
- 使用指定的 AWS 参数运行 DC/OS 安装工具脚本。此命令创建 DC/OS 物件和模板的自定义构造并将其上传到指定的 s3 bucket。
Enterprise
sudo bash dcos_generate_config.ee.sh --aws-cloudformation
Open Source
sudo bash dcos_generate_config.sh --aws-cloudformation
此 bucket 位置的根 URL 位于本步骤的末尾。您将看到以下消息:
AWS CloudFormation templates now available at: https://<amazon-web-endpoint>/<path-to-directory>
转到 S3 并导航至上述
<path-to-directory>
中所示的 s3 bucket。- 选择 cloudformation,然后选择管理节点所需数量的 zen 模板。例如,为单个管理配置选择 el7-zen-1.json。
- 右键单击并选择 属性,然后复制 AWS S3 模板 URL。
转到 CloudFormation 并单击 创建堆栈。
在 选择模板 页面指定 Zen 模板的 AWS S3 模板 URL 路径。例如:
https://s3-us-west-2.amazonaws.com/user-aws/templates/config_id/14222z9104081387447be59e178438749d154w3g/cloudformation/ee.el7-zen-1.json
创建模板依赖关系
使用 zen.sh
脚本创建模板依赖关系。这些依赖关系将用作在 CloudFormation 中创建堆栈的输入信息。
将此脚本另存为
zen.sh
#!/bin/bash
export AWS_DEFAULT_OUTPUT="json"
set -o errexit -o nounset -o pipefail
if [ -z "${1:-}" ]
then
echo Usage: $(basename "$0") STACK_NAME
exit 1
fi
STACK_NAME="$1"
VPC_CIDR=10.0.0.0/16
PRIVATE_SUBNET_CIDR=10.0.0.0/17
PUBLIC_SUBNET_CIDR=10.0.128.0/20
echo "Creating Zen Template Dependencies"
vpc=$(aws ec2 create-vpc --cidr-block "$VPC_CIDR" --instance-tenancy default | jq -r .Vpc.VpcId)
aws ec2 wait vpc-available --vpc-ids "$vpc"
aws ec2 create-tags --resources "$vpc" --tags Key=Name,Value="$STACK_NAME"
echo "VpcId: $vpc"
ig=$(aws ec2 create-internet-gateway | jq -r .InternetGateway.InternetGatewayId)
aws ec2 attach-internet-gateway --internet-gateway-id "$ig" --vpc-id "$vpc"
aws ec2 create-tags --resources "$ig" --tags Key=Name,Value="$STACK_NAME"
echo "InternetGatewayId: $ig"
private_subnet=$(aws ec2 create-subnet --vpc-id "$vpc" --cidr-block "$PRIVATE_SUBNET_CIDR" | jq -r .Subnet.SubnetId)
aws ec2 wait subnet-available --subnet-ids "$private_subnet"
aws ec2 create-tags --resources "$private_subnet" --tags Key=Name,Value="${STACK_NAME}-private"
echo "Private SubnetId: $private_subnet"
public_subnet=$(aws ec2 create-subnet --vpc-id "$vpc" --cidr-block "$PUBLIC_SUBNET_CIDR" | jq -r .Subnet.SubnetId)
aws ec2 wait subnet-available --subnet-ids "$public_subnet"
aws ec2 create-tags --resources "$public_subnet" --tags Key=Name,Value="${STACK_NAME}-public"
echo "Public SubnetId: $public_subnet"
运行
zen.sh
脚本,为指定 DC/OS 堆栈(STACK_NAME
)设置可选标签值,或使用默认值dcos
。此值将用于在 AWS 中标记 DC/OS 群集。bash ./zen.sh <STACK_NAME>
输出应如下所示:
Creating Zen Template Dependencies
VpcId: vpc-e0bd2c84
InternetGatewayID: igw-38071a5d
Private SubnetId: subnet-b32c82c5
Public SubnetId: subnet-b02c55c4
使用这些依赖值作为输入,在后续步骤中创建您在 CloudFormation 中的堆栈。
在 CloudFormation 上启动模板
- 转到 CloudFormation 并单击 创建堆栈。
- 在 选择模板 页面,从您的工作站上传 Zen 模板,然后单击 下一步。
模板示例:
https://s3-us-west-2.amazonaws.com/dcos/templates/dcos/config_id/6a7451f6dec/cloudformation/ee.el7-zen-1.json
Enterprisehttps://s3-us-west-2.amazonaws.com/dcos/templates/dcos/config_id/6a7451f6dec/cloudformation/el7-zen-1.json
Open Source
在 指定详情页面指定这些值,然后单击 下一步。
图 1. AWS Advanced Web 界面
- 堆栈名称 指定群集名称。
- CustomAMI 可选:指定 AMI ID。如需更多信息,请参阅 使用自定义 AMI 进行安装。
- InternetGateway 指定
InternetGatewayID
脚本的zen.sh
输出值。互联网网关 ID 必须附加于 VPC。该互联网网关用于所有节点向外互联网访问。 - KeyName 指定 AWS EC2 密钥对。
- MasterInstancEtype 指定 AWS EC2 实例类型。推荐 m3.xlarge 实例类型。
- PrivateAgentInstanceCount 指定专用代理的数量。
- PrivateAgentInstancEtype 指定专用代理节点的 AWS EC2 实例类型。推荐 m3.xlarge 实例类型。
- PrivateSubnet 指定
Private SubnetId
脚本的zen.sh
输出值。所有专用代理都将使用该子网 ID。 - PublicAgentInstanceCount 指定公共代理的数量。
- PublicAgentInstanceType 指定公共代理节点的 AWS EC2 实例类型。推荐 m3.xlarge 实例类型。
- PublicSubnet 指定
Public SubnetId
脚本的zen.sh
输出值。所有公共代理都将使用该子网 ID。 - Vpc 指定
VpcId
脚本的zen.sh
输出值。所有节点都将使用该 VPC 项下的子网和互联网网关启动。
在 选项 页面,接受默认值,然后单击 下一步。
注意: 您可以选择是否在有故障时退回。默认情况下,此选项设置为 是。
在 查看 页面,选中确认框,然后单击 创建。
注意: 如果显示 创建新堆栈 页面,要么是 AWS 仍在处理您的请求,要么就是您查看的是其他分域。导航至正确的分域并刷新页面以查看您的堆栈。
监控 DC/OS 群集聚合过程
在 CloudFormation 中,您会看到:
群集堆栈启动需要 15 到 20 分钟时间。您将为它们逐个创建堆栈,其中
<stack-name>
是您为堆栈名称指定的值,<stack-id>
是自动生成的 ID。图 2. AWS 堆栈详细信息
- Zen 模板:
<stack-name>
- 公共代理:
<stack-name>-PublicAgentStack-<stack-id>
- 专用代理:
<stack-name>-PrivateAgentStack-<stack-id>
- 管理节点:
<stack-name>-MasterStack-<stack-id>
- 基础架构:
<stack-name>-Infrastructure-<stack-id>
- Zen 模板:
- 状态从
CREATE_IN_PROGRESS
变为 1CREATE_COMPLETE
。
重要信息:ROLLBACK_COMPLETE 状态表示部署失败。如需实用故障信息,请参阅“事件”选项卡。
启动 DC/OS
可以通过输入管理节点主机名启动 DC/OS Web 界面。按照以下说明查找 Mesos 管理节点主机名。
在 AWS CloudFormation 管理 页面,单击选中堆栈旁边的复选框。
单击 输出选项卡,复制/粘贴 Mesos 管理节点主机名,打开 DC/OS Web 界面。该界面在标准 HTTP 端口 80 上运行,因此无需在主机名后指定端口号。
注意: 可能需要调整窗口大小以查看此选项卡。可以随时在 AWS CloudFormation 管理页面找到 DC/OS 主机名。
图 3. Mesos 管理节点主机名
单击 登录到 DC/OS。
重要信息:单击“登录到 DC/OS”,浏览器就会显示您的连接不安全的警告。这是因为 DC/OS 使用自签名证书。可以忽略该错误,然后单击以继续。
图 4. 操作成功的画面
输入超级用户帐户的用户名和密码。
注意: 默认用户名为
bootstrapuser
,默认密码为deleteme
。图 5. 登录画面
成功了!
图 6. DC/OS 仪表板
后续步骤
您的高级模板 DC/OS 安装已启动并运行,您可以添加更多代理节点。
添加更多代理节点
可以通过创建新的堆栈来添加更多代理节点。使用 advanced-priv-agent.json 或 advanced-pub-agent.json 模板。这些模板创建代理,然后作为 AutoScalingGroup 的一部分附加到 PrivateAgentStack
或 PublicAgentStack
。
使用 zen.sh
脚本以及管理节点和基础架构堆栈的输出值。这些新的代理节点将自动添加到您的 DC/OS 群集。
专用代理:
- InternalMasterLoadBalancerDnsName 指定主栈 (
<stack-name>-MasterStack-<stack-id>
)的InternalMasterLoadBalancerDnsName
值。可以在 输出 选项卡中找到此值。 - KeyName 指定 AWS EC2 密钥对。
- PrivateAgentInstanceCount 指定专用代理的数量。
- PrivateAgentInstancEtype 指定专用代理节点的 AWS EC2 实例类型。推荐 m3.xlarge 实例类型。
- PrivateAgentSecurityGroup 指定专用代理的安全组 ID。该组具备有限的外部访问权限。可以在基础架构堆栈 (
<stack-name>-Infrastructure-<stack-id>
) 的 输出 选项卡中找到此值。 - PrivateSubnet 指定
Private SubnetId
脚本的zen.sh
输出值。所有专用代理都将使用该子网 ID。
公共代理:
- InternalMasterLoadBalancerDnsName 指定主栈 (
<stack-name>-MasterStack-<stack-id>
)的InternalMasterLoadBalancerDnsName
值。可以在 输出 选项卡中找到此值。 - KeyName 指定 AWS EC2 密钥对。
- PublicAgentInstanceCount 指定公共代理的数量。
- PublicAgentInstanceType 指定公共代理节点的 AWS EC2 实例类型。推荐 m3.xlarge 实例类型。
- PublicAgentSecurityGroup 指定公共代理的安全组 ID。该组具备有限的外部访问权限。可以在基础架构堆栈 (
<stack-name>-Infrastructure-<stack-id>
) 的 输出 选项卡中找到此值。 - PublicSubnet 指定
Public SubnetId
脚本的zen.sh
输出值。所有公共代理都将使用该子网 ID。
对于所有高级配置选项,请参阅模板参考 文档。
限制
- 升级不支持经过修改的模板。
- 不支持添加代理和任务隔离。
- 无法扩展管理节点大小。
- 您必须处于扁平网络空间(由我们的基础架构模板控制)。如果无法使用我们的基础架构模板,您可以更改我们的模板且需自行承担风险。我们可能会更改基础架构模板,您必须支持此类后续变更。
模板参考
如需完整的高级配置选项,请参阅模板参考 文档。
模板参考
高级模板参数