第 3 章 在 Amazon Web Services 上将 Red Hat Enterprise Linux 镜像部署为 EC2 实例
您有多个选项,可在 Amazon Web Services(AWS)上将 Red Hat Enterprise Linux(RHEL)7 镜像部署为 EC2 实例。本章讨论选择镜像的选项,以及列出或引用主机系统和虚拟机(VM)的系统要求。本章还提供了从 ISO 镜像创建自定义虚拟机并将其上传到 EC2 和启动 EC2 实例的步骤。
您可以从 ISO 镜像创建自定义虚拟机,但红帽建议您使用 Red Hat Image Builder 产品来创建自定义镜像,供特定云供应商使用。使用镜像构建器,您可以使用 ami
格式创建并上传 AMI(Amazon Machine Image)。如需更多信息,请参阅镜像构建器指南。
本章在很多位置使用了 Amazon 文档。如需很多流程,请参阅引用的 Amazon 文档了解更多详情。
如需可以在 AWS 上安全使用的红帽产品列表,请参阅 Amazon Web Services。
先决条件
- 注册一个红帽客户门户网站(Red Hat Customer Portal) 帐户。
- 注册 AWS 并设置 AWS 资源。如需更多信息,请参阅使用 Amazon EC2 设置。
- 在 Red Hat Cloud Access 程序中启用您的订阅。Red Hat Cloud Access 程序允许您在红帽的完全支持下将红帽订阅从物理或内部系统移到 AWS。
其它资源
3.1. AWS 上的 Red Hat Enterprise Linux 镜像选项
下表列出了镜像的不同选择并记录镜像选项的不同。
表 3.1. 镜像选项
镜像选项 | 订阅 | 示例情境 | 注意事项 |
---|---|---|---|
选择部署一个 Red Hat Gold Image。 | 利用您现有的红帽订阅。 | 通过 Red Hat Cloud Access 程序 启用订阅,然后在 AWS 上选择 Red Hat Gold Image。 | 订阅包括红帽产品成本 ; 您可以为 Amazon 提供所有其他实例成本。 Red Hat Gold Images 被称为 "Cloud Access" 镜像,因为您使用现有的红帽订阅。红帽直接为 Cloud Access 镜像提供支持。 |
选择部署移动到 AWS 的自定义镜像。 | 利用您现有的红帽订阅。 | 通过 Red Hat Cloud Access 程序 启用订阅,上传您的自定义镜像并附加您的订阅。 | 订阅包括红帽产品成本 ; 您可以为 Amazon 提供所有其他实例成本。 移动到 AWS 的自定义镜像是 "Cloud Access" 镜像,因为您利用了您现有的红帽订阅。红帽直接为 Cloud Access 镜像提供支持。 |
选择部署包含 RHEL 的现有 Amazon 镜像。 | AWS EC2 镜像包括红帽产品。 | 在 AWS 管理控制台上启动实例时,选择 RHEL 镜像,或者从 AWS Marketplace 中选择镜像。 | 根据 pay-as-you-go 模式每小时向 Amazon 支付。这样的镜像称为 "on-demand" 镜像。Amazon 支持 on-demand 镜像。 红帽提供了镜像的更新。AWS 通过 Red Hat Update Infrastructure(RHUI)提供更新。 |
您可以使用 Red Hat Image Builder 为 AWS 创建自定义镜像。如需更多信息,请参阅镜像构建器指南。
您无法将 on-demand 实例转换为 Red Hat Cloud Access 实例。要从 on-demand 镜像改为 Red Hat Cloud Access bring-your-own-subscription(BYOS)镜像,请创建新的 Red Hat Cloud Access 实例并从您的按需实例迁移数据。在迁移数据后取消您的 on-demand 实例以避免出现重复账单。
本章的剩余部分包含与自定义镜像相关的信息和流程。
3.2. 安装 AWS CLI
本章的许多流程包括使用 AWS CLI。完成以下步骤以安装 AWS CLI。
先决条件
您需要已创建并有权访问 AWS 访问密钥 ID 和 AWS Secret 访问密钥。有关信息和说明,请参阅快速配置 AWS CLI。
流程
安装 Python 3 和
pip
工具。# yum install python3 # yum install python3-pip
使用
pip
命令安装 AWS 命令行工具。# pip3 install awscli
运行
aws --version
命令验证您是否安装了 AWS CLI。$ aws --version aws-cli/1.16.182 Python/2.7.5 Linux/3.10.0-957.21.3.el7.x86_64 botocore/1.12.172
根据 AWS 访问详情配置 AWS 命令行客户端。
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
其它资源
3.3. 虚拟机配置设置
云虚拟机必须具有以下配置设置。
表 3.2. 虚拟机配置设置
设置 | 建议 |
---|---|
ssh |
|
dhcp | 应该为 dhcp 配置主虚拟适配器。 |
3.4. 从 ISO 镜像创建基本虚拟机
按照本节中的步骤从 ISO 镜像创建基础镜像。
先决条件
按照 Virtualization 部署和管理指南,为您的 Red Hat Enterprise Linux 7 主机机器启用虚拟化。
3.4.1. 下载 ISO 镜像
流程
- 从红帽客户门户网站下载最新的 Red Hat Enterprise Linux ISO 镜像。
-
将镜像移动到
/var/lib/libvirt/images
目录中。
3.4.2. 从 ISO 镜像创建虚拟机
流程
- 确保已为虚拟化启用主机机器。有关安装可升级软件包的信息和步骤,请参阅在现有 Red Hat Enterprise Linux 系统上安装虚拟化软件包
创建并启动基本 Red Hat Enterprise Linux 虚拟机。有关创建虚拟机的说明,请参阅创建虚拟机。
如果使用命令行创建虚拟机,请确保将默认内存和 CPU 设置为您所需的容量。将您的虚拟网络接口设置为 virtio。
下面是一个基本的命令行示例。
virt-install --name _vmname_ --memory 2048 --vcpus 2 --disk size=8,bus=virtio --location rhel-7.0-x86_64-dvd.iso --os-variant=rhel7.0
如果您使用 virt-manager 应用程序创建虚拟机,请按照使用 virt-manager 创建虚拟机的步骤进行以下操作:
- 不要选择 Immediately Start VM。
- 将 Memory 和 Storage Size 设置为您需要的值。
- 在开始安装前,请确保将 Virtual Network Interface Settings 中的 Model 更改为 virtio,并将您的 vCPU 更改为您想要的虚拟机容量设置。
3.4.3. 完成 RHEL 安装
执行以下步骤完成安装并在虚拟机启动后启用 root 访问。
流程
- 选择您要在安装过程中使用的语言。
在 Installation Summary 视图中:
- 点 Software Selection,选择 Minimal Install。
- 点 Done。
点击 Installation Destination 并检查 Storage Configuration 中的 Custom。
-
确保
/boot
验证至少有 500 MB。您可以使用剩余空间作为 root/
。 - 建议使用标准分区,但您可以使用逻辑卷管理(LVM)。
- 您可以将 xfs、ext4 或者 ext3 用于文件系统。
- 完成更改后点 Done。
-
确保
- 点 Begin Installation。
- 设置 Root 密码。
-
重启虚拟机,然后在安装完成后以
root
身份登录。 配置镜像。
注意确定安装并启用
cloud-init
软件包。- 关闭虚拟机。
3.5. 将 Red Hat Enterprise Linux 镜像上传到 AWS
按照本节中的步骤,在主机机器中将您的镜像上传到 AWS。
3.5.1. 创建 S3 存储桶
导入到 AWS 需要 Amazon S3 存储桶。Amazon S3 存储桶是一个 Amazon 资源用于存储对象。作为上传镜像过程的一部分,您可以创建一个 S3 存储桶,然后将镜像移到存储桶。完成以下步骤以创建存储桶。
先决条件
- 您需要安装 AWS CLI。如需更多信息,请参阅安装 AWS CLI。
流程
- 启动 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.5.2. 创建 vmimport 角色
执行以下步骤创建 VM 导入所需的 vmimport
角色。如需更多信息,请参阅 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.5.3. 将 AMI 转换为 S3
完成以下步骤,将 Amazon Machine Image(AMI)转换为 S3。示例是代表 ; 它们将 qcow2
文件格式格式的镜像转换为 raw
格式。Amazon 接受 OVA
、VHD
、VHDX
VMDK
、和 raw
格式的镜像。如需更多信息,请参阅 Amazon 接受的镜像格式的 VM Import/Export Works。
流程
运行
qemu-img
命令转换您的镜像。下面是一个示例。qemu-img convert -f qcow2 -O raw rhel-server-7.7-1-x86_64-kvm.qcow2 rhel-server-7.7-1-x86_64-kvm.raw
将镜像推送到 S3。
aws s3 cp rhel-server-7.7.1-x86_64-kvm.raw s3://s3-_bucket-name_
注意这个过程可能需要几分钟时间。完成后,您可以使用 AWS S3 控制台检查您的镜像是否已成功上传到 S3 存储桶。
其它资源
3.5.4. 从原始镜像创建 AMI
执行以下步骤从原始镜像创建 AMI。
先决条件
- 您需要安装 AWS CLI。如需更多信息,请参阅安装 AWS CLI。
流程
-
您可以在 AWS CLI 上运行
aws ec2 import-image
命令从原始镜像创建 AMI。
# aws ec2 import-image --platform Linux --license-type BYOL --no-encrypted --description _imagedescription_ --architecture x86_64 --disk-containers Format=Raw,UserBucket="{S3Bucket=virtqes1,S3Key=rhel-server-ec2-7.9-30.x86_64.raw}" --region _regionname_
其它资源
3.5.5. 从 AMI 启动实例
执行以下步骤从 AMI 启动和配置实例。
流程
- 在 AWS EC2 Dashboard 中选择 Images,然后选择 AMI。
- 右键点击您的镜像并选择 Launch。
选择满足或超过工作负载要求的 实例类型。
如需有关实例类型的信息,请参阅 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。您可以命名实例。
现在,您可以通过选择实例并点击 连接 来启动 SSH 会话到实例。使用为 独立 SSH 客户端提供的示例命令。
注意另外,您可以使用 AWS CLI 启动实例。如需更多信息,请参阅 Amazon 文档中的启动、列出和终止 Amazon EC2 实例。
3.5.6. 附加红帽订阅
完成以下步骤以附加您之前通过 Red Hat Cloud Access 程序启用的订阅。
先决条件
您必须已启用您的订阅。
流程
注册您的系统。
subscription-manager register --auto-attach
附加您的订阅。
- 您可以使用激活码来附加订阅。请参阅创建红帽客户门户网站激活码。
- 或者,您可以使用订阅池(池 ID)的 ID 手动附加订阅。请参阅通过 command Line 来附加和删除订阅。