4.2. 使用命令行部署工作负载
您可以使用命令行部署 OpenShift 沙盒容器工作负载。
4.2.1. 配置 libvirt 卷 复制链接链接已复制到粘贴板!
您必须在 KVM 主机上配置 libvirt 卷。对等 pod 使用 Cloud API Adaptor 的 libvirt 提供程序来创建和管理虚拟机。
先决条件
- 已使用 OpenShift Container Platform Web 控制台或命令行在 OpenShift Container Platform 集群上安装 OpenShift 沙盒容器 Operator。
- 您有 KVM 主机的管理员特权。
-
您已在 KVM 主机上安装了
podman
。 -
您已在 KVM 主机上安装了
virt-customize
。
流程
- 登录到 KVM 主机。
运行以下命令设置 libvirt 池的名称:
export LIBVIRT_POOL=<libvirt_pool>
$ export LIBVIRT_POOL=<libvirt_pool>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您需要
LIBVIRT_POOL
值来为 libvirt 提供程序创建 secret。运行以下命令设置 libvirt 池的名称:
export LIBVIRT_VOL_NAME=<libvirt_volume>
$ export LIBVIRT_VOL_NAME=<libvirt_volume>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您需要
LIBVIRT_VOL_NAME
值来为 libvirt 提供程序创建 secret。运行以下命令,设置默认存储池位置的路径:
export LIBVIRT_POOL_DIRECTORY=<target_directory>
$ export LIBVIRT_POOL_DIRECTORY=<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
4.2.2. 创建 KVM 客户机镜像 复制链接链接已复制到粘贴板!
您必须创建一个 KVM 客户机镜像,并将其上传到 libvirt 卷。
先决条件
- IBM z15 或更高版本,或 IBM® LinuxONE114 或更高版本。
- 至少在使用 KVM 的 RHEL 9 或更高版本中运行一个 LPAR。
流程
- 登录您的 OpenShift Container Platform 集群。
如果您有 RHEL 订阅,请为 Red Hat Subscription Management 设置订阅环境变量:
运行以下命令来设置机构 ID:
export ORG_ID=$(cat ~/.rh_subscription/orgid)
$ export ORG_ID=$(cat ~/.rh_subscription/orgid)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来设置激活码:
export ACTIVATION_KEY=$(cat ~/.rh_subscription/activation_key)
$ export ACTIVATION_KEY=$(cat ~/.rh_subscription/activation_key)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您没有 RHEL 订阅,请为 RHEL 设置订阅值:
运行以下命令来设置机构 ID:
export ORG_ID=<RHEL_ORGID_VALUE>
$ export ORG_ID=<RHEL_ORGID_VALUE>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定您的 RHEL 机构 ID。
运行以下命令来设置激活码:
export ACTIVATION_KEY=<RHEL_ACTIVATION_KEY>
$ export ACTIVATION_KEY=<RHEL_ACTIVATION_KEY>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 RHEL 激活码。
- 登录到您的 IBM Z® 系统。
将
s390x
RHEL KVM 客户机镜像 从红帽客户门户网站下载 到 libvirt 存储目录,以授予 libvirt 正确访问权限。默认目录为
/var/lib/libvirt/images
。此镜像用于生成对等 pod 虚拟机镜像,其中包含相关的二进制文件。运行以下命令,为下载的镜像设置
IMAGE_URL
:export IMAGE_URL=<path/to/image>
$ export IMAGE_URL=<path/to/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
4.2.3. 构建对等 pod 虚拟机镜像 复制链接链接已复制到粘贴板!
您必须构建对等 pod 虚拟机(VM)镜像,并将其上传到 libvirt 卷。
流程
- 登录您的 OpenShift Container Platform 集群。
运行以下命令克隆 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 这个过程需要大量时间。
运行以下命令,提取二进制文件并构建对等 pod QCOW2 镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建镜像目录环境变量:
export IMAGE_OUTPUT_DIR=<image_output_directory>
$ export IMAGE_OUTPUT_DIR=<image_output_directory>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定镜像的目录。
运行以下命令来创建镜像目录:
mkdir -p $IMAGE_OUTPUT_DIR
$ mkdir -p $IMAGE_OUTPUT_DIR
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令保存提取的对等 pod QCOW2 镜像:
podman save podvm_rhel_s390x | tar -xO --no-wildcards-match-slash '*.tar' | tar -x -C ${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 将对等 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
4.2.4. 创建 secret 复制链接链接已复制到粘贴板!
您必须在 OpenShift Container Platform 集群中创建 Secret
对象。
先决条件
-
LIBVIRT_POOL
.使用您在 KVM 主机上配置 libvirt 时设置的值。 -
LIBVIRT_VOL_NAME
.使用您在 KVM 主机上配置 libvirt 时设置的值。 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}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
根据以下示例创建
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
如果更新 peer 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)"
重启守护进程集会重新创建对等 pod。它不会更新现有的 pod。
4.2.5. 创建配置映射 复制链接链接已复制到粘贴板!
您必须在 OpenShift Container Platform 集群上为 libvirt 供应商创建配置映射。
流程
根据以下示例创建
peer-pods-cm.yaml
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用清单以创建配置映射:
oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的 libvirt 供应商创建一个配置映射。
如果更新 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。
4.2.6. 创建 SSH 密钥 secret 复制链接链接已复制到粘贴板!
您必须为 KVM 主机创建 SSH 密钥 secret
对象。
流程
- 登录您的 OpenShift Container Platform 集群。
运行以下命令来生成 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_IP>
$ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
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 密钥 secret 已创建。
删除您创建的 SSH 密钥:
shred -remove id_rsa.pub id_rsa
$ shred -remove id_rsa.pub id_rsa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.7. 创建 KataConfig 自定义资源 复制链接链接已复制到粘贴板!
您必须创建一个 KataConfig
自定义资源(CR)来作为 worker 节点上的运行时类安装 kata-remote
。
创建 KataConfig
CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:
-
使用默认配置创建一个名为
kata-remote
的RuntimeClass
CR。这可让用户在RuntimeClassName
字段中引用 CR 将工作负载配置为使用kata-remote
作为运行时。此 CR 也指定运行时的资源开销。
OpenShift 沙盒容器将 kata-remote
安装为集群上的 辅助 可选运行时,而不是主运行时。
创建 KataConfig
CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。妨碍重启时间的因素如下:
- 带有更多 worker 节点的大型 OpenShift Container Platform 部署。
- 激活 BIOS 和 Diagnostics 实用程序。
- 在硬盘而不是 SSD 上部署。
- 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
- CPU 和网络较慢。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
根据以下示例创建
cluster-kataconfig.yaml
清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要在所选节点上安装
kata-remote
,请根据以下示例指定节点标签:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定所选节点的标签。
创建
KataConfig
CR: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
。在验证安装前,等待
kata-remote
安装完成,以及 worker 节点重新引导。
验证
运行以下命令监控安装进度:
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-remote
。
详情请参阅 KataConfig 状态信息。
4.2.8. 可选:修改每个节点的对等 pod 虚拟机数量 复制链接链接已复制到粘贴板!
您可以通过编辑 peerpodConfig
自定义资源(CR)来更改每个节点对等 pod 虚拟机(VM)的限制。
流程
运行以下命令检查当前的限制:
oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'
$ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令修改
peerpodConfig
CR 的limit
属性:oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'
$ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 <value> 替换为您要定义的限制。
4.2.9. 配置工作负载对象 复制链接链接已复制到粘贴板!
您可以通过将 kata-remote
配置为以下 pod 模板对象的运行时类来部署 OpenShift 沙盒容器工作负载:
-
Pod
对象 -
ReplicaSet
对象 -
ReplicationController
对象 -
StatefulSet
对象 -
Deployment
对象 -
deploymentConfig
对象
不要在 openshift-sandboxed-containers-operator
命名空间中部署工作负载。为这些资源创建一个专用命名空间。
先决条件
- 您已为供应商创建了 secret 对象。
- 您已为供应商创建了配置映射。
-
您已创建了
KataConfig
自定义资源 (CR)。
流程
将
spec.runtimeClassName: kata-remote
添加到每个 pod 模板工作负载对象的清单中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform 创建工作负载对象并开始调度它。
验证
-
检查 pod 模板对象的
spec.runtimeClassName
字段。如果值为kata-remote
,则工作负载在 OpenShift 沙盒容器上运行,使用对等 pod。