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 的访问权限。

流程

  1. 为 OpenShift 沙盒容器 Operator 创建 Namespace 对象。

    1. 创建一个包含以下清单的 Namespace 对象 YAML 文件:

      apiVersion: v1
      kind: Namespace
      metadata:
        name: openshift-sandboxed-containers-operator
      Copy to Clipboard Toggle word wrap
    2. 创建 Namespace 对象:

      $ oc create -f Namespace.yaml
      Copy to Clipboard Toggle word wrap
  2. 为 OpenShift 沙盒容器 Operator 创建 OperatorGroup 对象。

    1. 创建一个包含以下清单的 OperatorGroup 对象 YAML 文件:

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: openshift-sandboxed-containers-operator
        namespace: openshift-sandboxed-containers-operator
      spec:
        targetNamespaces:
        - openshift-sandboxed-containers-operator
      Copy to Clipboard Toggle word wrap
    2. 创建 OperatorGroup 对象:

      $ oc create -f OperatorGroup.yaml
      Copy to Clipboard Toggle word wrap
  3. 创建 Subscription 对象,以便为 OpenShift 沙盒容器 Operator 订阅命名空间

    1. 创建一个包含以下内容的 Subscription 对象 YAML 文件:

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: openshift-sandboxed-containers-operator
        namespace: openshift-sandboxed-containers-operator
      spec:
        channel: stable
        installPlanApproval: Automatic
        name: sandboxed-containers-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        startingCSV: sandboxed-containers-operator.v1.5.3
      Copy to Clipboard Toggle word wrap
    2. 创建 Subscription 对象:

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

OpenShift 沙盒容器 Operator 现已安装在集群中。

注意

以上列出的所有对象文件名都是建议。您可以使用其他名称创建对象 YAML 文件。

验证

  • 确保正确安装 Operator:

    $ oc get csv -n openshift-sandboxed-containers-operator
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                             DISPLAY                                  VERSION  REPLACES     PHASE
    openshift-sandboxed-containers   openshift-sandboxed-containers-operator  1.5.3    1.5.2        Succeeded
    Copy to Clipboard Toggle word wrap

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 控制台中生成这些值。

流程

  1. 收集 secret 对象所需的参数值。确保记下每个值。

    1. 检索实例 ID:

      $ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
      Copy to Clipboard Toggle word wrap

      secret 对象本身不需要这个值,而是用于检索 secret 对象的其他值。

    2. 检索 AWS 区域:

      $ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
      Copy to Clipboard Toggle word wrap
    3. 检索 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\""
      Copy to Clipboard Toggle word wrap
    4. 检索 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 Toggle word wrap
    5. 检索 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\""
      Copy to Clipboard Toggle word wrap
  2. 使用以下清单创建 YAML 文件:

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      AWS_ACCESS_KEY_ID: "<enter value>" 
    1
    
      AWS_SECRET_ACCESS_KEY: "<enter value>" 
    2
    
      AWS_REGION: "<enter value>" 
    3
    
      AWS_SUBNET_ID: "<enter value>" 
    4
    
      AWS_VPC_ID: "<enter value>" 
    5
    
      AWS_SG_IDS: "<enter value>" 
    6
    Copy to Clipboard Toggle word wrap
    1
    在开始之前,输入您准备的 AWS_ACCESS_KEY_ID 值。
    2
    在开始之前,输入您准备的 AWS_SECRET_ACCESS_KEY 值。
    3
    输入您检索到的 AWS_REGION 值。
    4
    输入您检索到的 AWS_SUBNET_ID 值。
    5
    输入您检索到的 AWS_VPC_ID 值。
    6
    输入您检索到的 AWS_SG_IDS 值。
  3. 应用 secret 对象:

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

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

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

3.3.2.2. 使用 CLI 为 AWS 创建 peer-pod ConfigMap

为 AWS 创建 ConfigMap 时,您必须设置 AMI ID。在创建 ConfigMap 前,您可以检索这个值。

流程

  1. 使用以下清单创建 YAML 文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: peer-pods-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      CLOUD_PROVIDER: "aws"
      VXLAN_PORT: "9000"
      PODVM_INSTANCE_TYPE: "t3.medium" 
    1
    
      PODVM_INSTANCE_TYPES: "t2.small,t2.medium,t3.large" 
    2
    
      PROXY_TIMEOUT: "5m"
    Copy to Clipboard Toggle word wrap
    1
    定义工作负载中没有定义类型时使用的默认实例类型。
    2
    列出创建 pod 时可以指定的所有实例类型。这可让您为需要较少的内存和 CPU 或更大实例的工作负载定义较小的实例。
  2. 应用 ConfigMap

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

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

请记住,重启 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

流程

  1. 检索 Azure 订阅 ID:

    $ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
    Copy to Clipboard Toggle word wrap
  2. 生成 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 }
    Copy to Clipboard Toggle word wrap

    此时会出现以下输出:

    {
      "client_id": `AZURE_CLIENT_ID`,
      "client_secret": `AZURE_CLIENT_SECRET`,
      "tenant_id": `AZURE_TENANT_ID`
    }
    Copy to Clipboard Toggle word wrap
  3. 在 RBAC 输出中保存值,以便在 secret 对象中使用。
  4. 收集 secret 对象的额外参数值。确保记下每个值。

    1. 检索资源组:

      $ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""
      Copy to Clipboard Toggle word wrap
    2. 检索 Azure 区域:

      $ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""
      Copy to Clipboard Toggle word wrap
  5. 使用以下清单创建 YAML 文件:

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      AZURE_CLIENT_ID: "<enter value>" 
    1
    
      AZURE_CLIENT_SECRET: "<enter value>" 
    2
    
      AZURE_TENANT_ID: "<enter value>" 
    3
    
      AZURE_SUBSCRIPTION_ID: "<enter value>" 
    4
    
      AZURE_REGION: "<enter value>" 
    5
    
      AZURE_RESOURCE_GROUP: "<enter value>" 
    6
    Copy to Clipboard Toggle word wrap
    1
    输入您在 RBAC 文件中生成的 AZURE_CLIENT_ID 值。
    2
    输入您在 RBAC 文件中生成的 AZURE_CLIENT_SECRET 值。
    3
    输入您在 RBAC 文件中生成的 AZURE_TENANT_ID 值。
    4
    输入您检索到的 AZURE_SUBSCRIPTION_ID 值。
    5
    输入您检索到的 AZURE_REGION 值。
    6
    输入您检索到的 AZURE_RESOURCE_GROUP 值。
  6. 应用 secret 对象:

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

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

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

3.3.3.2. 使用 CLI 为 Azure 创建 peer-pod ConfigMap

为 Azure 创建 ConfigMap 时,您必须设置特定的配置值。在创建 ConfigMap 前,您可以检索这些值。

流程

  1. 收集 Azure peer-pod ConfigMap 的配置值。确保记下每个值。

    1. 检索 Azure VNet 名称:

      $ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)
      Copy to Clipboard Toggle word wrap

      ConfigMap 不需要这个值,而是用于检索 Azure 子网 ID。

    2. 检索 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\""
      Copy to Clipboard Toggle word wrap
    3. 检索 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 Toggle word wrap
  2. 使用以下清单创建 YAML 文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: peer-pods-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      CLOUD_PROVIDER: "azure"
      VXLAN_PORT: "9000"
      AZURE_INSTANCE_SIZE: "Standard_B2als_v2" 
    1
    
      AZURE_INSTANCE_SIZES: "Standard_B2als_v2,Standard_D2as_v5,Standard_D4as_v5,Standard_D2ads_v5" 
    2
    
      AZURE_SUBNET_ID: "<enter value>" 
    3
    
      AZURE_NSG_ID: "<enter value>" 
    4
    
      PROXY_TIMEOUT: "5m"
      DISABLECVM: "true"
    Copy to Clipboard Toggle word wrap
    1
    定义工作负载中没有定义实例时使用的默认实例大小。
    2
    列出创建 pod 时可以指定的所有实例大小。这可让您为需要较少的内存和 CPU 或更大实例的工作负载定义较小的实例。
    3
    输入您检索到的 AZURE_SUBNET_ID 值。
    4
    输入您检索到的 AZURE_NSG_ID 值。
  3. 应用 ConfigMap

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

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

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

您必须生成 SSH 密钥并创建 SSH 密钥 secret 对象,以便在 Azure 中使用对等 pod。

流程

  1. 生成 SSH 密钥:

    $ ssh-keygen -f ./id_rsa -N ""
    Copy to Clipboard Toggle word wrap
  2. 创建 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
    Copy to Clipboard Toggle word wrap

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 供应商来创建和管理虚拟机。

流程

  1. 登录到 IBM Z KVM 主机并设置 libvirt 用于存储管理的 shell 变量。

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

      $ export LIBVIRT_POOL=<name_of_libvirt_pool_to_create>
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令设置 libvirt 池的名称:

      $ export LIBVIRT_VOL_NAME=<name_of_libvirt_volume_to_create>
      Copy to Clipboard Toggle word wrap
    3. 运行以下命令,设置默认存储池位置的路径:

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

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

    $ virsh pool-start $LIBVIRT_POOL
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,为池创建 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

3.3.4.2. 为 IBM Z 创建 peer-pod 虚拟机镜像

要使用 IBM Z 上的对等 pod 运行 OpenShift 沙盒容器,您必须首先创建一个 KVM 客户机,libvirt 供应商从中启动 peer-pod 虚拟机。

创建镜像后,将镜像上传到您在上一步中创建的卷。

先决条件

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

流程

  1. 为您的系统设置 RHEL ORG_IDACTIVATION_KEY shell 变量。

    1. 当使用订阅的 RHEL 系统时,运行以下命令,将 shell 环境变量设置为保存机构 ID 和 Red Hat Subscription Management (RHSM)的激活码:

      $ export ORG_ID=$(cat ~/.rh_subscription/orgid)
      
      $ export ACTIVATION_KEY=$(cat ~/.rh_subscription/activation_key)
      Copy to Clipboard Toggle word wrap
    2. 使用未订阅的 RHEL 系统时,运行以下命令来设置适当的订阅值:

      $ export ORG_ID=<RHEL_ORGID_VALUE>
      
      $ export ACTIVATION_KEY=<RHEL_ACVTIVATION_KEY>
      Copy to Clipboard Toggle word wrap
  2. 登录到您的 IBM Z 系统并执行以下步骤:

    1. 从红帽客户门户网站下载 s390x RHEL KVM 客户机镜像到 libvirt 存储目录,以授予 libvirt 正确访问权限。默认目录为 /var/lib/libvirt/images。镜像用于生成对等 pod 虚拟机镜像,该镜像将包含相关的二进制文件。
    2. 运行以下命令,为下载的镜像设置 IMAGE_URL shell 环境变量:

      $ export IMAGE_URL=<location_of_downloaded_KVM_guest_image> 
      1
      Copy to Clipboard Toggle word wrap
      1
      输入您在上一步中下载的 KVM 客户机镜像的路径。
    3. 运行以下命令注册客户端 KVM 镜像:

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

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

      $ export IMAGE_CHECKSUM=$(sha256sum ${IMAGE_URL} | awk '{ print $1 }')
      Copy to Clipboard Toggle word wrap
3.3.4.2.1. 构建 peer-pod 虚拟机 QCOW2 镜像

要使用 IBM Z 上的对等 pod 运行 OpenShift 沙盒容器,您必须构建 peer-pod VM QCOW2 镜像。

流程

  1. 运行以下命令,将 cloud-api-adaptor 存储库克隆到构建工作站:

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

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

    1. 使用订阅的 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
    2. 使用未订阅的 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
  4. 运行以下命令,使用运行对等 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
    注意

    这个过程应该需要很长时间。

  5. 运行以下命令,提取二进制文件并构建 peer-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
  6. 运行以下命令,将 peer pod QCOW2 镜像提取到您选择的目录中:

    $ 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 Toggle word wrap
    1
    输入 image_output_directory,在其中提取最终 QCOW 镜像。
  7. 将 peer 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

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

流程

  1. 使用以下清单创建 YAML 文件 peer-pods-secret.yaml

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      CLOUD_PROVIDER: "libvirt" 
    1
    
      LIBVIRT_URI: "<libvirt_gateway_uri>" 
    2
    
      LIBVIRT_POOL: "<libvirt_pool>" 
    3
    
      LIBVIRT_VOL_NAME: "<libvirt_volume>" 
    4
    Copy to Clipboard Toggle word wrap
    1
    输入 libvirt 作为云供应商。
    2
    输入您检索到的 libvirt_gateway_uri 值。
    3
    输入您检索到的 libvirt_pool 值。
    4
    输入您检索到的 libvirt_volume 值。
  2. 创建 secret 对象:

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

secret 对象被应用。

3.3.4.4. 使用 CLI 为 IBM Z 创建 peer-pod ConfigMap

为 IBM Z 创建 ConfigMap 时,必须使用 libvirt 供应商。

流程

  1. 使用以下清单创建 YAML 文件 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. 应用 ConfigMap

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

ConfigMap 被应用。

您必须生成 SSH 密钥对,并创建一个 SSH 密钥 secret 对象来将对等 pod 与 IBM Z 搭配使用。

流程

  1. 生成 SSH 密钥:

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

    $ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_ADDRESS> 
    1
    Copy to Clipboard Toggle word wrap
    1
    输入 KVM 主机的 IP 地址。
  3. 创建 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
  4. 删除 SSH 密钥:

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

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-remoteRuntimeClass 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 和网络较慢。

流程

  1. 使用以下清单创建 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 作为 RuntimeClass,请创建一个包含清单中的标签的 YAML 文件:

    apiVersion: kataconfiguration.openshift.io/v1
    kind: KataConfig
    metadata:
      name: cluster-kataconfig
    spec:
      enablePeerPods: true
      logLevel: info
      kataConfigPoolSelector:
        matchLabels:
          <label_key>: '<label_value>' 
    1
    Copy to Clipboard Toggle word wrap
    1
    kataConfigPoolSelector 中的标签只支持单个值;不支持 nodeSelector 语法。
  3. 创建 KataConfig 资源:

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

创建新的 KataConfig CR,并开始在 worker 节点上安装 kata-remote 作为 RuntimeClass。等待 kata-remote 安装完成,以及 worker 节点重新引导,然后继续下一步。

注意

运行 CR 时,会创建虚拟机镜像。镜像创建通过云提供商完成,并且可以使用其他资源。

重要

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

验证

  • 监控安装进度:

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

    kataNodes 下的所有 worker 都被列为,且条件 InProgressFalse 时,它代表集群中安装 kata如需更多信息,请参阅"安装和卸载转换"。

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)。

流程

  1. runtimeClassName: kata-remote 添加到任何 pod 模板对象中:

    • Pod 对象
    • ReplicaSet 对象
    • ReplicationController 对象
    • StatefulSet 对象
    • Deployment 对象
    • deploymentConfig 对象
  2. 向 pod 模板对象添加注解,定义是否使用特定实例大小或类型,或者自动实例大小或类型。实例大小用于特定的云提供商,而实例类型则用于其他云提供商。

    • 对于特定实例大小或类型,添加以下注解:

      io.katacontainers.config.hypervisor.machine_type: <instance type/instance size>
      Copy to Clipboard Toggle word wrap

      定义工作负载应使用的实例大小或类型。在为对等 pod 创建 ConfigMap 时,预定义的这些默认大小或类型。从其中之一选择。

    • 对于自动实例大小或类型,添加以下注解:

      io.katacontainers.config.hypervisor.default_vcpus: <vcpus>
      io.katacontainers.config.hypervisor.default_memory: <memory>
      Copy to Clipboard Toggle word wrap

      定义可供工作负载使用的内存量。工作负载将根据可用内存量在自动实例大小或类型上运行。

    Pod 对象示例

    apiVersion: v1
    kind: Pod
    metadata:
      name: hello-openshift
      labels:
        app: hello-openshift
      annotations:
        io.katacontainers.config.hypervisor.machine_type: Standard_DC4as_v5 
    1
    
    spec:
      runtimeClassName: kata-remote
      containers:
        - name: hello-openshift
          image: quay.io/openshift/origin-hello-openshift
          ports:
            - containerPort: 8888
          securityContext:
            privileged: false
            allowPrivilegeEscalation: false
            runAsNonRoot: true
            runAsUser: 1001
            capabilities:
              drop:
                - ALL
            seccompProfile:
              type: RuntimeDefault
    Copy to Clipboard Toggle word wrap

    1
    本例使用之前定义的实例大小用于使用 Azure 的对等 pod。使用 AWS 的对等 pod 使用实例类型。

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

验证

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat