3.3. 使用带有 CLI 的对等 pod 部署 OpenShift 沙盒容器工作负载
您可以使用 CLI 部署 OpenShift 沙盒容器工作负载。首先,您必须安装 OpenShift 沙盒容器 Operator,然后创建 KataConfig
自定义资源。在沙盒容器中部署工作负载后,您必须将 kata-remote
作为 runtimeClassName
添加到工作负载 YAML 文件中。
3.3.1. 使用 CLI 安装 OpenShift 沙盒容器 Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform CLI 安装 OpenShift 沙盒容器 Operator。
先决条件
- 在集群中安装了 OpenShift Container Platform 4.15。
对于在 IBM Z 或 IBM® LinuxONE 上安装,您必须安装 OpenShift Container Platform 4.14 或更高版本。
重要使用对等 pod 在 IBM Z 上部署 OpenShift 沙盒容器工作负载只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 您已订阅了 OpenShift 沙盒容器目录。
注意订阅 OpenShift 沙盒容器目录为
openshift-sandboxed-containers-operator
命名空间提供了对 OpenShift 沙盒容器 Operator 的访问权限。
流程
为 OpenShift 沙盒容器 Operator 创建
Namespace
对象。创建一个包含以下清单的
Namespace
对象 YAML 文件:apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Namespace
对象:oc create -f Namespace.yaml
$ oc create -f Namespace.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为 OpenShift 沙盒容器 Operator 创建
OperatorGroup
对象。创建一个包含以下清单的
OperatorGroup
对象 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
OperatorGroup
对象:oc create -f OperatorGroup.yaml
$ oc create -f OperatorGroup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
Subscription
对象,以便为 OpenShift 沙盒容器 Operator 订阅命名空间
。创建一个包含以下内容的
Subscription
对象 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Subscription
对象:oc create -f Subscription.yaml
$ oc create -f Subscription.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift 沙盒容器 Operator 现已安装在集群中。
以上列出的所有对象文件名都是建议。您可以使用其他名称创建对象 YAML 文件。
验证
确保正确安装 Operator:
oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.5.3 1.5.2 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.5.3 1.5.2 Succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.2. 使用 CLI 为 AWS 设置对等 pod 复制链接链接已复制到粘贴板!
要设置在 AWS 上使用的对等 pod,您必须创建一个 secret 对象、AWS 镜像虚拟机(AMI)和 peer-pod ConfigMap
。
为 AWS 设置对等 pod 后,您仍必须创建 KataConfig
自定义资源(CR)来使用 peer pod 部署 OpenShift 沙盒容器。
先决条件
- 在集群中安装了 OpenShift Container Platform 4.15。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 OpenShift 沙盒容器 Operator。
3.3.2.1. 使用 CLI 为 AWS 创建 secret 对象 复制链接链接已复制到粘贴板!
设置 AWS 访问密钥并在 secret 对象中配置网络。secret 对象用于创建 pod 虚拟机镜像,并由对等 pod 使用。
为 AWS 创建 secret 对象时,您必须设置特定的环境值。在创建 secret 对象前,您可以检索其中的一些值。但是,您必须准备以下值:
-
AWS_ACCESS_KEY_ID
-
AWS_SECRET_ACCESS_KEY
您可以在 AWS 控制台中生成这些值。
流程
收集 secret 对象所需的参数值。确保记下每个值。
检索实例 ID:
INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
$ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow secret 对象本身不需要这个值,而是用于检索 secret 对象的其他值。
检索 AWS 区域:
AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 AWS 子网 ID:
AWS_SUBNET_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SubnetId' --region ${AWS_REGION} --output text) && echo "AWS_SUBNET_ID: \"$AWS_SUBNET_ID\""
$ AWS_SUBNET_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SubnetId' --region ${AWS_REGION} --output text) && echo "AWS_SUBNET_ID: \"$AWS_SUBNET_ID\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 AWS VPC ID:
AWS_VPC_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].VpcId' --region ${AWS_REGION} --output text) && echo "AWS_VPC_ID: \"$AWS_VPC_ID\""
$ AWS_VPC_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].VpcId' --region ${AWS_REGION} --output text) && echo "AWS_VPC_ID: \"$AWS_VPC_ID\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 AWS 安全组 ID:
AWS_SG_IDS=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --region $AWS_REGION --output json | jq -r '.[][][]' | paste -sd ",") && echo "AWS_SG_IDS: \"$AWS_SG_IDS\""
$ AWS_SG_IDS=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --region $AWS_REGION --output json | jq -r '.[][][]' | paste -sd ",") && echo "AWS_SG_IDS: \"$AWS_SG_IDS\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下清单创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 secret 对象:
oc apply -f peer-pods-secret.yaml
$ oc apply -f peer-pods-secret.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
secret 对象被应用。
如果更新对等 pod secret,您必须重启 peerpodconfig-ctrl-caa-daemon
daemonset 以应用更改。
更新 secret 后,应用清单。然后运行以下命令来重启 cloud-api-adaptor
pod:
oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
请记住,重启 daemonset 会重新创建对等 pod,它不会更新现有的 pod。
3.3.2.2. 使用 CLI 为 AWS 创建 peer-pod ConfigMap 复制链接链接已复制到粘贴板!
为 AWS 创建 ConfigMap
时,您必须设置 AMI ID。在创建 ConfigMap
前,您可以检索这个值。
流程
使用以下清单创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ConfigMap
:oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ConfigMap
被应用。
如果更新 peer pod 配置映射,您必须重启 peerpodconfig-ctrl-caa-daemon
daemonset 以应用更改。
更新配置映射后,应用清单。然后运行以下命令来重启 cloud-api-adaptor
pod:
oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
请记住,重启 daemonset 会重新创建对等 pod,它不会更新现有的 pod。
创建 KataConfig
CR 后,您可以使用 AWS 上的对等 pod 运行 OpenShift 沙盒容器。
3.3.3. 使用 CLI 为 Azure 设置对等 pod 复制链接链接已复制到粘贴板!
要设置在 Microsoft Azure 上使用的对等 pod,您必须创建一个 secret 对象、Azure 镜像虚拟机、peer-pod ConfigMap
和 SSH 密钥 secret 对象。
为 Azure 设置对等 pod 后,您仍必须创建 KataConfig
自定义资源(CR)来使用 peer pod 部署 OpenShift 沙盒容器。
先决条件
- 在集群中安装了 OpenShift Container Platform 4.15。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 OpenShift 沙盒容器 Operator。
- 已安装并配置了 Azure CLI 工具。
3.3.3.1. 使用 CLI 为 Azure 创建 secret 对象 复制链接链接已复制到粘贴板!
设置 Azure 访问密钥并在 secret 对象中配置网络。secret 对象用于创建 pod 虚拟机镜像,并由对等 pod 使用。
为 Azure 创建 secret 对象时,您必须设置特定的环境值。您可以在创建 secret 对象前检索这些值。另外,您必须创建一个基于角色的访问控制(RBAC)文件。此文件生成以下值:
-
AZURE_CLIENT_ID
-
AZURE_CLIENT_SECRET
-
AZURE_TENANT_ID
流程
检索 Azure 订阅 ID:
AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
$ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 RBAC 内容。这会生成客户端 ID、客户端 secret 和租户 ID:
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID --query "{ client_id: appId, client_secret: password, tenant_id: tenant }
$ az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID --query "{ client_id: appId, client_secret: password, tenant_id: tenant }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此时会出现以下输出:
{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }
{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 RBAC 输出中保存值,以便在 secret 对象中使用。
收集 secret 对象的额外参数值。确保记下每个值。
检索资源组:
AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""
$ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 Azure 区域:
AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""
$ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下清单创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 secret 对象:
oc apply -f peer-pods-secret.yaml
$ oc apply -f peer-pods-secret.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
secret 对象被应用。
如果更新对等 pod secret,您必须重启 peerpodconfig-ctrl-caa-daemon
daemonset 以应用更改。
更新 secret 后,应用清单。然后运行以下命令来重启 cloud-api-adaptor
pod:
oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
请记住,重启 daemonset 会重新创建对等 pod,它不会更新现有的 pod。
3.3.3.2. 使用 CLI 为 Azure 创建 peer-pod ConfigMap 复制链接链接已复制到粘贴板!
为 Azure 创建 ConfigMap
时,您必须设置特定的配置值。在创建 ConfigMap
前,您可以检索这些值。
流程
收集 Azure peer-pod
ConfigMap
的配置值。确保记下每个值。检索 Azure VNet 名称:
AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)
$ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ConfigMap
不需要这个值,而是用于检索 Azure 子网 ID。检索 Azure 子网 ID:
AZURE_SUBNET_ID=$(az network vnet subnet list --resource-group ${AZURE_RESOURCE_GROUP} --vnet-name $AZURE_VNET_NAME --query "[].{Id:id} | [? contains(Id, 'worker')]" --output tsv) && echo "AZURE_SUBNET_ID: \"$AZURE_SUBNET_ID\""
$ AZURE_SUBNET_ID=$(az network vnet subnet list --resource-group ${AZURE_RESOURCE_GROUP} --vnet-name $AZURE_VNET_NAME --query "[].{Id:id} | [? contains(Id, 'worker')]" --output tsv) && echo "AZURE_SUBNET_ID: \"$AZURE_SUBNET_ID\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 Azure 网络安全组(NSG) ID:
AZURE_NSG_ID=$(az network nsg list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id:id}" --output tsv) && echo "AZURE_NSG_ID: \"$AZURE_NSG_ID\""
$ AZURE_NSG_ID=$(az network nsg list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id:id}" --output tsv) && echo "AZURE_NSG_ID: \"$AZURE_NSG_ID\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下清单创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ConfigMap
:oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ConfigMap
被部署。
如果更新 peer pod 配置映射,您必须重启 peerpodconfig-ctrl-caa-daemon
daemonset 以应用更改。
更新配置映射后,应用清单。然后运行以下命令来重启 cloud-api-adaptor
pod:
oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
请记住,重启 daemonset 会重新创建对等 pod,它不会更新现有的 pod。
3.3.3.3. 使用 CLI 为 Azure 创建 SSH 密钥 secret 对象 复制链接链接已复制到粘贴板!
您必须生成 SSH 密钥并创建 SSH 密钥 secret 对象,以便在 Azure 中使用对等 pod。
流程
生成 SSH 密钥:
ssh-keygen -f ./id_rsa -N ""
$ ssh-keygen -f ./id_rsa -N ""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 SSH secret 对象:
oc create secret generic ssh-key-secret -n openshift-sandboxed-containers-operator --from-file=id_rsa.pub=./id_rsa.pub --from-file=id_rsa=./id_rsa
$ oc create secret generic ssh-key-secret -n openshift-sandboxed-containers-operator --from-file=id_rsa.pub=./id_rsa.pub --from-file=id_rsa=./id_rsa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
SSH 密钥已创建,并且创建了 SSH 密钥 secret 对象。创建 KataConfig
CR 后,您可以使用 Azure 上的对等 pod 运行 OpenShift 沙盒容器。
3.3.4. 使用 CLI 为 IBM Z 设置对等 pod 复制链接链接已复制到粘贴板!
要设置在 IBM Z 上运行的 OpenShift Container Platform 集群上使用的对等 pod,您必须创建一个 secret 对象、RHEL KVM 镜像虚拟机和 peer-pod ConfigMap
,其中包含 libvirt 和 KVM 主机之间的通信所需的凭证。
为 IBM Z 设置对等 pod 后,您必须创建 KataConfig
自定义资源(CR)来使用 peer pod 部署 OpenShift 沙盒容器。
先决条件
- 在集群中安装了 OpenShift Container Platform 4.14 或更高版本。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 OpenShift 沙盒容器 Operator。
- 您已在 KVM 主机上安装了 libvirt,并且具有管理员特权。
3.3.4.1. 在 KVM 主机上设置 libvirt 复制链接链接已复制到粘贴板!
您必须在 KVM 主机上设置 libvirt。IBM Z 上的对等 pod 使用云 API Adaptor 的 libvirt 供应商来创建和管理虚拟机。
流程
登录到 IBM Z KVM 主机并设置 libvirt 用于存储管理的 shell 变量。
运行以下命令设置 libvirt 池的名称:
export LIBVIRT_POOL=<name_of_libvirt_pool_to_create>
$ export LIBVIRT_POOL=<name_of_libvirt_pool_to_create>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令设置 libvirt 池的名称:
export LIBVIRT_VOL_NAME=<name_of_libvirt_volume_to_create>
$ export LIBVIRT_VOL_NAME=<name_of_libvirt_volume_to_create>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,设置默认存储池位置的路径:
export LIBVIRT_POOL_DIRECTORY=<name_of_target_directory>
$ export LIBVIRT_POOL_DIRECTORY=<name_of_target_directory>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为确保 libvirt 具有读写访问权限,请使用 libvirt 存储目录的子目录。默认为
/var/lib/libvirt/images/
。
运行以下命令来创建 libvirt 池:
virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
$ virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来启动 libvirt 池:
virsh pool-start $LIBVIRT_POOL
$ virsh pool-start $LIBVIRT_POOL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为池创建 libvirt 卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.4.2. 为 IBM Z 创建 peer-pod 虚拟机镜像 复制链接链接已复制到粘贴板!
要使用 IBM Z 上的对等 pod 运行 OpenShift 沙盒容器,您必须首先创建一个 KVM 客户机,libvirt 供应商从中启动 peer-pod 虚拟机。
创建镜像后,将镜像上传到您在上一步中创建的卷。
先决条件
- IBM z15 或更高版本,或 IBM® LinuxONE114 或更高版本。
- 至少有一个 LPAR 使用 KVM 在 RHEL 9 或更高版本中运行。
流程
为您的系统设置 RHEL
ORG_ID
和ACTIVATION_KEY
shell 变量。当使用订阅的 RHEL 系统时,运行以下命令,将 shell 环境变量设置为保存机构 ID 和 Red Hat Subscription Management (RHSM)的激活码:
export ORG_ID=$(cat ~/.rh_subscription/orgid) export ACTIVATION_KEY=$(cat ~/.rh_subscription/activation_key)
$ export ORG_ID=$(cat ~/.rh_subscription/orgid) $ export ACTIVATION_KEY=$(cat ~/.rh_subscription/activation_key)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用未订阅的 RHEL 系统时,运行以下命令来设置适当的订阅值:
export ORG_ID=<RHEL_ORGID_VALUE> export ACTIVATION_KEY=<RHEL_ACVTIVATION_KEY>
$ export ORG_ID=<RHEL_ORGID_VALUE> $ export ACTIVATION_KEY=<RHEL_ACVTIVATION_KEY>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
登录到您的 IBM Z 系统并执行以下步骤:
-
从红帽客户门户网站下载
s390x
RHEL KVM 客户机镜像到 libvirt 存储目录,以授予 libvirt 正确访问权限。默认目录为/var/lib/libvirt/images
。镜像用于生成对等 pod 虚拟机镜像,该镜像将包含相关的二进制文件。 运行以下命令,为下载的镜像设置
IMAGE_URL
shell 环境变量:export IMAGE_URL=<location_of_downloaded_KVM_guest_image>
$ export IMAGE_URL=<location_of_downloaded_KVM_guest_image>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 输入您在上一步中下载的 KVM 客户机镜像的路径。
运行以下命令注册客户端 KVM 镜像:
export REGISTER_CMD="subscription-manager register --org=${ORG_ID} \ --activationkey=${ACTIVATION_KEY}"
$ export REGISTER_CMD="subscription-manager register --org=${ORG_ID} \ --activationkey=${ACTIVATION_KEY}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来自定义客户端 KVM 镜像:
virt-customize -v -x -a ${IMAGE_URL} --run-command "${REGISTER_CMD}"
$ virt-customize -v -x -a ${IMAGE_URL} --run-command "${REGISTER_CMD}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令设置镜像的校验和:
export IMAGE_CHECKSUM=$(sha256sum ${IMAGE_URL} | awk '{ print $1 }')
$ export IMAGE_CHECKSUM=$(sha256sum ${IMAGE_URL} | awk '{ print $1 }')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
从红帽客户门户网站下载
3.3.4.2.1. 构建 peer-pod 虚拟机 QCOW2 镜像 复制链接链接已复制到粘贴板!
要使用 IBM Z 上的对等 pod 运行 OpenShift 沙盒容器,您必须构建 peer-pod VM QCOW2 镜像。
流程
运行以下命令,将 cloud-api-adaptor 存储库克隆到构建工作站:
git clone --single-branch https://github.com/confidential-containers/cloud-api-adaptor.git
$ git clone --single-branch https://github.com/confidential-containers/cloud-api-adaptor.git
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来进入
podvm
目录:cd cloud-api-adaptor && git checkout 8577093
$ cd cloud-api-adaptor && git checkout 8577093
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建生成最终 QCOW2 镜像的构建器镜像。
使用订阅的 RHEL 系统时,运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用未订阅的 RHEL 系统时,运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,使用运行对等 pod 所需的二进制文件生成中间镜像软件包:
podman build -t podvm_binaries_rhel_s390x \ --build-arg BUILDER_IMG="podvm_builder_rhel_s390x:latest" \ --build-arg ARCH=s390x \ -f podvm/Dockerfile.podvm_binaries.rhel .
$ podman build -t podvm_binaries_rhel_s390x \ --build-arg BUILDER_IMG="podvm_builder_rhel_s390x:latest" \ --build-arg ARCH=s390x \ -f podvm/Dockerfile.podvm_binaries.rhel .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意这个过程应该需要很长时间。
运行以下命令,提取二进制文件并构建 peer-pod QCOW2 镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将 peer pod QCOW2 镜像提取到您选择的目录中:
export IMAGE_OUTPUT_DIR=<image_output_directory> mkdir -p $IMAGE_OUTPUT_DIR podman save podvm_rhel_s390x | tar -xO --no-wildcards-match-slash '*.tar' | tar -x -C ${IMAGE_OUTPUT_DIR}
$ export IMAGE_OUTPUT_DIR=<image_output_directory>
1 $ mkdir -p $IMAGE_OUTPUT_DIR $ podman save podvm_rhel_s390x | tar -xO --no-wildcards-match-slash '*.tar' | tar -x -C ${IMAGE_OUTPUT_DIR}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 输入
image_output_directory
,在其中提取最终 QCOW 镜像。
将 peer pod QCOW2 镜像上传到 libvirt 卷:
virsh -c qemu:///system vol-upload \ --vol $LIBVIRT_VOL_NAME \ $IMAGE_OUTPUT_DIR/podvm-*.qcow2 \ --pool $LIBVIRT_POOL --sparse
$ virsh -c qemu:///system vol-upload \ --vol $LIBVIRT_VOL_NAME \ $IMAGE_OUTPUT_DIR/podvm-*.qcow2 \ --pool $LIBVIRT_POOL --sparse
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.4.3. 为 peer-pod 凭证创建 RHEL secret 复制链接链接已复制到粘贴板!
为 IBM Z 创建 secret 对象时,您必须设置特定的环境值。在创建 secret 对象前,您可以检索其中的一些值。但是,您必须准备以下值:
-
LIBVIRT_POOL
-
LIBVIRT_VOL_NAME
-
LIBVIRT_URI
LIBVIRT_URI
是 libvirt 网络的默认网关 IP 地址。检查 libvirt 网络设置以获取这个值。
如果您的 libvirt 安装使用默认桥接虚拟网络,您可以运行以下命令来获取 LIBVIRT_URI
:
virtint=$(bridge_line=$(virsh net-info default | grep Bridge); echo "${bridge_line//Bridge:/}" | tr -d [:blank:]) LIBVIRT_URI=$( ip -4 addr show $virtint | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
$ virtint=$(bridge_line=$(virsh net-info default | grep Bridge); echo "${bridge_line//Bridge:/}" | tr -d [:blank:])
$ LIBVIRT_URI=$( ip -4 addr show $virtint | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
流程
使用以下清单创建 YAML 文件
peer-pods-secret.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 secret 对象:
oc apply -f peer-pods-secret.yaml
$ oc apply -f peer-pods-secret.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
secret 对象被应用。
3.3.4.4. 使用 CLI 为 IBM Z 创建 peer-pod ConfigMap 复制链接链接已复制到粘贴板!
为 IBM Z 创建 ConfigMap
时,必须使用 libvirt 供应商。
流程
使用以下清单创建 YAML 文件
peer-pods-cm.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ConfigMap
:oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ConfigMap
被应用。
3.3.4.5. 使用 CLI 为 IBM Z 创建 SSH 密钥 secret 对象 复制链接链接已复制到粘贴板!
您必须生成 SSH 密钥对,并创建一个 SSH 密钥 secret 对象来将对等 pod 与 IBM Z 搭配使用。
流程
生成 SSH 密钥:
ssh-keygen -f ./id_rsa -N ""
$ ssh-keygen -f ./id_rsa -N ""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 SSH 公钥复制到 KVM 主机:
ssh-copy-id -i ./id_rsa.pub <KVM_HOST_ADDRESS>
$ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_ADDRESS>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 输入 KVM 主机的 IP 地址。
创建 secret 对象:
oc create secret generic ssh-key-secret \ -n openshift-sandboxed-containers-operator \ --from-file=id_rsa.pub=./id_rsa.pub \ --from-file=id_rsa=./id_rsa
$ oc create secret generic ssh-key-secret \ -n openshift-sandboxed-containers-operator \ --from-file=id_rsa.pub=./id_rsa.pub \ --from-file=id_rsa=./id_rsa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 SSH 密钥:
shred –remove id_rsa.pub id_rsa
$ shred –remove id_rsa.pub id_rsa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
secret 对象已创建。创建 KataConfig
CR 后,您可以使用 IBM Z 上的对等 pod 运行 OpenShift 沙盒容器。
3.3.5. 使用 CLI 创建 KataConfig 自定义资源 复制链接链接已复制到粘贴板!
您必须创建一个 KataConfig
自定义资源(CR)来作为 RuntimeClass
在节点上安装 kata-remote
。创建 KataConfig
CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:
-
在 RHCOS 节点上安装所需的 RHCOS 扩展,如 QEMU 和
kata-containers
。 - 确保 CRI-O 运行时配置了正确的运行时处理程序。
-
使用默认配置,创建一个名为
kata-remote
的RuntimeClass
CR。这可让用户在RuntimeClassName
字段中引用 CR 将工作负载配置为使用kata-remote
作为运行时。此 CR 也指定运行时的资源开销。
默认情况下,对等 pod 的 Kata 安装在所有 worker 节点上。如果要在特定节点上安装 kata-remote
作为 RuntimeClass
,您可以在这些节点上添加标签,然后在创建时在 KataConfig
CR 中定义标签。
先决条件
- 在集群中安装了 OpenShift Container Platform 4.15。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 OpenShift 沙盒容器 Operator。
创建 KataConfig
CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。妨碍重启时间的因素如下:
- 带有更多 worker 节点的大型 OpenShift Container Platform 部署。
- 激活 BIOS 和 Diagnostics 实用程序。
- 在硬盘而不是 SSD 上部署。
- 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
- CPU 和网络较慢。
流程
使用以下清单创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)如果您要仅在所选节点上安装
kata-remote
作为RuntimeClass
,请创建一个包含清单中的标签的 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
kataConfigPoolSelector
中的标签只支持单个值;不支持nodeSelector
语法。
创建
KataConfig
资源:oc create -f cluster-kataconfig.yaml
$ oc create -f cluster-kataconfig.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建新的 KataConfig
CR,并开始在 worker 节点上安装 kata-remote
作为 RuntimeClass
。等待 kata-remote
安装完成,以及 worker 节点重新引导,然后继续下一步。
运行 CR 时,会创建虚拟机镜像。镜像创建通过云提供商完成,并且可以使用其他资源。
OpenShift 沙盒容器仅将 kata-remote
安装为集群上的辅助可选运行时,而不是作为主要运行时安装。
验证
监控安装进度:
watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
$ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当 kataNodes 下的所有 worker 都被列为,且条件
InProgress
为False
时,它代表集群中安装kata
。如需更多信息,请参阅"安装和卸载转换"。
3.3.6. 使用 CLI 在沙盒容器中部署对等 pod 的工作负载 复制链接链接已复制到粘贴板!
OpenShift 沙盒容器将 Kata 安装为集群上的辅助、可选运行时,而不是主运行时。
要使用沙盒容器中的对等 pod 部署 pod 模板工作负载,您必须将 kata-remote
作为 runtimeClassName
添加到工作负载 YAML 文件中。
您还可以通过向 YAML 文件添加注解,定义是否应该使用默认实例大小部署工作负载,或者键入之前在 ConfigMap
中定义的类型。实例大小或实例类型的使用取决于您的云供应商。如果您不想手动定义实例大小或类型,您必须添加注解来定义根据可用内存定义自动实例大小或类型的使用。
先决条件
- 在集群中安装了 OpenShift Container Platform 4.15。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 OpenShift 沙盒容器 Operator。
-
您已创建了一个 secret 对象和对云供应商唯一的 peer-pod
ConfigMap
。 -
您已创建了
KataConfig
自定义资源 (CR)。
流程
将
runtimeClassName: kata-remote
添加到任何 pod 模板对象中:-
Pod
对象 -
ReplicaSet
对象 -
ReplicationController
对象 -
StatefulSet
对象 -
Deployment
对象 -
deploymentConfig
对象
-
向 pod 模板对象添加注解,定义是否使用特定实例大小或类型,或者自动实例大小或类型。实例大小用于特定的云提供商,而实例类型则用于其他云提供商。
对于特定实例大小或类型,添加以下注解:
io.katacontainers.config.hypervisor.machine_type: <instance type/instance size>
io.katacontainers.config.hypervisor.machine_type: <instance type/instance size>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义工作负载应使用的实例大小或类型。在为对等 pod 创建
ConfigMap
时,预定义的这些默认大小或类型。从其中之一选择。对于自动实例大小或类型,添加以下注解:
io.katacontainers.config.hypervisor.default_vcpus: <vcpus> io.katacontainers.config.hypervisor.default_memory: <memory>
io.katacontainers.config.hypervisor.default_vcpus: <vcpus> io.katacontainers.config.hypervisor.default_memory: <memory>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义可供工作负载使用的内存量。工作负载将根据可用内存量在自动实例大小或类型上运行。
Pod
对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 本例使用之前定义的实例大小用于使用 Azure 的对等 pod。使用 AWS 的对等 pod 使用实例类型。
OpenShift Container Platform 创建工作负载并开始调度它。
验证
-
检查 pod 模板对象上的
runtimeClassName
字段。如果runtimeClassName
是kata-remote
,则工作负载使用对等 pod 在 OpenShift 沙盒容器上运行。