3.3. 使用带有 CLI 的对等 pod 部署 OpenShift 沙盒容器工作负载


您可以使用 CLI 部署 OpenShift 沙盒容器工作负载。首先,您必须安装 OpenShift 沙盒容器 Operator,然后创建 KataConfig 自定义资源。在沙盒容器中部署工作负载后,您必须将 kata-remote-cc 作为 runtimeClassName 添加到工作负载 YAML 文件中。

3.3.1. 使用 CLI 安装 OpenShift 沙盒容器 Operator

您可以使用 Red Hat OpenShift CLI 安装 OpenShift 沙盒容器 Operator。

先决条件

  • 在集群中安装了 Red Hat OpenShift 4.13。
  • 已安装 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.4.1
      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.4.1    1.4.0        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 沙盒容器。

先决条件

  • 在集群中安装了 Red Hat OpenShift 4.13。
  • 已安装 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

流程

  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 text)
      && 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 对象被应用。

3.3.2.2. 使用 CLI 创建 AWS 虚拟机镜像(AMI)

要使用 AWS 上的对等 pod 运行 OpenShift 沙盒容器,您必须首先使用 AWS 帐户和资源创建一个 RHEL AMI。

流程

  1. 运行以下 K8s 作业以创建镜像:

    $ oc apply -f https://raw.githubusercontent.com/openshift/sandboxed-containers-operator/peer-pods-tech-preview/hack/aws-image-job.yaml
    Copy to Clipboard Toggle word wrap
    注意

    此镜像不由 OpenShift 沙盒容器管理。您可以使用 AWS Web 控制台或 AWS CLI 工具删除它。

  2. 等待作业完成:

    $ oc wait --for=condition=complete job.batch/aws-image-creation --timeout=7m -n openshift-sandboxed-containers-operator
    Copy to Clipboard Toggle word wrap

创建镜像后,您必须使用 peer-pod ConfigMap 设置镜像。

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

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

流程

  1. 检索 AMI ID。确保保存该值以便稍后保存。

    $ PODVM_AMI_ID=$(aws ec2 describe-images --query "Images[*].[ImageId]" --filters "Name=name,Values=peer-pod-ami" --region ${AWS_REGION} --output text) && echo "PODVM_AMI_ID: \"$PODVM_AMI_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: "aws"
      VXLAN_PORT: "9000"
      PODVM_INSTANCE_TYPE: "t3.medium"
      PROXY_TIMEOUT: "5m"
      PODVM_AMI_ID: "<enter value>" 
    1
    Copy to Clipboard Toggle word wrap
    1
    输入您检索到的 AMI ID 值。
  3. 部署 ConfigMap:

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

ConfigMap 被部署。创建 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 沙盒容器。

先决条件

  • 在集群中安装了 Red Hat OpenShift 4.13。
  • 已安装 OpenShift CLI(oc)。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 已安装 OpenShift 沙盒容器 Operator。

3.3.3.1. 使用 CLI 为 Azure 创建 secret 对象

设置 Azure 访问密钥并在 secret 对象中配置网络。secret 对象用于创建 pod 虚拟机镜像,并由对等 pod 使用。

为 Azure 创建 secret 对象时,您必须设置特定的环境值。在创建 secret 对象前,您可以检索其中的一些值。但是,您必须准备以下值:

  • AZURE_CLIENT_ID
  • AZURE_CLIENT_SECRET
  • AZURE_TENANT_ID

流程

  1. 为 secret 对象收集额外的参数值。确保记下每个值。

    1. 检索订阅 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. 检索资源组:

      $ 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
    3. 检索 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
  2. 使用以下清单创建 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
    在开始之前输入您准备的 AZURE_CLIENT_ID 值。
    2
    在开始之前,输入您准备的 AZURE_CLIENT_SECRET 值。
    3
    在开始之前输入您准备的 AZURE_TENANT_ID 值。
    4
    输入您检索到的 AZURE_SUBSCRIPTION_ID 值。
    5
    输入您检索到的 AZURE_REGION 值。
    6
    输入您检索到的 AZURE_RESOURCE_GROUP 值。
  3. 应用 secret 对象:

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

secret 对象被应用。

3.3.3.2. 使用 CLI 创建 Azure 虚拟机镜像

要使用 Azure 上的对等 pod 运行 OpenShift 沙盒容器,您必须首先使用 Azure 帐户和资源为 Azure 创建 RHEL 镜像。

流程

  1. 运行以下 K8s 作业以创建镜像:

    $ oc apply -f https://raw.githubusercontent.com/openshift/sandboxed-containers-operator/peer-pods-tech-preview/hack/azure-image-job.yaml
    Copy to Clipboard Toggle word wrap
    注意

    此镜像不由 OpenShift 沙盒容器管理。如果需要,可以使用 Azure web 控制台或 Azure CLI 工具删除它。

  2. 等待作业完成:

    $ oc wait --for=condition=complete job.batch/azure-image-creation --timeout=7m -n openshift-sandboxed-containers-operator
    Copy to Clipboard Toggle word wrap

创建镜像后,您必须使用 peer-pod ConfigMap 设置镜像。

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

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

流程

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

    1. 检索 Azure 镜像 ID:

      $ AZURE_IMAGE_ID=$(az image list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id: id} | [? contains(Id, 'peer-pod-vmimage')]" --output tsv) && echo "AZURE_IMAGE_ID: \"$AZURE_IMAGE_ID\""
      Copy to Clipboard Toggle word wrap
    2. 检索 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。

    3. 检索 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
    4. 检索 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"
      AZURE_SUBNET_ID: "<enter value>" 
    1
    
      AZURE_NSG_ID: "<enter value>" 
    2
    
      AZURE_IMAGE_ID: "<enter value>" 
    3
    
      PROXY_TIMEOUT: "5m"
      DISABLECVM: "true"
    Copy to Clipboard Toggle word wrap
    1
    输入您检索到的 AZURE_SUBNET_ID 值。
    2
    输入您检索到的 AZURE_NSG_ID 值。
    3
    输入您检索到的 AZURE_IMAGE_ID 值。
  3. 部署 ConfigMap:

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

ConfigMap 被部署。

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

流程

  1. 生成 SSH 密钥:

    $ ssh-keygen -f ./id_rsa -N ""
    Copy to Clipboard Toggle word wrap
  2. 创建 SHH 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 创建 KataConfig 自定义资源

您必须创建一个 KataConfig 自定义资源(CR),以便在节点上安装 kata-remote-cc 作为 RuntimeClass。创建 KataConfig CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:

  • 在 RHCOS 节点上安装所需的 RHCOS 扩展,如 QEMU 和 kata-containers
  • 确保 CRI-O 运行时配置了正确的运行时处理程序。
  • 使用默认配置,创建一个名为 kata-remote-ccRuntimeClass CR。这可让用户在 RuntimeClassName 字段中引用 CR 将工作负载配置为使用 kata-remote-cc 作为运行时。此 CR 也指定运行时的资源开销。
注意

默认情况下,对等 pod 的 Kata 安装在所有 worker 节点上。如果要在特定节点上安装 kata-remote-cc 作为 RuntimeClass,您可以在这些节点上添加标签,然后在创建时在 KataConfig CR 中定义标签。

先决条件

  • 在集群中安装了 Red Hat OpenShift 4.13。
  • 已安装 OpenShift CLI(oc)。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 已安装 OpenShift 沙盒容器 Operator。
重要

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

  • 带有更多 worker 节点的大型 Red Hat OpenShift 部署。
  • 激活 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-cc 作为 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-cc 作为 RuntimeClass。等待 kata-remote-cc 安装完成,以及 worker 节点重新引导,然后继续下一步。

重要

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

验证

  • 监控安装进度:

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

    Is In Progress 的值显示为 false 后,安装就已完成。

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

要使用沙盒容器中的对等 pod 部署 pod 模板工作负载,您必须将 kata-remote-cc 作为 runtimeClassName 添加到工作负载 YAML 文件中。

先决条件

  • 在集群中安装了 Red Hat OpenShift 4.13。
  • 已安装 OpenShift CLI(oc)。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 已安装 OpenShift 沙盒容器 Operator。
  • 您已创建了一个 secret 对象和 peer-pod 配置映射,对云供应商是唯一的。
  • 您已创建了 KataConfig 自定义资源 (CR)。

流程

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

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

Pod 对象示例

apiVersion: v1
kind: Pod
metadata:
  name: hello-openshift
  labels:
    app: hello-openshift
spec:
  runtimeClassName: kata-remote-cc
  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

Red Hat OpenShift 创建工作负载并开始调度它。

验证

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat