3.4. 将 Red Hat Enterprise Linux 镜像上传到 AWS
按照本节中的步骤将您的镜像上传到 AWS。
3.4.1. 安装 AWS CLI
使用 AWS CLI 包括了许多在 AWS 中管理 HA 集群所需的流程。完成以下步骤以安装 AWS CLI。
先决条件
- 您已创建了 AWS Access Key ID 和 AWS Secret Access Key,并可以访问它们。具体说明和详情,请参考 快速配置 AWS CLI。
步骤
使用
dnf
命令安装 AWS 命令行工具。# dnf install awscli
使用
aws --version
命令验证您是否安装了 AWS CLI。$ aws --version aws-cli/1.19.77 Python/3.6.15 Linux/5.14.16-201.fc34.x86_64 botocore/1.20.77
根据 AWS 访问详情配置 AWS 命令行客户端。
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
其它资源
3.4.2. 创建 S3 存储桶
导入到 AWS 需要 Amazon S3 存储桶。Amazon S3 存储桶是一个 Amazon 资源用于存储对象。作为上传镜像过程的一部分,您可以创建一个 S3 存储桶,然后将镜像移到存储桶。完成以下步骤以创建存储桶。
流程
- 启动 Amazon S3 控制台。
- 点 Create Bucket。此时会出现 Create Bucket 对话框。
在 Name and region 视图中:
- 输入 Bucket name。
- 输入 Region 。
- 点 Next。
- 在 Configure options 视图中,选择所需的选项,然后单击 Next。
- 在 Set permissions 视图中,更改或者接受默认选项并点 Next。
- 查看存储桶配置。
点 Create bucket。
注意另外,您可以使用 AWS CLI 创建存储桶。例如,
aws s3 mb s3://my-new-bucket
命令会创建一个名为my-new-bucket
的 S3 存储桶。有关mb
命令的更多信息,请参阅 AWS CLI 命令参考。
3.4.3. 创建 vmimport 角色
执行以下流程来创建 vmimport
角色,这是 VM 导入所要求的。如需更多信息,请参阅 Amazon 文档中的 VM Import Service Role 部分。
流程
创建名为
trust-policy.json
的文件,并包含以下策略:在您的系统中保存该文件并记录其位置。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals":{ "sts:Externalid": "vmimport" } } } ] }
使用
create role
命令创建vmimport
角色。指定trust-policy.json
文件所在位置的完整路径。为该路径加上前缀file://
。例如:$ aws iam create-role --role-name vmimport --assume-role-policy-document file:///home/sample/ImportService/trust-policy.json
创建名为
role-policy.json
的文件,并包含以下策略:将s3-bucket-name
替换为 S3 存储桶的名称。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::s3-bucket-name", "arn:aws:s3:::s3-bucket-name/*" ] }, { "Effect":"Allow", "Action":[ "ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe*" ], "Resource":"*" } ] }
使用
put-role-policy
命令将策略附加到您所创建的角色。指定role-policy.json
文件的完整路径。例如:$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file:///home/sample/ImportService/role-policy.json
3.4.4. 将镜像转换为 S3
完成以下步骤,将您的镜像转换为 S3。示例具有代表性;它们将格式为 qcow2
文件格式的镜像转换为 raw
格式的文件。Amazon 接受 OVA
、VHD
、VHDX
、VMDK
和 raw
格式的镜像。如需有关 Amazon 接受的镜像格式的更多信息,请参阅 虚拟机导入/导出的工作原理。
步骤
运行
qemu-img
命令来转换您的镜像。例如:# qemu-img convert -f qcow2 -O raw rhel-9.0-sample.qcow2 rhel-9.0-sample.raw
将镜像推送到 S3。
$ aws s3 cp rhel-9.0-sample.raw s3://s3-bucket-name
注意这个过程可能需要几分钟时间。完成后,您可以使用 AWS S3 控制台 检查您的镜像是否成功上传到 S3 存储桶。
其它资源
3.4.5. 将您的镜像导入为快照
执行以下步骤将镜像导入为快照。
流程
创建文件来指定镜像的存储桶和路径。将文件命名为
containers.json
。在下面的示例中,将s3-bucket-name
替换为您 的存储桶名称,将s3-key
替换为您的密钥。您可以使用 Amazon S3 控制台获取镜像的密钥。{ "Description": "rhel-9.0-sample.raw", "Format": "raw", "UserBucket": { "S3Bucket": "s3-bucket-name", "S3Key": "s3-key" } }
将镜像导入为快照。本例使用公有 Amazon S3 文件;您可以使用 Amazon S3 控制台 来更改存储桶的权限设置。
aws ec2 import-snapshot --disk-container file://containers.json
终端会显示如下信息。注意消息中的
ImportTaskID
。{ "SnapshotTaskDetail": { "Status": "active", "Format": "RAW", "DiskImageSize": 0.0, "UserBucket": { "S3Bucket": "s3-bucket-name", "S3Key": "rhel-9.0-sample.raw" }, "Progress": "3", "StatusMessage": "pending" }, "ImportTaskId": "import-snap-06cea01fa0f1166a8" }
使用
describe-import-snapshot-tasks
命令跟踪导入的进度。包含ImportTaskID
。$ aws ec2 describe-import-snapshot-tasks --import-task-ids import-snap-06cea01fa0f1166a8
返回的消息显示任务的当前状态。完成后,
Status
显示为completed
。在状态中记录快照 ID。
3.4.6. 从上传的快照创建 AMI
在 EC2 中,在启动实例时,您必须选择一个 Amazon Machine Image(AMI)。执行以下步骤从上传的快照中创建 AMI。
流程
- 进入 AWS EC2 仪表板。
- 在 Elastic Block Store 下,选择 Snapshots。
-
搜索快照 ID(例如,
snap-0e718930bd72bcda0
)。 - 右键点击快照并选择 Create image。
- 为您的镜像命名。
- 在 Virtualization type 中,选择 Hardware-assisted virtualization。
- 点 Create。在关于镜像创建的备注中,有一个到您镜像的链接。
点击镜像链接。您的镜像显示在 Images>AMIs 下。
注意另外,您可以使用 AWS CLI
register-image
命令来从快照创建 AMI。如需更多信息,请参阅 register-image。下面是一个示例。$ aws ec2 register-image \ --name "myimagename" --description "myimagedescription" --architecture x86_64 \ --virtualization-type hvm --root-device-name "/dev/sda1" --ena-support \ --block-device-mappings "{\"DeviceName\": \"/dev/sda1\",\"Ebs\": {\"SnapshotId\": \"snap-0ce7f009b69ab274d\"}}"
您必须将根设备卷
/dev/sda1
指定为root-device-name
。有关 AWS 设备映射的概念信息,请参阅 块设备映射示例。
3.4.7. 从 AMI 启动实例
执行以下步骤从 AMI 启动和配置实例。
流程
- 在 AWS EC2 Dashboard 中选择 Images,然后选择 AMI。
- 右键点击您的镜像并选择 Launch。
选择一个满足或超过工作负载要求的 Instance Type。
有关实例类型的信息,请参阅 Amazon EC2 实例类型。
点 Next: Configure Instance Details。
- 输入您要创建的实例数量。
- 对于 Network,选择您在设置 AWS 环境时创建的 VPC。为实例选择子网或创建新子网。
为 Auto-assign Public IP 选择 Enable。
注意这些是创建基本实例所需的最小配置选项。根据您的应用程序要求查看其他选项。
- 点击 Next: Add Storage。验证默认存储是否足够。
点击 Next: Add Tags。
注意标签可帮助您管理 AWS 资源。有关标记的信息,请参阅 标记您的 Amazon EC2 资源。
- 点 Next: 配置安全组。选择设置 AWS 环境时创建的安全组。
- 点 Review and Launch。验证您的选择。
点 Launch。此时会提示您选择现有密钥对或创建新密钥对。选择设置 AWS 环境时创建的密钥对。
注意验证您的私钥权限是否正确。如有必要,使用命令选项
chmod 400 <keyname>.pem
来更改权限。- 点 Launch Instances。
点 View Instances。您可以命名实例。
现在,您可以通过选择一个实例并单击 Connect 来启动与实例的 SSH 会话。使用为 独立的 SSH 客户端 提供的示例。
注意另外,您可以使用 AWS CLI 启动实例。如需更多信息,请参阅 Amazon 文档中的启动、列出和终止 Amazon EC2 实例。
3.4.8. 附加红帽订阅
要将红帽订阅附加到 RHEL 实例,请使用以下步骤。
先决条件
- 您必须已启用您的订阅。
流程
注册您的系统。
# subscription-manager register --auto-attach
附加您的订阅。
- 您可以使用激活码来附加订阅。如需更多信息,请参阅创建红帽客户门户网站激活码。
- 或者,您可以使用订阅池(池 ID)的 ID 手动附加订阅。请参阅通过命令行附加和删除订阅。
可选: 要在 Red Hat Hybrid Cloud Console 中收集有关实例的各种系统指标,您可以使用 Red Hat Insights 注册实例。
# insights-client register --display-name <display-name-value>
有关 Red Hat Insights 的进一步配置的信息,请参阅 Red Hat Insights 的客户端配置指南。
3.4.9. 对 AWS 黄金镜像设置自动注册
要在 Amazon Web Services(AWS)上更快、更舒适地部署 RHEL 8 虚拟机,您可以将 RHEL 8 的黄金镜像设置为自动注册到 Red Hat Subscription Manager(RHSM)。
先决条件
您已下载了 AWS 的最新 RHEL 8 黄金镜像。具体步骤请参阅 在 AWS 上使用黄金镜像。
注意一个 AWS 帐户一次只能附加到一个红帽帐户。因此,在将其附加到您的红帽帐户之前,请确保其他用户不需要访问 AWS 帐户。
步骤
- 将黄金镜像上传到 AWS。具体步骤请参阅将 Red Hat Enterprise Linux 镜像上传到 AWS。
- 使用上传的镜像创建虚拟机。他们将自动订阅 RHSM。
验证
在使用上述说明创建的 RHEL 9 虚拟机中,通过执行
subscription-manager identity
命令来验证系统是否已注册到 RHSM。在成功注册的系统上,这会显示系统的 UUID。例如:# subscription-manager identity system identity: fdc46662-c536-43fb-a18a-bbcb283102b7 name: 192.168.122.222 org name: 6340056 org ID: 6340056