2.9.8.4. 在 AWS 中上传自定义 RHCOS AMI
如果要部署到自定义 Amazon Web Services(AWS)区域,您必须上传属于该区域的自定义 Red Hat Enterprise Linux CoreOS(RHCOS)Amazon Machine Image(AMI)。
先决条件
- 已配置了一个 AWS 帐户。
- 已使用所需的 IAM 服务角色创建 Amazon S3 存储桶。
- 将 RHCOS VMDK 文件上传到 Amazon S3。RHCOS VMDK 文件必须是小于或等于您要安装的 OpenShift Container Platform 版本的最高版本。
- 您下载了 AWS CLI 并安装到您的计算机上。请参阅使用捆绑安装程序安装 AWS CLI。
流程
将 AWS 配置集导出为环境变量:
$ export AWS_PROFILE=<aws_profile> 1
- 1
- 拥有 AWS 凭证的 AWS 配置集名称,如
govcloud
。
将与自定义 AMI 关联的区域导出为环境变量:
$ export AWS_DEFAULT_REGION=<aws_region> 1
- 1
- AWS 区域,如
us-gov-east-1
。
将上传至 Amazon S3 的 RHCOS 版本导出为环境变量:
$ export RHCOS_VERSION=<version> 1
- 1
- RHCOS VMDK 版本,如
4.6.0
。
将 Amazon S3 存储桶名称导出为环境变量:
$ export VMIMPORT_BUCKET_NAME=<s3_bucket_name>
创建
containers.json
文件并定义 RHCOS VMDK 文件:$ cat <<EOF > containers.json { "Description": "rhcos-${RHCOS_VERSION}-x86_64-aws.x86_64", "Format": "vmdk", "UserBucket": { "S3Bucket": "${VMIMPORT_BUCKET_NAME}", "S3Key": "rhcos-${RHCOS_VERSION}-x86_64-aws.x86_64.vmdk" } } EOF
将 RHCOS 磁盘导入为 Amazon EBS 快照:
$ aws ec2 import-snapshot --region ${AWS_DEFAULT_REGION} \ --description "<description>" \ 1 --disk-container "file://<file_path>/containers.json" 2
检查镜像导入的状态:
$ watch -n 5 aws ec2 describe-import-snapshot-tasks --region ${AWS_DEFAULT_REGION}
输出示例
{ "ImportSnapshotTasks": [ { "Description": "rhcos-4.6.0-x86_64-aws.x86_64", "ImportTaskId": "import-snap-fh6i8uil", "SnapshotTaskDetail": { "Description": "rhcos-4.6.0-x86_64-aws.x86_64", "DiskImageSize": 819056640.0, "Format": "VMDK", "SnapshotId": "snap-06331325870076318", "Status": "completed", "UserBucket": { "S3Bucket": "external-images", "S3Key": "rhcos-4.6.0-x86_64-aws.x86_64.vmdk" } } } ] }
复制
SnapshotId
以注册镜像。从 RHCOS 快照创建自定义 RHCOS AMI:
$ aws ec2 register-image \ --region ${AWS_DEFAULT_REGION} \ --architecture x86_64 \ 1 --description "rhcos-${RHCOS_VERSION}-x86_64-aws.x86_64" \ 2 --ena-support \ --name "rhcos-${RHCOS_VERSION}-x86_64-aws.x86_64" \ 3 --virtualization-type hvm \ --root-device-name '/dev/xvda' \ --block-device-mappings 'DeviceName=/dev/xvda,Ebs={DeleteOnTermination=true,SnapshotId=<snapshot_ID>}' 4
如需了解更多有关这些 API 的信息,请参阅 AWS 文档 导入快照 和 创建由 EBS 支持的 AMI。