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

流程

  1. 登录到 KVM 主机。
  2. 运行以下命令设置 libvirt 池的名称:

    $ export LIBVIRT_POOL=<libvirt_pool>
    Copy to Clipboard Toggle word wrap

    您需要 LIBVIRT_POOL 值来为 libvirt 提供程序创建 secret。

  3. 运行以下命令设置 libvirt 池的名称:

    $ export LIBVIRT_VOL_NAME=<libvirt_volume>
    Copy to Clipboard Toggle word wrap

    您需要 LIBVIRT_VOL_NAME 值来为 libvirt 提供程序创建 secret。

  4. 运行以下命令,设置默认存储池位置的路径:

    $ export LIBVIRT_POOL_DIRECTORY=<target_directory> 
    1
    Copy to Clipboard Toggle word wrap
    1
    为确保 libvirt 具有读写访问权限,请使用 libvirt 存储目录的子目录。默认为 /var/lib/libvirt/images/
  5. 运行以下命令来创建 libvirt 池:

    $ virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令来启动 libvirt 池:

    $ virsh pool-start $LIBVIRT_POOL
    Copy to Clipboard Toggle word wrap
  7. 运行以下命令,为池创建 libvirt 卷:

    $ virsh -c qemu:///system \
      vol-create-as --pool $LIBVIRT_POOL \
      --name $LIBVIRT_VOL_NAME \
      --capacity 20G \
      --allocation 2G \
      --prealloc-metadata \
      --format qcow2
    Copy to Clipboard Toggle word wrap

4.2.2. 创建 KVM 客户机镜像

您必须创建一个 KVM 客户机镜像,并将其上传到 libvirt 卷。

先决条件

  • IBM z15 或更高版本,或 IBM® LinuxONE114 或更高版本。
  • 至少在使用 KVM 的 RHEL 9 或更高版本中运行一个 LPAR。

流程

  1. 登录您的 OpenShift Container Platform 集群。
  2. 如果您有 RHEL 订阅,请为 Red Hat Subscription Management 设置订阅环境变量:

    • 运行以下命令来设置机构 ID:

      $ export ORG_ID=$(cat ~/.rh_subscription/orgid)
      Copy to Clipboard Toggle word wrap
    • 运行以下命令来设置激活码:

      $ export ACTIVATION_KEY=$(cat ~/.rh_subscription/activation_key)
      Copy to Clipboard Toggle word wrap
  3. 如果您没有 RHEL 订阅,请为 RHEL 设置订阅值:

    • 运行以下命令来设置机构 ID:

      $ export ORG_ID=<RHEL_ORGID_VALUE> 
      1
      Copy to Clipboard Toggle word wrap
      1
      指定您的 RHEL 机构 ID。
    • 运行以下命令来设置激活码:

      $ export ACTIVATION_KEY=<RHEL_ACTIVATION_KEY> 
      1
      Copy to Clipboard Toggle word wrap
      1
      指定 RHEL 激活码。
  4. 登录到您的 IBM Z® 系统。
  5. s390x RHEL KVM 客户机镜像 从红帽客户门户网站下载 到 libvirt 存储目录,以授予 libvirt 正确访问权限。

    默认目录为 /var/lib/libvirt/images。此镜像用于生成对等 pod 虚拟机镜像,其中包含相关的二进制文件。

  6. 运行以下命令,为下载的镜像设置 IMAGE_URL

    $ export IMAGE_URL=<path/to/image> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定 KVM 客户机镜像的路径。
  7. 运行以下命令来注册客户端 KVM 镜像:

    $ export REGISTER_CMD="subscription-manager register --org=${ORG_ID} \
      --activationkey=${ACTIVATION_KEY}"
    Copy to Clipboard Toggle word wrap
  8. 运行以下命令来自定义客户机 KVM 镜像:

    $ virt-customize -v -x -a ${IMAGE_URL} --run-command "${REGISTER_CMD}"
    Copy to Clipboard Toggle word wrap
  9. 运行以下命令设置镜像的校验和:

    $ export IMAGE_CHECKSUM=$(sha256sum ${IMAGE_URL} | awk '{ print $1 }')
    Copy to Clipboard Toggle word wrap

4.2.3. 构建对等 pod 虚拟机镜像

您必须构建对等 pod 虚拟机(VM)镜像,并将其上传到 libvirt 卷。

流程

  1. 登录您的 OpenShift Container Platform 集群。
  2. 运行以下命令克隆 cloud-api-adaptor 存储库:

    $ git clone --single-branch https://github.com/confidential-containers/cloud-api-adaptor.git
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,进入 podvm 目录:

    $ cd cloud-api-adaptor && git checkout 8577093
    Copy to Clipboard Toggle word wrap
  4. 创建生成最终 QCOW2 镜像的构建器镜像。

    • 如果您有一个订阅的 RHEL 系统,请运行以下命令:

      $ podman build -t podvm_builder_rhel_s390x \
        --build-arg ARCH="s390x" \
        --build-arg GO_VERSION="1.21.3" \
        --build-arg PROTOC_VERSION="25.1" \
        --build-arg PACKER_VERSION="v1.9.4" \
        --build-arg RUST_VERSION="1.72.0" \
        --build-arg YQ_VERSION="v4.35.1" \
        --build-arg YQ_CHECKSUM="sha256:4e6324d08630e7df733894a11830412a43703682d65a76f1fc925aac08268a45" \
        -f podvm/Dockerfile.podvm_builder.rhel .
      Copy to Clipboard Toggle word wrap
    • 如果您有未订阅的 RHEL 系统,请运行以下命令:

      $ podman build -t podvm_builder_rhel_s390x \
        --build-arg ORG_ID=$ORG_ID \
        --build-arg ACTIVATION_KEY=$ACTIVATION_KEY \
        --build-arg ARCH="s390x" \
        --build-arg GO_VERSION="1.21.3" \
        --build-arg PROTOC_VERSION="25.1" \
        --build-arg PACKER_VERSION="v1.9.4" \
        --build-arg RUST_VERSION="1.72.0" \
        --build-arg YQ_VERSION="v4.35.1" \
        --build-arg YQ_CHECKSUM="sha256:4e6324d08630e7df733894a11830412a43703682d65a76f1fc925aac08268a45" \
        -f podvm/Dockerfile.podvm_builder.rhel .
      Copy to Clipboard Toggle word wrap
  5. 运行以下命令,使用运行对等 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 .
    Copy to Clipboard Toggle word wrap

    这个过程需要大量时间。

  6. 运行以下命令,提取二进制文件并构建对等 pod QCOW2 镜像:

    $ podman build -t podvm_rhel_s390x \
      --build-arg ARCH=s390x \
      --build-arg CLOUD_PROVIDER=libvirt \
      --build-arg BUILDER_IMG="localhost/podvm_builder_rhel_s390x:latest" \
      --build-arg BINARIES_IMG="localhost/podvm_binaries_rhel_s390x:latest" \
      -v ${IMAGE_URL}:/tmp/rhel.qcow2:Z \
      --build-arg IMAGE_URL="/tmp/rhel.qcow2" \
      --build-arg IMAGE_CHECKSUM=${IMAGE_CHECKSUM} \
      -f podvm/Dockerfile.podvm.rhel .
    Copy to Clipboard Toggle word wrap
  7. 运行以下命令来创建镜像目录环境变量:

    $ export IMAGE_OUTPUT_DIR=<image_output_directory> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定镜像的目录。
  8. 运行以下命令来创建镜像目录:

    $ mkdir -p $IMAGE_OUTPUT_DIR
    Copy to Clipboard Toggle word wrap
  9. 运行以下命令保存提取的对等 pod QCOW2 镜像:

    $ podman save podvm_rhel_s390x | tar -xO --no-wildcards-match-slash '*.tar' | tar -x -C ${IMAGE_OUTPUT_DIR}
    Copy to Clipboard Toggle word wrap
  10. 将对等 pod QCOW2 镜像上传到 libvirt 卷:

    $ virsh -c qemu:///system vol-upload \
      --vol $LIBVIRT_VOL_NAME \
      $IMAGE_OUTPUT_DIR/podvm-*.qcow2 \
      --pool $LIBVIRT_POOL --sparse
    Copy to Clipboard Toggle word wrap

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}')
    Copy to Clipboard Toggle word wrap

流程

  1. 根据以下示例创建 peer-pods-secret.yaml 清单文件:

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      CLOUD_PROVIDER: "libvirt"
      LIBVIRT_URI: "<libvirt_gateway_uri>" 
    1
    
      LIBVIRT_POOL: "<libvirt_pool>" 
    2
    
      LIBVIRT_VOL_NAME: "<libvirt_volume>" 
    3
    Copy to Clipboard Toggle word wrap
    1
    指定 libvirt URI。
    2
    指定 libvirt 池。
    3
    指定 libvirt 卷名称。
  2. 通过应用清单来创建 secret 对象:

    $ oc apply -f peer-pods-secret.yaml
    Copy to Clipboard Toggle word wrap
注意

如果更新 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)"
Copy to Clipboard Toggle word wrap

重启守护进程集会重新创建对等 pod。它不会更新现有的 pod。

4.2.5. 创建配置映射

您必须在 OpenShift Container Platform 集群上为 libvirt 供应商创建配置映射。

流程

  1. 根据以下示例创建 peer-pods-cm.yaml 清单:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: peer-pods-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      CLOUD_PROVIDER: "libvirt"
      PROXY_TIMEOUT: "15m"
    Copy to Clipboard Toggle word wrap
  2. 应用清单以创建配置映射:

    $ oc apply -f peer-pods-cm.yaml
    Copy to Clipboard Toggle word wrap

    为您的 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)"
Copy to Clipboard Toggle word wrap

重启 daemonset 会重新创建对等 pod。它不会更新现有的 pod。

4.2.6. 创建 SSH 密钥 secret

您必须为 KVM 主机创建 SSH 密钥 secret 对象。

流程

  1. 登录您的 OpenShift Container Platform 集群。
  2. 运行以下命令来生成 SSH 密钥对:

    $ ssh-keygen -f ./id_rsa -N ""
    Copy to Clipboard Toggle word wrap
  3. 将公共 SSH 密钥复制到 KVM 主机:

    $ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令来创建 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
    Copy to Clipboard Toggle word wrap

    SSH 密钥 secret 已创建。

  5. 删除您创建的 SSH 密钥:

    $ shred -remove id_rsa.pub id_rsa
    Copy to Clipboard Toggle word wrap

4.2.7. 创建 KataConfig 自定义资源

您必须创建一个 KataConfig 自定义资源(CR)来作为 worker 节点上的运行时类安装 kata-remote

创建 KataConfig CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:

  • 使用默认配置创建一个名为 kata-remoteRuntimeClass CR。这可让用户在 RuntimeClassName 字段中引用 CR 将工作负载配置为使用 kata-remote 作为运行时。此 CR 也指定运行时的资源开销。

OpenShift 沙盒容器将 kata-remote 安装为集群上的 辅助 可选运行时,而不是主运行时。

重要

创建 KataConfig CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。妨碍重启时间的因素如下:

  • 带有更多 worker 节点的大型 OpenShift Container Platform 部署。
  • 激活 BIOS 和 Diagnostics 实用程序。
  • 在硬盘而不是 SSD 上部署。
  • 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
  • CPU 和网络较慢。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。

流程

  1. 根据以下示例创建 cluster-kataconfig.yaml 清单文件:

    apiVersion: kataconfiguration.openshift.io/v1
    kind: KataConfig
    metadata:
      name: cluster-kataconfig
    spec:
      enablePeerPods: true
      logLevel: info
    Copy to Clipboard Toggle word wrap
  2. 可选: 要在所选节点上安装 kata-remote,请根据以下示例指定节点标签:

    apiVersion: kataconfiguration.openshift.io/v1
    kind: KataConfig
    metadata:
      name: cluster-kataconfig
    spec:
      kataConfigPoolSelector:
        matchLabels:
          <label_key>: '<label_value>' 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    指定所选节点的标签。
  3. 创建 KataConfig CR:

    $ oc create -f cluster-kataconfig.yaml
    Copy to Clipboard Toggle word wrap

    新的 KataConfig CR 被创建,并在 worker 节点上作为运行时类安装 kata-remote

    在验证安装前,等待 kata-remote 安装完成,以及 worker 节点重新引导。

验证

  • 运行以下命令监控安装进度:

    $ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
    Copy to Clipboard Toggle word wrap

    安装 kataNodes 下所有 worker 的状态并且条件 InProgressFalse 时,而不指定原因,则会在集群中安装 kata-remote

详情请参阅 KataConfig 状态信息

您可以通过编辑 peerpodConfig 自定义资源(CR)来更改每个节点对等 pod 虚拟机(VM)的限制。

流程

  1. 运行以下命令检查当前的限制:

    $ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \
    -o jsonpath='{.spec.limit}{"\n"}'
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令修改 peerpodConfig CR 的 limit 属性:

    $ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \
    --type merge --patch '{"spec":{"limit":"<value>"}}' 
    1
    Copy to Clipboard Toggle word wrap
    1
    将 <value> 替换为您要定义的限制。

4.2.9. 配置工作负载对象

您可以通过将 kata-remote 配置为以下 pod 模板对象的运行时类来部署 OpenShift 沙盒容器工作负载:

  • Pod 对象
  • ReplicaSet 对象
  • ReplicationController 对象
  • StatefulSet 对象
  • Deployment 对象
  • deploymentConfig 对象
重要

不要在 openshift-sandboxed-containers-operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。

先决条件

  • 您已为供应商创建了 secret 对象。
  • 您已为供应商创建了配置映射。
  • 您已创建了 KataConfig 自定义资源 (CR)。

流程

  1. spec.runtimeClassName: kata-remote 添加到每个 pod 模板工作负载对象的清单中,如下例所示:

    apiVersion: v1
    kind: <object>
    # ...
    spec:
      runtimeClassName: kata-remote
    # ...
    Copy to Clipboard Toggle word wrap

    OpenShift Container Platform 创建工作负载对象并开始调度它。

验证

  • 检查 pod 模板对象的 spec.runtimeClassName 字段。如果值为 kata-remote,则工作负载在 OpenShift 沙盒容器上运行,使用对等 pod。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat