1.5. 使用 RHEL 镜像构建器准备并上传云镜像
RHEL 镜像构建器可以创建准备在各种云平台上使用的自定义系统镜像。要在云中使用自定义的 RHEL 系统镜像,请使用 RHEL 镜像构建器,使用所选的输出类型创建系统镜像,配置您的系统以上传镜像,并将镜像上传到您的云帐户中。您可以通过 RHEL web 控制台中的 Image Builder
应用程序将自定义镜像推送到云,其可用于我们支持的服务提供商的子集,如 AWS 和 Microsoft Azure 云。请参阅 创建镜像并直接将其自动上传到 AWS Cloud AMI 和 创建 VHD 镜像并直接将其自动上传到 Microsoft Azure 云。
1.5.1. 准备 AMI 镜像,并将其上传到 AWS
您可以创建自定义镜像,并使用 RHEL 镜像构建器,手动或自动将其更新到 AWS 云。
1.5.1.1. 准备手动上传 AWS AMI 镜像
在上传 AWS AMI 镜像前,您必须配置系统来上传镜像。
先决条件
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须具有一个可写的 S3 存储桶。
流程
安装 Python 3 和
pip
工具:# yum install python3 python3-pip
使用
pip
安装 AWS 命令行工具 :# pip3 install awscli
设置您的配置文件。终端提示您提供凭证、地区和输出格式:
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
为存储桶定义名称,并创建存储桶:
$ BUCKET=bucketname $ aws s3 mb s3://$BUCKET
使用实际的存储桶名称替换
bucketname
。它必须是全局唯一的名称。因此,您的存储桶会被创建。要授予访问 S3 存储桶的权限,如果您还没有这样做,请在 AWS Identity and Access Management (IAM) 中创建一个
vmimport
S3 角色:创建一个 JSON 格式的带有信任策略配置的
trust-policy.json
文件。例如:{ "Version": "2022-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:Externalid": "vmimport" } } }] }
创建一个 JSON 格式的带有角色策略配置的
role-policy.json
文件。例如:{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::%s", "arn:aws:s3:::%s/"] }, { "Effect": "Allow", "Action": ["ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe"], "Resource": "*" }] } $BUCKET $BUCKET
使用
trust-policy.json
文件为您的 Amazon Web Services 帐户创建一个角色:$ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
使用
role-policy.json
文件嵌入一个内联策略文档:$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
1.5.1.2. 使用 CLI 手动将 AMI 镜像上传到 AWS
您可以使用 RHEL 镜像构建器构建 ami
镜像,并使用 CLI 手动将它们直接上传到 Amazon AWS Cloud 服务提供商。
流程
使用文本编辑器,使用以下内容创建配置文件:
provider = "aws" [settings] accessKeyID = "AWS_ACCESS_KEY_ID" secretAccessKey = "AWS_SECRET_ACCESS_KEY" bucket = "AWS_BUCKET" region = "AWS_REGION" key = "IMAGE_KEY"
将字段中的值替换为您的
accessKeyID
、secretAccessKey
、bucket
和region
的凭证。IMAGE_KEY
值是要上传到 EC2 的虚拟机镜像的名称。- 将文件保存为 CONFIGURATION-FILE.toml,再关闭文本编辑器。
启动 compose 来将其上传到 AWS:
# composer-cli compose start blueprint-name image-type image-key configuration-file.toml
替换:
- 使用您创建的蓝图名称替换 blueprint-name
-
使用
ami
镜像类型替换 image-type。 - 使用要上传到 EC2 的虚拟机镜像的名称替换 image-key。
带有云提供商的配置文件名称的 configuration-file.toml。
注意您必须有要将自定义镜像发送到的存储桶的正确 AWS 身份和访问管理(IAM)设置。在将镜像上传到存储桶前,您必须先将策略设置为存储桶。
检查镜像构建的状态:
# composer-cli compose status
在映像上传过程完成后,您可以看到"FINISHED"状态。
验证
确认镜像上传成功:
-
访问菜单中的 EC2,并在 AWS 控制台中选择正确的区域。镜像必须具有
available
状态,以指示它已被成功上传。 - 在仪表盘上,选择您的镜像并点击 。
其它资源
1.5.1.3. 创建镜像并自动将其上传到 AWS Cloud AMI
您可以使用 RHEL 镜像构建器创建 (.raw)
镜像,并选择 Upload to AWS 复选框,自动将您创建的输出镜像直接推送到 Amazon AWS Cloud AMI 服务提供商。
先决条件
-
您必须有
root
或wheel
组用户对系统的访问权限。 - 您已在浏览器中打开了 RHEL web 控制台的 RHEL 镜像构建器界面。
- 您已创建了蓝图。请参阅 在 web 控制台界面中创建蓝图。
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须具有一个可写的 S3 存储桶。
流程
- 在 RHEL 镜像构建器仪表盘中,点之前创建的 blueprint name。
- 选择 选项卡。
点
创建自定义镜像。Create Image 窗口打开。
-
在 Type 下拉菜单中选择
Amazon Machine Image Disk (.raw)
。 - 选中 Upload to AWS 复选框,来将您的镜像上传到 AWS 云,然后点 。
要验证您是否可以访问 AWS ,请在对应的字段中输入您的
"AWS access key ID"
和"AWS secret access key"
。点击 。注意您只能在创建新访问密钥 ID 时查看 AWS secret 访问密钥。如果您不知道您的 Secret 密钥,请生成一个新的 Access Key ID。
-
在
Image name
字段中输入镜像名称,在Amazon S3 bucket name
字段中输入 Amazon bucket 名称,并为您要添加自定义镜像的存储桶输入AWS region
字段。点击 。 查看信息并点
。可选,点
来修改任何不正确的详情。注意您必须具有要发送自定义镜像的存储桶的正确 IAM 设置。此流程使用 IAM 导入和导出,因此您必须在将镜像上传到存储桶前为存储桶设置 策略。如需更多信息,请参阅 IAM 用户所需的权限。
-
在 Type 下拉菜单中选择
右上角的弹出窗口告诉您保存的进度。它还告知镜像创建过程、创建此镜像的过程以及后续的上传到 AWS Cloud。
完成这个过程后,您可以看到 镜像构建完成状态。
在浏览器中,访问 Service→EC2。
-
在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有
Available
状态,以指示它已被上传。 - 在 AWS 仪表盘上,选择您的镜像并点 。
-
在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有
- 此时会打开一个新窗口。根据启动镜像所需的资源选择实例类型。点 。
- 查看您的实例启动详情。如果需要进行任何更改,您可以编辑任何部分。点
在启动实例之前,选择一个访问它的公钥。
您可以使用您已有的密钥对,也可以创建新的密钥对。
按照以下步骤在 EC2 中创建新密钥对,并将它连接到新实例。
- 在下拉菜单中选择 "Create a new key pair"。
- 输入新密钥对名称。它生成一个新的密钥对。
- 点 "下载密钥对" 在您的本地系统中保存新密钥对。
然后,您可以点
启动您的实例。您可以检查实例的状态,它显示为 Initializing。
- 实例状态变为 running 后, 按钮将变为可用。
点
。此时会出现一个窗口,其中包含有关如何使用 SSH 进行连接的说明。- 选择 A standalone SSH client 作为首选连接方法并打开终端。
在您存储私钥的位置,确保您的密钥是公开可见的,以便 SSH 可以正常工作。要做到这一点,请运行以下命令:
$ chmod 400 <_your-instance-name.pem_>
使用其公共 DNS 连接到您的实例:
$ ssh -i <_your-instance-name.pem_> ec2-user@<_your-instance-IP-address_>
键入
yes
以确认您要继续连接。因此,您通过 SSH 连接到您的实例。
验证
- 检查在使用 SSH 连接到您的实例的过程中是否能够执行任何操作。
1.5.2. 准备 VHD 镜像,并将其上传到 Microsoft Azure
您可以创建自定义镜像,并使用 RHEL 镜像构建器,手动或自动将它们更新到 Microsoft Azure 云。
1.5.2.1. 准备手动上传 Microsoft Azure VHD 镜像
要创建一个可手动上传到 Microsoft Azure
云的 VHD 镜像,您可以使用 RHEL 镜像构建器。
先决条件
- 您必须有 Microsoft Azure 资源组和存储帐户。
-
您已安装了 Python。
AZ CLI
工具依赖 python。
流程
导入 Microsoft 存储库密钥:
# rpm --import https://packages.microsoft.com/keys/microsoft.asc
使用以下信息创建一个本地
azure-cli.repo
存储库:将azure-cli.repo
存储库保存在/etc/yum.repos.d/
下:[azure-cli] name=Azure CLI baseurl=https://packages.microsoft.com/yumrepos/vscode enabled=1 gpgcheck=1 gpgkey=https://packages.microsoft.com/keys/microsoft.asc
安装 Microsoft Azure CLI:
# yumdownloader azure-cli # rpm -ivh --nodeps azure-cli-2.0.64-1.el7.x86_64.rpm
注意下载的 Microsoft Azure CLI 软件包版本可能会因当前可用的版本而异。
运行 Microsoft Azure CLI:
$ az login
终端会显示以下信息
Note, we have launched a browser for you to login.For old experience with device code, use "az login --use-device-code
.然后,终端会打开浏览器,其中包含可从其登录 https://microsoft.com/devicelogin 的链接。注意如果您正在运行一个远程(SSH)会话,则登录页面链接不会在浏览器中打开。在这种情况下,您可以将链接复制到浏览器,并登录以验证您的远程会话。要登录,使用网页浏览器打开页面 https://microsoft.com/devicelogin 并输入要进行身份验证的设备代码。
列出 Microsoft Azure 中存储帐户的密钥:
$ az storage account keys list --resource-group <resource_group_name> --account-name <storage_account_name>
将 resource-group-name 替换为 Microsoft Azure 资源组的名称,将 storage-account-name 替换为 Microsoft Azure 存储帐户的名称。
注意您可以使用以下命令列出可用资源:
$ az resource list
记录上一命令输出中
key1
的值。创建存储容器:
$ az storage container create --account-name <storage_account_name>\ --account-key <key1_value> --name <storage_account_name>
将 storage-account-name 替换为存储帐户的名称。
其它资源
1.5.2.2. 手动将 VHD 镜像上传到 Microsoft Azure 云
在创建了自定义 VHD 镜像后,您可以手动将其上传到 Microsoft Azure 云。
先决条件
- 必须设置您的系统以上传 Microsoft Azure VHD 镜像。请参阅 准备上传 Microsoft Azure VHD 镜像。
您必须有由 RHEL 镜像构建器创建的 Microsoft Azure VHD 镜像。
-
在 GUI 中,使用
Azure Disk Image (.vhd)
镜像类型。 -
在 CLI 中,使用
vhd
输出类型。
-
在 GUI 中,使用
流程
将镜像推送到 Microsoft Azure 并从中创建一个实例:
$ az storage blob upload --account-name <_account_name_> --container-name <_container_name_> --file <_image_-disk.vhd> --name <_image_-disk.vhd> --type page ...
上传到 Microsoft Azure Blob 存储后,从其创建一个 Microsoft Azure 镜像:
$ az image create --resource-group <_resource_group_name_> --name <_image_>-disk.vhd --os-type linux --location <_location_> --source https://$<_account_name_>.blob.core.windows.net/<_container_name_>/<_image_>-disk.vhd - Running ...
注意因为您使用 RHEL 镜像构建器生成混合镜像的镜像支持 V1 = BIOS 和 V2 = UEFI 实例类型,所以您可以指定
--hyper-v-generation
参数。默认的实例类型是 V1。
验证
使用 Microsoft Azure 门户创建实例,或者使用以下命令:
$ az vm create --resource-group <_resource_group_name_> --location <_location_> --name <_vm_name_> --image <_image_>-disk.vhd --admin-username azure-user --generate-ssh-keys - Running ...
-
通过 SSH 使用您的私钥访问生成的实例。以
azure-user
用户身份登录。此用户名在上一步中设置了。
其它资源
-
生成
.vhd
格式的镜像失败 (红帽知识库)
1.5.2.3. 创建 VHD 镜像,并自动将其上传到 Microsoft Azure 云
您可以使用 RHEL 镜像构建器创建 .vhd
镜像,该镜像将被自动上传到 Microsoft Azure Cloud 服务提供商的 Blob 存储中。
先决条件
- 有对系统的 root 访问权限。
- 您有访问 RHEL web 控制台的 RHEL 镜像构建器界面的权限。
- 您创建了蓝图。请参阅在 web 控制台界面中创建 RHEL 镜像构建器蓝图。
- 您已创建了 Microsoft 存储帐户。
- 您有一个可写入 Blob Storage。
流程
- 在 RHEL 镜像构建器仪表盘中,选择要使用的蓝图。
- 点 选项卡。
点
创建自定义的.vhd
镜像。Create image 向导将打开。
-
从 Type 下拉菜单中选择
Microsoft Azure (.vhd)
。 - 选中 Upload to Azure 复选框,来将镜像上传到 Microsoft Azure Cloud。
- 输入 Image Size ,并点 。
-
从 Type 下拉菜单中选择
在 Upload to Azure 页面行,输入以下信息:
在 Authentication 页面上,输入:
- 您的 存储帐户 名称。您可以在 Storage account 页面的 Microsoft Azure 门户 中找到它。
- 您的存储访问密钥 :您可以在 Access Key Storage 页面中找到它。
- 点击 。
在 Authentication 页面上,输入:
- 镜像名称。
- 存储容器.它是您将镜像上传到的 blob 容器。您可以在 Microsoft Azure 门户 的 Blob service 部分中找到它。
- 点击 。
在 Review 页面上,点 。RHEL 镜像构建器和上传进程启动。
访问推送到 Microsoft Azure Cloud 的镜像。
- 访问 Microsoft Azure 门户网站。
- 在搜索栏中,输入"storage account",然后从列表中单击 Storage accounts。
- 在搜索栏中输键入"Images",然后在 Services 下选择第一个条目。您将被重定向到 镜像仪表盘。
- 在导航面板上,单击 Containers。
-
查找您创建的容器。容器中是您使用 RHEL 镜像构建器创建并推送的
.vhd
文件。
验证
验证您能否创建虚拟机镜像并启动它。
- 在搜索栏中,输入镜像帐户,并单击列表中的 Images。
- 单击 。
- 从下拉列表中,选择您之前使用的资源组。
- 输入镜像的名称。
- 对于 OS type,请选择 Linux。
- 对于 VM generation,请选择 Gen 2。
- 在 Storage Blob 下,点 ,并点存储账户和容器,直到您到达 VHD 文件。
- 点页面末尾的 Select。
- 选择一个帐户类型,例如 Standard SSD。
- 点 ,然后点 。等待几分钟,以便创建镜像。
要启动虚拟机,请按照以下步骤执行:
- 点 。
- 从标题的菜单栏中,单击 。
- 输入虚拟机的名称。
- 完成 Size 和 Administrator account 部分。
点
,然后点 。您可以查看部署进度。部署完成后,单击虚拟机名称,以检索使用 SSH 连接的实例的公用 IP 地址。
- 打开一个终端,创建一个 SSH 连接来连接到虚拟机。
1.5.2.4. 上传 VMDK 镜像并在 vSphere 中创建 RHEL 虚拟机
使用 RHEL 镜像构建器,您可以创建自定义的 VMware vSphere 系统镜像,可以是 Open virtualization 格式(.ova
),也可以是 Virtual disk (.vmdk
)格式。您可以将这些镜像上传到 VMware vSphere 客户端。您可以使用 govc import.vmdk
CLI 工具将 .vmdk
或 .ova
镜像上传到 VMware vSphere。您创建的 vmdk
包含安装的 cloud-init
软件包,您可以使用它,通过使用用户数据来提供给用户:
不支持使用 VMware vSphere GUI 上传 vmdk
镜像。
先决条件
- 您已使用用户名和密码自定义创建了一个蓝图。
-
您已使用 RHEL 镜像构建器创建了
.ova
或.vmdk
格式的 VMware vSphere 镜像,并将其下载到主机系统。 -
您安装并配置了
govc
CLI 工具,以便能够使用import.vmdk
命令。
流程
使用 GOVC 环境变量在用户环境中配置以下值:
GOVC_URL GOVC_DATACENTER GOVC_FOLDER GOVC_DATASTORE GOVC_RESOURCE_POOL GOVC_NETWORK
- 进入到您下载 VMware vSphere 镜像的目录。
按照以下步骤在 vSphere 上启动 VMware vSphere 镜像:
将 VMware vSphere 镜像导入到 vSphere:
$ govc import.vmdk ./composer-api.vmdk foldername
对于
.ova
格式:$ govc import.ova ./composer-api.ova foldername
在 vSphere 中创建虚拟机而不开机:
govc vm.create \ -net.adapter=vmxnet3 \ -m=4096 -c=2 -g=rhel8_64Guest \ -firmware=efi -disk=”foldername/composer-api.vmdk” \ -disk.controller=scsi -on=false \ vmname
对于
.ova
格式,将行-firmware=efi -disk=”foldername/composer-api.vmdk” \
替换为 `-firmware=efi -disk=”foldername/composer-api.ova”\打开虚拟机:
govc vm.power -on vmname
检索虚拟机 IP 地址:
govc vm.ip vmname
使用您在蓝图中指定的用户名和密码,使用 SSH 登录到虚拟机:
$ ssh admin@<_ip_address_of_the_vm_>
注意如果您使用
govc datastore.upload
命令将.vmdk
镜像从本地主机复制到目的地,则不支持使用生成的镜像。在 vSphere GUI 中没有使用import.vmdk
命令的选项,因此 vSphere GUI 不支持直接上传。因此,.vmdk
镜像无法从 vSphere GUI 使用。
1.5.2.5. 使用镜像构建器 GUI 创建 VMDK 镜像,并自动将其上传到 vSphere
您可以使用 RHEL 镜像构建器 GUI 工具构建 VMware 镜像,并自动将镜像直接推送到 vSphere 实例中。这可避免下载镜像文件并手动推送它。您创建的 vmdk
包含安装的 cloud-init
软件包,您可以使用它来使用用户数据提供给用户,例如:要使用 RHEL 镜像构建器构建 .vmdk
镜像,并将它们直接推送到 vSphere 实例服务提供商,请按照以下步骤执行:
先决条件
-
您是
root
或weldr
组的成员。 - 您已在浏览器中打开了 link:https://localhost:9090/RHEL 镜像构建器。
- 您已创建了蓝图。请参阅 在 web 控制台界面中创建一个 RHEL 镜像构建器蓝图。
- 您有一个 vSphere 帐户。
流程
- 对于您创建的蓝图,点 选项卡。
点
创建自定义镜像。此时将打开 Image 类型窗口。
在 Image 类型 窗口中:
- 从下拉菜单中选择类型:VMware vSphere (.vmdk)。
- 选中 Upload to VMware 复选框,将镜像上传到 vSphere。
- 可选:设置您要实例化的镜像的大小。最小的默认大小为 2 GB。
- 点击 。
在 Upload to VMware 窗口中,在 Authentication 下输入以下详情:
- 用户名 :vSphere 帐户的用户名。
- Password :vSphere 帐户的密码。
在 Upload to VMware 窗口中,在 Destination 下输入有关镜像上传目的地的以下详情:
- Image name :镜像的名称。
- 主机 :VMware vSphere 的 URL。
- cluster:集群的名称。
- 数据中心 :数据中心的名称。
- Data store :数据存储的名称。
- 点 Next。
在 Review 窗口中,查看镜像创建的详情并点 。
您可以点
来修改任何不正确的详情。RHEL 镜像构建器将 RHEL vSphere 镜像的组成添加到队列中,创建镜像并将其上传到您指定的 vSphere 实例的集群上。
注意完成镜像构建和上传过程需要几分钟时间。
完成这个过程后,您可以看到 镜像构建完成状态。
验证
成功完成镜像状态上传后,您可以从上传并登录的镜像创建一个虚拟机(VM)。要做到这一点:
- 访问 VMware vSphere 客户端。
- 在您指定的 vSphere 实例的 Cluster 中搜索镜像。
- 选择您上传的镜像。
- 右键点所选镜像。
点
New Virtual Machine
。此时将打开 New Virtual Machine 窗口。
在 New Virtual Machine 窗口中提供以下详情:
-
选择
New Virtual Machine
。 - 为您的虚拟机选择一个名称和文件夹。
- 选择计算机资源:为此操作选择一个目标计算机资源。
- 选择存储:例如,选择 NFS-Node1
- 选择兼容性:映像应仅为 BIOS。
- 选择客户端操作系统:例如,选择 Linux 和 Red Hat Fedora (64 位)。
- 自定义硬件 :创建虚拟机时,在右上角的 Device Configuration 按钮,删除默认的 New Hard Disk,并使用下拉菜单来选择 Existing Hard Disk 磁盘镜像:
- 准备完成:检查详情,再单击 Finish 以创建镜像。
-
选择
导航至 VM 选项卡。
- 从列表中选择您创建的虚拟机。
- 单击面板中的 Start 按钮。此时将显示一个新窗口,显示 VM 映像加载。
- 使用您为蓝图创建的凭证登录。
您可以验证添加到蓝图中的软件包是否已安装。例如:
$ rpm -qa | grep firefox
其它资源
1.5.3. 准备自定义 GCE 镜像,并将其上传到 GCP
您可以创建自定义镜像,然后使用 RHEL 镜像构建器将其自动更新到 Oracle Cloud Infrastructure (OCI)实例。
1.5.3.1. 使用 RHEL 镜像构建器将镜像上传到 GCP
使用 RHEL 镜像构建器,您可以构建 gce
镜像,为用户或 GCP 服务帐户提供凭证,然后将 gce
镜像直接上传到 GCP 环境。
1.5.3.1.1. 使用 CLI 配置 gce 镜像,并将其上传到 GCP
使用凭证建立一个配置文件,以使用 RHEL 镜像构建器 CLI 将 gce
镜像上传到 GCP。
您无法手动将 gce
镜像导入到 GCP,因为镜像不能引导。您必须使用 gcloud
或 RHEL 镜像构建器上传它。
先决条件
您有一个有效的 Google 帐户和凭证,以便将镜像上传到 GCP。凭据可以从用户帐户或服务帐户获取。与凭证关联的帐户必须至少分配以下 IAM 角色:
-
roles/storage.admin
- 用于创建和删除存储对象 -
roles/compute.storageAdmin
- 将虚拟机镜像导入到 Compute Engine。
-
- 您有一个现有的 GCP 存储桶。
流程
使用文本编辑器创建一个包含以下内容的
gcp-config.toml
配置文件:provider = "gcp" [settings] bucket = "GCP_BUCKET" region = "GCP_STORAGE_REGION" object = "OBJECT_KEY" credentials = "GCP_CREDENTIALS"
-
GCP_BUCKET
指向现有的存储桶。它用于存储正在上传的镜像的中间存储对象。 -
GCP_STORAGE_REGION
既是一个常规的 Google 存储区域,又是一个双区域或多区域。 -
OBJECT_KEY
是中间存储对象的名称。它在上传过程前不能存在,并在上传过程完成后被删除。如果对象名称不以.tar.gz
结尾,则扩展会自动添加到对象名称中。 GCP_CREDENTIALS
是从 GCP 下载的凭证 JSON 文件的Base64
编码的方案。凭证决定了 GCP 将镜像上传到的项目。注意如果您使用不同的机制来使用 GCP 进行身份验证,在
gcp-config.toml
文件中指定GCP_CREDENTIALS
是可选的。有关其他验证方法,请参阅 使用 GCP 进行验证 。
-
从 GCP 下载的 JSON 文件中检索
GCP_CREDENTIALS
。$ sudo base64 -w 0 cee-gcp-nasa-476a1fa485b7.json
使用附加镜像名称和云供应商配置集创建 compose:
$ sudo composer-cli compose start BLUEPRINT-NAME gce IMAGE_KEY gcp-config.toml
镜像构建、上传和云注册过程最多可能需要十分钟才能完成。
验证
验证镜像状态为 FINISHED:
$ sudo composer-cli compose status
1.5.3.1.2. RHEL 镜像构建器如何对不同 GCP 凭证的身份验证顺序进行排序
您可以在 RHEL 镜像构建器中使用几种不同类型的凭证来使用 GCP 进行身份验证。如果 RHEL 镜像构建器配置被设置为使用多组凭证使用 GCP 进行身份验证,它会按以下首选顺序使用凭证:
-
在配置文件中,使用
composer-cli
命令指定的凭证。 -
凭证在
osbuild-composer
worker 配置中被配置。 Google GCP SDK
库中的应用程序默认凭证
,它尝试使用以下选项自动找到一个身份验证的方法:- 如果设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量,应用程序默认凭据会尝试加载并从文件中使用由变量指向的凭证。
应用默认凭据尝试使用附加到运行代码的资源的服务帐户进行身份验证。例如,Google Compute Engine 虚拟机。
注意您必须使用 GCP 凭证来决定将镜像上传到的 GCP 项目。因此,除非要将所有镜像上传到同一 GCP 项目,您必须使用
composer-cli
命令指定gcp-config.toml
配置文件中的凭证。
1.5.3.1.2.1. 使用 composer-cli 命令指定 GCP 凭证
您可以在上传目标配置 gcp-config.toml
文件中指定 GCP 验证凭证。使用 Google 帐户凭证 JSON 文件的 Base64
编码方案来节省时间。
流程
运行以下命令,使用存储在
GOOGLE_APPLICATION_CREDENTIALS
环境变量中的路径获取 Google 帐户凭证文件的编码内容:$ base64 -w 0 "${GOOGLE_APPLICATION_CREDENTIALS}"
在上传目标配置
gcp-config.toml
文件中,设置凭证:provider = "gcp" [settings] provider = "gcp" [settings] credentials = "GCP_CREDENTIALS"
1.5.3.1.2.2. 在 osbuild-composer worker 配置中指定凭证
您可以将 GCP 身份验证凭据配置为全局用于 GCP 用于所有镜像构建。这样,如果您想要将镜像导入到同一 GCP 项目,则您可以对上传到 GCP 的所有镜像使用相同的凭据。
流程
在
/etc/osbuild-worker/osbuild-worker.toml
worker 配置中,设置以下凭证值:[gcp] credentials = "PATH_TO_GCP_ACCOUNT_CREDENTIALS"
1.5.4. 准备自定义镜像,并将其直接上传到 OCI
您可以创建自定义镜像,然后使用 RHEL 镜像构建器将其自动更新到 Oracle Cloud Infrastructure (OCI)实例。
1.5.4.1. 创建自定义镜像,并自动将其上传到 OCI
使用 RHEL 镜像构建器,构建自定义镜像,并自动直接将其推送到 Oracle Cloud Infrastructure (OCI)实例。然后,您可以从 OCI 仪表盘中启动镜像实例。
先决条件
-
您有访问系统的
root
或weldr
组用户权限。 - 您有一个 Oracle Cloud 帐户。
- 您必须为管理员授予 OCI 策略中的安全访问权限。
-
您已在您选择的
OCI_REGION
中创建了 OCI Bucket。
流程
- 在浏览器中打开 web 控制台的 RHEL 镜像构建器界面。
- 点击 Create blueprint 向导将打开。 。
- 在 Details 页面中,输入蓝图的名称,以及可选的描述。点 。
- 在 Packages 页面中,选择要在镜像中包含的组件和软件包。点 。
- 在 Customizations 页面中,配置您要用于蓝图的自定义。点 。
- 在 Review 页面上,点 。
- 要创建镜像,请单击 Create image 向导将打开。 。
在 Image 输出页面中完成以下步骤:
- 在 "Select a blueprint" 下拉菜单中选择您想要的蓝图。
-
从 "Image output type" 下拉菜单中选择
Oracle Cloud Infrastructure (.qcow2)
。 - 选中 "Upload OCI 复选框,来将您的镜像上传到 OCI。
- 输入 "镜像大小 "。点 。
在 Upload to OCI - Authentication 页面中,输入以下强制详情:
- 用户 OCID:您可以在显示用户详情的页面的控制台中找到它。
- 私钥
在 Upload to OCI - Destination 页面中,输入以下强制详情,并点 。
- 镜像名称:要上传的镜像的名称。
- OCI 存储桶
- bucket 命名空间
- bucket 区域
- bucket 划分
- bucket 租户
- 查看向导中的详情并点 。
RHEL 镜像构建器将 RHEL .qcow2
镜像的组成添加到队列中。
验证
-
访问 OCI 仪表板
Custom Images。 - 选择您为镜像指定的 Compartment,并在 Import image 表中找到镜像。
- 点镜像名称并验证镜像信息。
1.5.5. 准备自定义 QCOW2 镜像,并将其上传到 OpenStack
您可以使用 RHEL 镜像构建器创建自定义 .qcow2
镜像,并手动将它们上传到 OpenStack 云部署。
1.5.5.1. 将 QCOW2 镜像上传到 OpenStack
使用 RHEL 镜像构建器工具,您可以创建适合上传到 OpenStack 云部署的自定义 .qcow2
镜像,并在那里启动实例。RHEL 镜像构建器以 QCOW2 格式创建镜像,但针对 OpenStack 有进一步的更改。
不要将使用 RHEL 镜像构建器创建的通用 QCOW2
镜像类型输出格式与 OpenStack 镜像类型混淆,后者也是 QCOW2 格式,但包含特定于 OpenStack 的进一步更改。
先决条件
- 您已创建了蓝图。
流程
启动
QCOW2
镜像的 compose。# composer-cli compose start blueprint_name openstack
检查构建的状态。
# composer-cli compose status
镜像构建完成后,您可以下载镜像。
下载
QCOW2
镜像:# composer-cli compose image UUID
- 访问 OpenStack 仪表盘,并单击 。
-
在左侧菜单中,选择
Admin
选项卡。 从
系统面板
中,点镜像
。Create An Image
向导将打开。在
Create An Image
向导中:- 输入镜像的名称
-
点
Browse
,上传QCOW2
镜像。 -
从
格式
下拉列表中,选择QCOW2 - QEMU Emulator
。 点
。
在左侧菜单中,选择
Project
选项卡。-
从
Compute
菜单中,选择Instances
。 单击
按钮。此时会打开
Launch Instance
向导。-
在
Details
页面中,输入实例的名称。点 。 -
在
Source
页面中,选择您上传的镜像的名称。点 。 在
Flavor
页面中,选择最适合您的需要的机器资源。点 。
-
从
-
您可以使用任何机制(CLI 或 OpenStack Web UI)来从镜像运行镜像实例。通过 SSH 使用您的私钥访问生成的实例。以
cloud-user
用户身份登录。
1.5.6. 准备自定义 RHEL 镜像,并将其上传到 Alibaba Cloud
您可以将使用 RHEL 镜像构建器创建的自定义 .ami
镜像上传到 Alibaba Cloud。
1.5.6.1. 准备将自定义 RHEL 镜像上传到 Alibaba Cloud
要将自定义 RHEL 镜像部署到 Alibaba Cloud 中,您首先需要验证自定义镜像。镜像需要特定的配置才能成功引导,因为在使用镜像前,Alibaba Cloud 需要自定义镜像来满足某些要求。
RHEL 镜像构建器生成符合 Alibaba 要求的镜像。但是,红帽建议使用 Alibaba image_check 工具来验证镜像的格式合规性。
先决条件
- 您必须已使用 RHEL 镜像构建器创建了一个 Alibaba 镜像。
流程
- 使用 Alibaba image_check 工具连接到包含您要检查的镜像的系统。
下载 image_check 工具:
$ curl -O https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/73848/cn_zh/1557459863884/image_check
更改镜像合规工具的文件权限:
# chmod +x image_check
运行命令启动镜像合规工具检查:
# ./image_check
该工具会验证系统配置并生成屏幕中显示的报告。image_check 工具将此报告保存在与运行镜像合规工具同样的文件夹中。
故障排除
如果任何检测项失败,请按照终端中的说明进行更正。
其它资源
1.5.6.2. 将自定义 RHEL 镜像上传到 Alibaba
您可以使用 RHEL 镜像构建器将您创建的自定义 AMI
镜像上传到对象存储服务(OSS)。
先决条件
- 设置您的系统以上传 Alibaba 镜像。请参阅准备将镜像上传到 Alibaba。
-
您已使用 RHEL 镜像构建器创建了一个
ami
镜像。 - 您有一个存储桶。请参阅创建存储桶。
- 您有一个活跃的 Alibaba 帐户。
- 已激活了 OSS。
流程
- 登录到 OSS 控制台。
- 在左侧的 Bucket 菜单中,选择要将镜像上传到的存储桶。
- 在右菜单中点 Files 标签页。
点
。一个对话框窗口会在右侧打开。配置以下内容:- 上传至 :选择将该文件上传到 Current 目录或一个 指定的目录。
- 文件 ACL :选择上传的文件的权限类型。
- 点 。
- 选择您要上传到 OSS 控制台的镜像。
- 点 。
其它资源
1.5.6.3. 将镜像导入到 Alibaba Cloud
要将使用 RHEL 镜像构建器创建的自定义 Alibaba RHEL 镜像导入到 Elastic Compute Service (ECS),请按照以下步骤操作:
先决条件
- 设置您的系统以上传 Alibaba 镜像。请参阅准备将镜像上传到 Alibaba。
-
您已使用 RHEL 镜像构建器创建了一个
ami
镜像。 - 您有一个存储桶。请参阅创建存储桶。
- 您有一个活跃的 Alibaba 帐户。
- 已激活了 OSS。
- 您已将镜像上传到对象存储服务(OSS)。请参阅将镜像上传到 Alibaba。
流程
登录到 ECS 控制台。
- 在左侧菜单中,点 。
- 在右上角,点 。此时会打开一个对话框窗口。
确认您已设置了镜像所在的正确区域。输入以下信息:
-
OSS 对象地址
:了解如何获取 OSS 对象地址. -
镜像名称
-
操作系统
-
系统磁盘大小
-
系统架构
-
平台
:红帽
-
可选:提供以下详情:
-
镜像格式
:qcow2
或ami
,具体取决于上传的镜像格式。 -
镜像描述
添加数据磁盘的镜像
地址可以在 OSS 管理控制台中确定。在左侧菜单中选择所需的存储桶之后:
-
-
选择
Files
部分。 点相应镜像右侧的 Details 链接。
窗口会出现在屏幕右侧,显示镜像详情。
OSS
对象地址位于URL
框中。点
。注意导入过程的时间可能因镜像大小而异。
自定义镜像导入到 ECS
控制台。
其它资源
1.5.6.4. 使用 Alibaba Cloud 创建自定义 RHEL 镜像的一个实例
您可以使用 Alibaba ECS 控制台创建自定义 RHEL 镜像的实例。
先决条件
- 您已激活了 OSS 并上传您的自定义镜像。
- 您已成功将镜像导入到 ECS 控制台。请参阅 将镜像导入到 Alibaba。
流程
因此,您有一个活跃的实例准备好从 Alibaba ECS 控制台进行部署
。