3.2. 使用 Web 控制台部署 OpenShift 沙盒容器


您可以使用 OpenShift Container Platform Web 控制台在 AWS 上部署 OpenShift 沙盒容器以执行以下任务:

  1. 安装 OpenShift 沙盒容器 Operator。
  2. 启用端口 15150 和 9000,以允许内部与对等 pod 通信。
  3. 创建对等 pod secret。
  4. 创建对等 pod 配置映射。
  5. 创建 KataConfig 自定义资源。
  6. 配置 OpenShift 沙盒容器工作负载对象。

3.2.1. 安装 OpenShift 沙盒容器 Operator

您可以使用 OpenShift Container Platform Web 控制台安装 OpenShift 沙盒容器 Operator。

先决条件

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

流程

  1. 在 Web 控制台中,导航到 Operators OperatorHub
  2. Filter by keyword 字段中,输入 OpenShift sandboxed containers
  3. 选择 OpenShift 沙盒容器 Operator 标题并点 Install
  4. Install Operator 页面中,从可用 Update Channel 选项列表中选择 stable
  5. 验证为 Installed Namespace 选择了 Operator recommended Namespace。这会在 openshift-sandboxed-containers-operator 命名空间中安装 Operator。如果此命名空间尚不存在,则会自动创建。

    注意

    尝试在 openshift-sandboxed-containers-operator 以外的命名空间中安装 OpenShift 沙盒容器 Operator 会导致安装失败。

  6. 验证是否为 Approval Strategy 选择了 AutomaticAutomatic 是默认值,当有新的 z-stream 发行版本可用时,自动启用对 OpenShift 沙盒容器的自动更新。
  7. Install
  8. 导航到 Operators Installed Operators,以验证是否已安装 Operator。

3.2.2. 为 AWS 启用端口

您必须启用端口 15150 和 9000,以允许内部与 AWS 上运行的对等 pod 通信。

先决条件

  • 已安装 OpenShift 沙盒容器 Operator。
  • 已安装 AWS 命令行工具。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。

流程

  1. 登录您的 OpenShift Container Platform 集群并检索实例 ID:

    $ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' \
      -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
  2. 检索 AWS 区域:

    $ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}')
  3. 检索安全组 ID,并将其存储在阵列中:

    $ AWS_SG_IDS=($(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} \
      --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' \
      --output text --region $AWS_REGION))
  4. 对于每个安全组 ID,授权 peer pod shim 访问 kata-agent 通信,并设置对等 pod 隧道:

    $ for AWS_SG_ID in "${AWS_SG_IDS[@]}"; do \
      aws ec2 authorize-security-group-ingress --group-id $AWS_SG_ID --protocol tcp --port 15150 --source-group $AWS_SG_ID --region $AWS_REGION \
      aws ec2 authorize-security-group-ingress --group-id $AWS_SG_ID --protocol tcp --port 9000 --source-group $AWS_SG_ID --region $AWS_REGION \
    done

现在启用这些端口。

3.2.3. 创建对等 pod secret

您必须为 OpenShift 沙盒容器创建对等 pod secret。

secret 存储用于创建 pod 虚拟机(VM)镜像和对等 pod 实例的凭证。

默认情况下,OpenShift 沙盒容器 Operator 根据用于创建集群的凭证创建 secret。但是,您可以手动创建使用不同的凭证的 secret。

先决条件

  • 您有使用 AWS 控制台生成的以下值:

    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY

流程

  1. 在 OpenShift Container Platform web 控制台中导航至 Operators Installed Operators
  2. 点 OpenShift 沙盒容器 Operator 标题。
  3. 单击右上角的 Import 图标(+)。
  4. Import YAML 窗口中,粘贴以下 YAML 清单:

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      AWS_ACCESS_KEY_ID: "<aws_access_key>" 1
      AWS_SECRET_ACCESS_KEY: "<aws_secret_access_key>" 2
    1
    指定 AWS_ACCESS_KEY_ID 值。
    2
    指定 AWS_SECRET_ACCESS_KEY 值。
  5. Save 应用更改。
  6. 导航到 Workloads Secrets 以验证对等 pod secret。

3.2.4. 创建对等 pod 配置映射

您必须为 OpenShift 沙盒容器创建对等 pod 配置映射。

先决条件

  • 如果没有根据集群凭证使用默认 AMI ID,则具有 Amazon Machine Image (AMI) ID。

流程

  1. 从 AWS 实例获取以下值:

    1. 检索并记录实例 ID:

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

      这用于检索 secret 对象的其他值。

    2. 检索并记录 AWS 区域:

      $ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
    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\""
    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\""
    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\""
  2. 在 OpenShift Container Platform web 控制台中导航至 Operators Installed Operators
  3. 从 Operator 列表中选择 OpenShift 沙盒容器 Operator。
  4. 单击右上角的 Import 图标 (+)。
  5. Import YAML 窗口中,粘贴以下 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"
      PODVM_AMI_ID: "<podvm_ami_id>" 3
      AWS_REGION: "<aws_region>" 4
      AWS_SUBNET_ID: "<aws_subnet_id>" 5
      AWS_VPC_ID: "<aws_vpc_id>" 6
      AWS_SG_IDS: "<aws_sg_ids>" 7
      DISABLECVM: "true"
    1
    定义工作负载中没有定义类型时使用的默认实例类型。
    2
    列出创建 pod 时可以指定的所有实例类型。这可让您为大型工作负载需要较少的内存和更多 CPU 或更大的实例类型的工作负载定义较小的实例类型。
    3
    可选:默认情况下,这个值会在运行 KataConfig CR 时填充,使用基于集群凭证的 AMI ID。如果您创建自己的 AMI,请指定正确的 AMI ID。
    4
    指定您检索到的 AWS_REGION 值。
    5
    指定您检索到的 AWS_SUBNET_ID 值。
    6
    指定您检索到的 AWS_VPC_ID 值。
    7
    指定您检索到的 AWS_SG_IDS 值。
  6. Save 应用更改。
  7. 导航到 Workloads ConfigMaps 以查看新的配置映射。

3.2.5. 创建 KataConfig 自定义资源

您必须创建 KataConfig 自定义资源(CR),以便在 worker 节点上作为 RuntimeClass 安装 kata-remote

kata-remote 运行时类默认安装在所有 worker 节点上。如果要在特定节点上安装 kata-remote,您可以向这些节点添加标签,然后在 KataConfig CR 中定义该标签。

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

重要

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

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

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 可选:如果要启用节点资格检查,已安装了 Node Feature Discovery Operator。

流程

  1. 在 OpenShift Container Platform web 控制台中导航至 Operators Installed Operators
  2. 选择 OpenShift 沙盒容器 Operator。
  3. KataConfig 选项卡中,点 Create KataConfig
  4. 输入以下详情:

    • Name: 可选:默认名称为 example-kataconfig
    • 标签 :可选:输入任何相关的、识别到 KataConfig 资源的属性。每个标签代表一个键值对。
    • enablePeerPods :为公共云、IBM Z® 和 IBM® LinuxONE 部署选择。
    • kataConfigPoolSelector.可选: 要在所选节点上安装 kata-remote,请在所选节点上安装标签的匹配表达式:

      1. 展开 kataConfigPoolSelector 区域。
      2. kataConfigPoolSelector 区域中,展开 matchExpressions。这是标签选择器要求列表。
      3. Add matchExpressions
      4. Key 字段中,输入选择器应用到的标签键。
      5. Operator 字段中,输入键与标签值的关系。有效的运算符为 InNotInExistsDoesNotExist
      6. 展开 Values 区域,然后点 Add value
      7. Value 字段中,为 key 标签值输入 truefalse
    • loglevel :定义使用 kata-remote 运行时类为节点检索的日志数据级别。
  5. CreateKataConfig CR 会被创建并在 worker 节点上安装 kata-remote 运行时类。

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

验证

  1. KataConfig 选项卡中,点 KataConfig CR 查看其详情。
  2. YAML 选项卡查看 status 小节。

    status 小节包含 conditionskataNodes 键。status.kataNodes 的值是一个节点数组,每个节点都列出处于 kata-remote 安装的特定状态的节点。每次有更新时都会出现一条消息。

  3. Reload 以刷新 YAML。

    status.kataNodes 数组中的所有 worker 都会显示 installedconditions.InProgress: False 时,集群中会安装 kata-remote

其他资源
验证 pod 虚拟机镜像

在集群中安装 kata-remote 后,OpenShift 沙盒容器 Operator 会创建一个 pod 虚拟机镜像,用于创建对等 pod。此过程可能需要很长时间,因为镜像是在云实例上创建的。您可以通过检查您为云供应商创建的配置映射来验证 pod 虚拟机镜像是否已成功创建。

流程

  1. 进入 Workloads ConfigMaps
  2. 点供应商配置映射查看其详情。
  3. YAML 标签。
  4. 检查 YAML 文件 的状态 小节。

    如果 PODVM_AMI_ID 参数被填充,则 pod 虚拟机镜像已创建成功。

故障排除

  1. 运行以下命令来检索事件日志:

    $ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
  2. 运行以下命令来检索作业日志:

    $ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation

如果您无法解决这个问题,请提交红帽支持问题单并附加这两个日志的输出。

3.2.6. 配置工作负载对象

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

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

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

您可以通过在 YAML 文件中添加注解,定义工作负载是否使用配置映射中定义的默认实例类型部署。

如果您不想手动定义实例类型,您可以添加注解来使用自动实例类型,具体取决于可用内存。

先决条件

  • 您已创建了 KataConfig 自定义资源(CR)。

流程

  1. 在 OpenShift Container Platform Web 控制台中,导航到 Workloads workload type,如 Pods
  2. 在工作负载类型页面中,点对象查看其详情。
  3. YAML 标签。
  4. spec.runtimeClassName: kata-remote 添加到每个 pod 模板工作负载对象的清单中,如下例所示:

    apiVersion: v1
    kind: <object>
    # ...
    spec:
      runtimeClassName: kata-remote
    # ...
  5. 向 pod 模板对象添加注解,以使用手动定义的实例类型或自动实例类型:

    • 要使用手动定义的实例类型,请添加以下注解:

      apiVersion: v1
      kind: <object>
      metadata:
        annotations:
          io.katacontainers.config.hypervisor.machine_type: "t3.medium" 1
      # ...
      1
      指定配置映射中定义的实例类型。
    • 要使用自动实例类型,请添加以下注解:

      apiVersion: v1
      kind: <Pod>
      metadata:
        annotations:
          io.katacontainers.config.hypervisor.default_vcpus: <vcpus>
          io.katacontainers.config.hypervisor.default_memory: <memory>
      # ...

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

  6. Save 应用更改。

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

验证

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.