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

步骤

  1. 使用 dnf 命令安装 AWS 命令行工具

    # dnf install awscli
  2. 使用 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
  3. 根据 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 存储桶,然后将镜像移到存储桶。完成以下步骤以创建存储桶。

流程

  1. 启动 Amazon S3 控制台
  2. Create Bucket。此时会出现 Create Bucket 对话框。
  3. Name and region 视图中:

    1. 输入 Bucket name
    2. 输入 Region
    3. Next
  4. Configure options 视图中,选择所需的选项,然后单击 Next
  5. Set permissions 视图中,更改或者接受默认选项并点 Next
  6. 查看存储桶配置。
  7. 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 部分。

流程

  1. 创建名为 trust-policy.json 的文件,并包含以下策略:在您的系统中保存该文件并记录其位置。

    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Effect": "Allow",
             "Principal": { "Service": "vmie.amazonaws.com" },
             "Action": "sts:AssumeRole",
             "Condition": {
                "StringEquals":{
                   "sts:Externalid": "vmimport"
                }
             }
          }
       ]
    }
  2. 使用 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
  3. 创建名为 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":"*"
          }
       ]
    }
  4. 使用 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 接受 OVAVHDVHDXVMDKraw 格式的镜像。如需有关 Amazon 接受的镜像格式的更多信息,请参阅 虚拟机导入/导出的工作原理

步骤

  1. 运行 qemu-img 命令来转换您的镜像。例如:

    # qemu-img convert -f qcow2 -O raw rhel-9.0-sample.qcow2 rhel-9.0-sample.raw
  2. 将镜像推送到 S3。

    $ aws s3 cp rhel-9.0-sample.raw s3://s3-bucket-name
    注意

    这个过程可能需要几分钟时间。完成后,您可以使用 AWS S3 控制台 检查您的镜像是否成功上传到 S3 存储桶。

3.4.5. 将您的镜像导入为快照

执行以下步骤将镜像导入为快照。

流程

  1. 创建文件来指定镜像的存储桶和路径。将文件命名为 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"
        }
    }
  2. 将镜像导入为快照。本例使用公有 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"
    }
  3. 使用 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。

流程

  1. 进入 AWS EC2 仪表板。
  2. Elastic Block Store 下,选择 Snapshots
  3. 搜索快照 ID(例如,snap-0e718930bd72bcda0)。
  4. 右键点击快照并选择 Create image
  5. 为您的镜像命名。
  6. Virtualization type 中,选择 Hardware-assisted virtualization
  7. Create。在关于镜像创建的备注中,有一个到您镜像的链接。
  8. 点击镜像链接。您的镜像显示在 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 启动和配置实例。

流程

  1. 在 AWS EC2 Dashboard 中选择 Images,然后选择 AMI
  2. 右键点击您的镜像并选择 Launch
  3. 选择一个满足或超过工作负载要求的 Instance Type

    有关实例类型的信息,请参阅 Amazon EC2 实例类型

  4. Next: Configure Instance Details

    1. 输入您要创建的实例数量
    2. 对于 Network,选择您在设置 AWS 环境时创建的 VPC。为实例选择子网或创建新子网。
    3. 为 Auto-assign Public IP 选择 Enable

      注意

      这些是创建基本实例所需的最小配置选项。根据您的应用程序要求查看其他选项。

  5. 点击 Next: Add Storage。验证默认存储是否足够。
  6. 点击 Next: Add Tags

    注意

    标签可帮助您管理 AWS 资源。有关标记的信息,请参阅 标记您的 Amazon EC2 资源

  7. Next: 配置安全组。选择设置 AWS 环境时创建的安全组。
  8. Review and Launch。验证您的选择。
  9. Launch。此时会提示您选择现有密钥对或创建新密钥对。选择设置 AWS 环境时创建的密钥对。

    注意

    验证您的私钥权限是否正确。如有必要,使用命令选项 chmod 400 <keyname>.pem 来更改权限。

  10. Launch Instances
  11. View Instances。您可以命名实例。

    现在,您可以通过选择一个实例并单击 Connect 来启动与实例的 SSH 会话。使用为 独立的 SSH 客户端 提供的示例。

    注意

    另外,您可以使用 AWS CLI 启动实例。如需更多信息,请参阅 Amazon 文档中的启动、列出和终止 Amazon EC2 实例

3.4.8. 附加红帽订阅

要将红帽订阅附加到 RHEL 实例,请使用以下步骤。

先决条件

  • 您必须已启用您的订阅。

流程

  1. 注册您的系统。

    # subscription-manager register --auto-attach
  2. 附加您的订阅。

  3. 可选: 要在 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 帐户。

步骤

  1. 将黄金镜像上传到 AWS。具体步骤请参阅将 Red Hat Enterprise Linux 镜像上传到 AWS
  2. 使用上传的镜像创建虚拟机。他们将自动订阅 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