用户指南
在 OpenShift Container Platform 中部署沙盒容器
摘要
前言 复制链接链接已复制到粘贴板!
对红帽文档提供反馈
您可以通过在 Jira 中提交 Create Issue 表单来提供反馈或报告错误。Jira 问题将在 Red Hat Hybrid Cloud Infrastructure Jira 项目中创建,您可以在其中跟踪您反馈的进度。
- 确保您已登录到 Jira。如果您没有 JIRA 帐户,您必须创建一个 Red Hat Jira account。
- 启动 Create Issue 表单。
完成 Summary、Description 和 Reporter 字段。
在 Description 字段中,包含文档 URL、章节号以及问题的详细描述。
- 点 Create。
第 1 章 关于 OpenShift 沙盒容器 复制链接链接已复制到粘贴板!
用于 OpenShift Container Platform 的 OpenShift 沙盒容器将 Kata 容器集成为可选运行时,通过在轻量级虚拟机中运行容器化应用程序来提供增强的安全性和隔离功能。此集成为敏感工作负载提供了一个更安全的运行时环境,而无需对现有 OpenShift 工作流进行大量更改。此运行时支持专用虚拟机(VM)中的容器,从而改进了工作负载隔离。
1.1. 功能 复制链接链接已复制到粘贴板!
OpenShift 沙盒容器提供以下功能:
- 运行特权或不受信任的工作负载
您可以安全地运行需要特定特权的工作负载,而无需通过运行特权容器来破坏集群节点的风险。需要特殊权限的工作负载包括:
- 需要内核的特殊功能的工作负载,除了标准容器运行时(如 CRI-O)授予的默认功能外,例如访问低级别网络功能。
- 需要提高 root 特权的工作负载,例如访问特定物理设备。使用 OpenShift 沙盒容器时,只能将特定的设备传递给虚拟机(VM),确保工作负载无法访问或错误配置系统的其余部分。
用于安装或使用
set-uidroot 二进制文件的工作负载。这些二进制文件授予特殊权限,因此可能会造成安全风险。使用 OpenShift 沙盒容器时,对虚拟机有额外的权限,不授予对集群节点的特殊访问权限。有些工作负载需要专门用于配置集群节点的权限。此类工作负载应该仍然使用特权容器,因为在虚拟机上运行可能会阻止它们正常工作。
- 确保敏感工作负载的隔离
- Red Hat OpenShift Container Platform 的 OpenShift 沙盒容器将 Kata 容器集成为可选运行时,通过在轻量级虚拟机中运行容器化应用程序来提供增强的安全性和隔离功能。此集成为敏感工作负载提供了一个更安全的运行时环境,而无需对现有 OpenShift 工作流进行大量更改。此运行时支持专用虚拟机(VM)中的容器,从而改进了工作负载隔离。
- 确保每个工作负载的内核隔离
-
您可以运行需要自定义内核调整(如
sysctl、调度程序更改或缓存调整)以及创建自定义内核模块(如树外或特殊参数)的工作负载。 - 在租户间共享相同的工作负载
-
您可以从共享同一 OpenShift Container Platform 集群的不同机构运行支持许多用户(租户)的工作负载。系统还支持从多个供应商运行第三方工作负载,如容器网络功能(CNF)和企业应用程序。例如,第三方 CNF 可能不希望其自定义设置与数据包调整或由其他应用程序设置的
sysctl变量干扰。在完全隔离的内核内运行有助于防止"邻居噪音"配置问题。 - 确保正确隔离和沙盒测试软件
-
您可以使用已知漏洞运行容器化工作负载,或处理现有应用程序中的问题。通过这种隔离,管理员可以为开发人员提供对 pod 的管理控制,这在开发人员想要测试或验证管理员通常授予的配置时很有用。例如,管理员可以安全地将内核数据包过滤(eBPF)委派给开发人员。eBPF 需要
CAP_ADMIN或CAP_BPF特权,因此不允许在标准 CRI-O 配置下,因为这会授予容器主机 worker 节点上的每个进程的访问权限。同样,管理员可以授予对SystemTap等入侵工具的访问权限,或者支持在开发期间加载自定义内核模块。 - 确保通过虚拟机边界的默认资源控制
- 默认情况下,OpenShift 沙盒容器以强大和安全的方式管理 CPU、内存、存储和网络等资源。由于 OpenShift 沙盒容器部署到虚拟机上,因此额外的隔离层和安全性可为资源提供更精细的访问控制。例如,错误容器将无法为虚拟机分配超过可用内存更多的内存。相反,需要专用访问网卡或磁盘的容器可以完全控制该设备,而无需访问其他设备。
1.2. 与 OpenShift Container Platform 的兼容性 复制链接链接已复制到粘贴板!
OpenShift Container Platform 平台所需的功能由两个主要组件支持:
- Kata Runtime:包括 Red Hat Enterprise Linux CoreOS (RHCOS)和每个 OpenShift Container Platform 发行版本的 更新。
-
OpenShift 沙盒容器 Operator:使用 Web 控制台或 OpenShift CLI (
oc)安装 Operator。
OpenShift 沙盒容器 Operator 是一个 Rolling Stream Operator,这意味着最新版本是唯一受支持的版本。它可用于所有当前支持的 OpenShift Container Platform 版本。如需更多信息,请参阅 OpenShift Container Platform 生命周期政策 以了解更多详细信息。
Operator 依赖于 RHCOS 主机及其在其中运行的环境的功能。
您必须在 worker 节点上安装 Red Hat Enterprise Linux CoreOS (RHCOS)。不支持 RHEL 节点。
OpenShift 沙盒容器和 OpenShift Container Platform 版本之间的以下兼容性列表用于标识兼容的功能和环境。
| 架构 | OpenShift Container Platform 版本 |
|---|---|
| x86_64 | 4.8 或更高版本 |
| s390x | 4.14 或更高版本 |
部署 Kata 容器运行时的方法有两种:
- 裸机
- 对等 pod
对等 pod 技术从 OpenShift 沙盒容器 1.5 / OpenShift Container Platform 4.14 开始,允许在公有云中部署 OpenShift 沙盒容器。
| 功能 | 部署方法 | OpenShift Container Platform 4.15 | OpenShift Container Platform 4.16 |
|---|---|---|---|
| 机密容器[1] | 裸机 | 否 | 否 |
| 对等 pod | 开发者预览 | 开发者预览 | |
| GPU 支持[2] | 裸机 | 否 | 否 |
| 对等 pod | 开发者预览 | 开发者预览 |
- 机密容器仅在 AMD SEV-SNP 上被支持。
- s390x 不提供 GPU 功能。
| 平台 | 对等 pod | GPU | 机密容器 |
|---|---|---|---|
| AWS Cloud Computing Services | 是 | 开发者预览 | 否 |
| Microsoft Azure Cloud Computing Services | 是 | 开发者预览 | 开发者预览 |
1.3. 节点资格检查 复制链接链接已复制到粘贴板!
在部署 OpenShift 沙盒容器前,您可以检查裸机集群中的节点是否可以运行 OpenShift 沙盒容器。节点不合格的最常见原因是没有虚拟化支持。如果您在不符合节点上运行沙盒工作负载,则会出现错误。
高级工作流
- 安装 Node Feature Discovery Operator。
-
创建
NodeFeatureDiscovery自定义资源(CR)。 -
在创建
KataconfigCR 时启用节点资格检查。您可以在所有 worker 节点或所选节点上运行节点资格检查。
1.4. 常见术语 复制链接链接已复制到粘贴板!
以下是整个文档中所使用的术语:
- Sandbox
沙盒(sandbox)是一种隔离的环境,程序可以在其中运行。在沙盒中,您可以运行未经测试或不受信任的程序,而不影响到主机机器或操作系统。
在 OpenShift 沙盒容器环境中,沙盒通过使用虚拟化在不同的内核中运行工作负载来实现,从而增强了对在同一主机上运行的多个工作负载之间的交互的控制。
- Pod
pod 是继承自 Kubernetes 和 OpenShift Container Platform 的构造。它代表了可以部署容器的资源。容器在 pod 内运行,pod 用于指定可以在多个容器之间共享的资源。
在 OpenShift 沙盒容器上下文中,pod 被实施为一个虚拟机。多个容器可以在同一虚拟机上在同一 pod 中运行。
- OpenShift 沙盒容器 Operator
Operator 是一个软件组件,可自动执行一般需要人工在系统上执行的操作。
OpenShift 沙盒容器 Operator 的任务是管理集群上沙盒容器的生命周期。您可以使用 OpenShift 沙盒容器 Operator 来执行任务,如安装和删除沙盒容器、软件更新和状态监控。
- Kata 容器
- Kata 容器是一个上游核心项目,用于构建 OpenShift 沙盒容器。OpenShift 沙盒容器将 Kata 容器与 OpenShift Container Platform 集成。
- KataConfig
-
KataConfig对象代表沙盒容器的配置。它们存储有关集群状态的信息,如部署软件的节点。 - 运行时类
-
RuntimeClass对象用于描述可以使用哪个运行时来运行给定工作负载。OpenShift 沙盒容器 Operator 安装和部署了名为kata的运行时类。运行时类包含有关运行时的信息,用于描述运行时需要运行的资源,如 pod 开销。
- 对等(peer)pod
- OpenShift 沙盒容器中的对等 pod 扩展标准 pod 的概念。与标准沙盒容器不同,在 worker 节点本身上创建虚拟机,在对等 pod 中,虚拟机会使用任何支持的虚拟机监控程序或云供应商 API 通过远程 hypervisor 创建。对等 pod 作为 worker 节点上的常规 pod,其对应的虚拟机在其他位置运行。虚拟机的远程位置对用户是透明的,并由 pod 规格中运行时类指定。对等 pod 设计对嵌套虚拟化的需求。
1.5. OpenShift 沙盒容器 Operator 复制链接链接已复制到粘贴板!
OpenShift 沙盒容器 Operator 封装了来自 Kata 容器的所有组件。它管理安装、生命周期和配置任务。
OpenShift 沙盒容器 Operator 以 Operator 捆绑包格式 打包为两个容器镜像:
- 捆绑包镜像包含元数据,这是使 operator OLM 就绪所必需的。
-
第二个容器镜像包含监控和管理
KataConfig资源的实际控制器。
OpenShift 沙盒容器 Operator 基于 Red Hat Enterprise Linux CoreOS(RHCOS)扩展概念。RHCOS 扩展是安装可选 OpenShift Container Platform 软件的机制。OpenShift 沙盒容器 Operator 使用此机制在集群中部署沙盒容器。
沙盒容器 RHCOS 扩展包含用于 Kata、QEMU 及其依赖项的 RPM。您可以使用 Machine Config Operator 提供的 MachineConfig 资源启用它们。
其他资源
1.6. OpenShift Virtualization 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Virtualization 在集群中部署 OpenShift 沙盒容器。
要同时运行 OpenShift Virtualization 和 OpenShift 沙盒容器,您的虚拟机必须可实时迁移,以便它们不会阻止节点重启。详情请参阅 OpenShift Virtualization 文档中的关于实时迁移 的内容。
1.7. 存储注意事项 复制链接链接已复制到粘贴板!
1.7.1. 块卷支持 复制链接链接已复制到粘贴板!
OpenShift Container Platform 可以静态置备原始块卷。这些卷没有文件系统。对于可以直接写入磁盘或者实现其自己的存储服务的应用程序来说,使用它可以获得性能优势。
您可以将本地块设备用作 OpenShift 沙盒容器的持久性卷(PV)存储。此块设备可以使用 Local Storage Operator (LSO)来置备。
默认情况下,OpenShift Container Platform 中不会安装 Local Storage Operator。有关安装说明 ,请参阅安装 Local Storage Operator。
OpenShift 沙盒容器的原始块卷可以通过在 PV 规格中指定 volumeMode: Block 来置备。
块卷示例
1.8. FIPS 合规性 复制链接链接已复制到粘贴板!
OpenShift Container Platform 是为联邦信息处理标准(FIPS) 140-2 和 140-3 设计的。当以 FIPS 模式运行 Red Hat Enterprise Linux (RHEL) 或 Red Hat Enterprise Linux CoreOS (RHCOS)时,OpenShift Container Platform 核心组件使用 RHEL 加密库,在 x86_64、ppc64le、s390x 架构上提交给 NIST 的 FIPS 140-2/140-3 Validation。
有关 NIST 验证程序的更多信息,请参阅加密模块验证程序。有关为验证提交的 RHEL 加密库的单独版本的最新 NIST 状态,请参阅 Compliance Activities 和 Government Standards。
OpenShift 沙盒容器可以在启用了 FIPS 的集群中使用。
在 FIPS 模式下运行时,OpenShift 沙盒容器组件、虚拟机和虚拟机镜像会根据 FIPS 进行调整。
OpenShift 沙盒容器的 FIPS 合规性只适用于 kata 运行时类。对等 pod 运行时类 kata-remote 尚未被完全支持,且还没有为 FIPS 合规性进行测试。
FIPS 合规性是高安全性环境中所需的最重要的组件之一,可确保节点上只允许使用支持的加密技术。
只有在 x86_64 架构中的 OpenShift Container Platform 部署支持 FIPS 验证的/Modules in Process 加密库。
要了解红帽对 OpenShift Container Platform 合规框架的观点,请参阅 OpenShift 安全性指南手册中的“风险管理和法规就绪状态”一章。
第 2 章 在裸机上部署工作负载 复制链接链接已复制到粘贴板!
您可以使用 worker 节点上安装的 Red Hat Enterprise Linux CoreOS (RHCOS)在内部裸机服务器上部署 OpenShift 沙盒容器工作负载。
- 不支持 RHEL 节点。
- 不支持嵌套虚拟化。
您可以使用任何安装方法,包括 用户置备的、安装程序置备的 或 Assisted Installer 来部署集群。
您还可以在 Amazon Web Services (AWS)裸机实例上安装 OpenShift 沙盒容器。不支持由其他云提供商提供的裸机实例。
部署工作流
您可以通过执行以下步骤部署 OpenShift 沙盒容器工作负载:
- 准备您的环境。
-
创建
KataConfig自定义资源。 -
将您的工作负载对象配置为使用
kata运行时类。
2.1. 准备您的环境 复制链接链接已复制到粘贴板!
执行以下步骤准备您的环境:
- 确保集群有足够的资源。
- 安装 OpenShift 沙盒容器 Operator。
可选:配置节点 资格 检查以确保 worker 节点支持 OpenShift 沙盒容器:
- 安装 Node Feature Discovery (NFD) Operator。详情请参阅 NFD Operator 文档。
-
创建
NodeFeatureDiscovery自定义资源(CR)以定义 NFD Operator 检查的节点配置参数。
2.1.1. 资源要求 复制链接链接已复制到粘贴板!
OpenShift 沙盒容器允许用户在沙盒运行时 (Kata) 中的 OpenShift Container Platform 集群中运行工作负载。每个 pod 由一个虚拟机(VM)表示。每个虚拟机都在 QEMU 进程中运行,并托管一个 kata-agent 进程,它充当管理容器工作负载的监管程序,以及这些容器中运行的进程。两个额外的进程会增加开销:
-
containerd-shim-kata-v2用于与 pod 通信。 -
virtiofsd代表客户机处理主机文件系统访问。
每个虚拟机都配置有默认内存量。对于明确请求内存的容器,额外的内存会被热插到虚拟机中。
在没有内存资源的情况下运行的容器会消耗可用内存,直到虚拟机使用的总内存达到默认分配。客户机及其 I/O 缓冲区也消耗内存。
如果容器被授予特定数量的内存,那么该内存会在容器启动前热插到虚拟机中。
当指定内存限制时,如果消耗的内存超过限制,工作负载将被终止。如果没有指定内存限制,则虚拟机中运行的内核可能会耗尽内存。如果内核内存不足,它可能会终止虚拟机上的其他进程。
默认内存大小
下表列出了资源分配的一些默认值。
| 资源 | value |
|---|---|
| 默认为虚拟机分配的内存 | 2Gi |
| 启动时客户机 Linux 内核内存使用 | ~110Mi |
| QEMU 进程使用的内存(虚拟机内存除外) | ~30Mi |
|
| ~10Mi |
|
| ~20Mi |
|
在 Fedora 上运行 | ~300Mi* [1] |
文件缓冲区会出现并在多个位置考虑:
- 在客户机中它被显示为文件缓冲缓存。
-
在映射允许的用户空间文件 I/O 操作的
virtiofsd守护进程中。 - 在 QEMU 进程中作为客户机内存。
内存使用率指标正确考虑内存用量总量,该指标仅计算该内存一次。
Pod 开销描述了节点上 pod 使用的系统资源量。您可以使用 oc describe runtimeclass kata 获取 Kata 运行时的当前 pod 开销,如下所示。
Example
oc describe runtimeclass kata
$ oc describe runtimeclass kata
输出示例
您可以通过更改 RuntimeClass 的 spec.overhead 字段来更改 pod 开销。例如,如果您为容器运行的配置消耗 QEMU 进程和客户机内核数据的 350Mi 内存,您可以更改 RuntimeClass 开销来满足您的需要。
红帽支持指定的默认开销值。不支持更改默认开销值,这可能会导致技术问题。
在客户机中执行任何类型的文件系统 I/O 时,将在客户机内核中分配文件缓冲区。文件缓冲区也在主机上的 QEMU 进程以及 virtiofsd 进程中映射。
例如,如果您在客户机中使用 300Mi 文件缓冲区缓存,QEMU 和 virtiofsd 都显示使用 300Mi 额外内存。但是,所有三种情况下都使用相同的内存。因此,内存使用总量仅为 300Mi,映射在三个不同的位置。报告内存使用率指标时,会正确计算。
2.1.2. 安装 OpenShift 沙盒容器 Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台或命令行界面(CLI)安装 OpenShift 沙盒容器 Operator。
2.1.2.1. 使用 Web 控制台安装 Operator 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Container Platform Web 控制台安装 OpenShift 沙盒容器 Operator。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
- 在 OpenShift Container Platform Web 控制台中导航至 Operators → OperatorHub。
-
在 Filter by keyword 字段中,输入
OpenShift sandboxed containers。 - 选择 OpenShift 沙盒容器 Operator 标题并点 Install。
- 在 Install Operator 页面中,从可用 Update Channel 选项列表中选择 stable。
验证为 Installed Namespace 选择了 Operator recommended Namespace。这会在
openshift-sandboxed-containers-operator命名空间中安装 Operator。如果此命名空间尚不存在,则会自动创建。注意尝试在
openshift-sandboxed-containers-operator以外的命名空间中安装 OpenShift 沙盒容器 Operator 会导致安装失败。- 验证是否为 Approval Strategy 选择了 Automatic。Automatic 是默认值,当有新的 z-stream 发行版本可用时,自动启用对 OpenShift 沙盒容器的自动更新。
- 点 Install。
OpenShift 沙盒容器 Operator 现已安装在集群中。
验证
- 导航到 Operators → Installed Operators。
- 验证 OpenShift 沙盒容器 Operator 是否已显示。
2.1.2.2. 使用 CLI 安装 Operator 复制链接链接已复制到粘贴板!
您可以使用 CLI 安装 OpenShift 沙盒容器 Operator。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。
流程
创建
Namespace.yaml清单文件:apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令创建命名空间:
oc create -f Namespace.yaml
$ oc create -f Namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
OperatorGroup.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 operator 组:
oc create -f OperatorGroup.yaml
$ oc create -f OperatorGroup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Subscription.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建订阅:
oc create -f Subscription.yaml
$ oc create -f Subscription.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift 沙盒容器 Operator 现已安装在集群中。
验证
运行以下命令确保 Operator 已正确安装:
oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.3. 创建 NodeFeatureDiscovery CR 复制链接链接已复制到粘贴板!
您可以创建一个 NodeFeatureDiscovery 自定义资源(CR)来定义 Node Feature Discovery (NFD) Operator 检查的配置参数,以确定 worker 节点可以支持 OpenShift 沙盒容器。
要仅在您了解的所选 worker 节点上安装 kata 运行时,请将 feature.node.kubernetes.io/runtime.kata=true 标签应用到所选节点,并在 KataConfig CR 中设置 checkNodeEligibility: true。
要在所有 worker 节点上安装 kata 运行时,请在 KataConfig CR 中设置 checkNodeEligibility: false。
在这两种情况下,您不需要创建 NodeFeatureDiscovery CR。如果您确定节点有资格运行 OpenShift 沙盒容器,则应仅应用 feature.node.kubernetes.io/runtime.kata=true 标签。
以下流程将 feature.node.kubernetes.io/runtime.kata=true 标签应用到所有有资格的节点,并将 KataConfig 资源配置为检查节点资格。
先决条件
- 已安装 NFD Operator。
流程
根据以下示例创建
nfd.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
NodeFeatureDiscoveryCR:oc create -f nfd.yaml
$ oc create -f nfd.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow NodeFeatureDiscoveryCR 将feature.node.kubernetes.io/runtime.kata=true标签应用到所有合格的 worker 节点。
根据以下示例创建
kata-config.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
KataConfigCR:oc create -f kata-config.yaml
$ oc create -f kata-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证集群中是否应用了正确的标签:
oc get nodes --selector='feature.node.kubernetes.io/runtime.kata=true'
$ oc get nodes --selector='feature.node.kubernetes.io/runtime.kata=true'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS ROLES AGE VERSION compute-3.example.com Ready worker 4h38m v1.25.0 compute-2.example.com Ready worker 4h35m v1.25.0
NAME STATUS ROLES AGE VERSION compute-3.example.com Ready worker 4h38m v1.25.0 compute-2.example.com Ready worker 4h35m v1.25.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2. 使用 Web 控制台部署工作负载 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台部署 OpenShift 沙盒容器工作负载。
2.2.1. 创建 KataConfig 自定义资源 复制链接链接已复制到粘贴板!
您必须创建一个 KataConfig 自定义资源(CR),以便在 worker 节点上安装 kata 作为 RuntimeClass。
Kata 运行时类默认安装在所有 worker 节点上。如果只想在特定节点上安装 kata,您可以向这些节点添加标签,然后在 KataConfig CR 中定义该标签。
OpenShift 沙盒容器将 kata 作为集群中的辅助 可选运行时安装,而不是作为主要运行时。
创建 KataConfig CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。以下因素可能会增加重启时间:
- 带有更多 worker 节点的大型 OpenShift Container Platform 部署。
- 激活 BIOS 和 Diagnostics 实用程序。
- 在硬盘而不是 SSD 上部署。
- 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
- CPU 和网络较慢。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 可选:如果要启用节点资格检查,已安装了 Node Feature Discovery Operator。
流程
- 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 选择 OpenShift 沙盒容器 Operator。
- 在 KataConfig 选项卡中,点 Create KataConfig。
输入以下详情:
-
Name: 可选:默认名称为
example-kataconfig。 -
标签 :可选:输入任何相关的、识别到
KataConfig资源的属性。每个标签代表一个键值对。 - checkNodeEligibility: 可选:选择使用 Node Feature Discovery Operator (NFD)来检测节点资格。
KataConfigPoolSelector。可选: 要在所选节点上安装
kata,请在所选节点上为标签添加匹配表达式:- 展开 kataConfigPoolSelector 区域。
- 在 kataConfigPoolSelector 区域中,展开 matchExpressions。这是标签选择器要求列表。
- 点 Add matchExpressions。
- 在 Key 字段中,输入选择器应用到的标签键。
-
在 Operator 字段中,输入键与标签值的关系。有效的运算符为
In、NotIn、Exists和DoesNotExist。 - 展开 Values 区域,然后点 Add value。
-
在 Value 字段中,为 key 标签值输入
true或false。
-
loglevel :定义使用
kata运行时类为节点检索的日志数据级别。
-
Name: 可选:默认名称为
点 Create。
KataConfigCR 会被创建并在 worker 节点上安装kata运行时类。在验证安装前,等待
kata安装完成,以及 worker 节点重新引导。
验证
-
在 KataConfig 选项卡中,点
KataConfigCR 查看其详情。 点 YAML 选项卡查看
status小节。status小节包含conditions和kataNodes键。status.kataNodes的值是一个节点数组,每个节点都列出处于kata安装的特定状态的节点。每次有更新时都会出现一条消息。点 Reload 以刷新 YAML。
当
status.kataNodes数组中的所有 worker 都会显示installed和conditions.InProgress: False时,没有指定的原因,则会在集群中安装kata。
详情请参阅 KataConfig 状态信息。
2.2.2. 配置工作负载对象 复制链接链接已复制到粘贴板!
您可以通过将 kata 配置为以下 pod 模板对象的运行时类来部署 OpenShift 沙盒容器工作负载:
-
Pod对象 -
ReplicaSet对象 -
ReplicationController对象 -
StatefulSet对象 -
Deployment对象 -
deploymentConfig对象
不要在 openshift-sandboxed-containers-operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。
先决条件
- 您已为供应商创建了 secret 对象。
- 您已为供应商创建了配置映射。
-
您已创建了
KataConfig自定义资源 (CR)。
流程
- 在 OpenShift Container Platform Web 控制台中,导航到 Workloads → workload type,如 Pods。
- 在工作负载类型页面中,点对象查看其详情。
- 点 YAML 标签。
将
spec.runtimeClassName: kata添加到每个 pod 模板工作负载对象的清单中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform 创建工作负载对象并开始调度它。
验证
-
检查 pod 模板对象的
spec.runtimeClassName字段。如果值为kata,则工作负载在 OpenShift 沙盒容器中运行,使用对等 pod。
2.3. 使用命令行部署工作负载 复制链接链接已复制到粘贴板!
您可以使用命令行部署 OpenShift 沙盒容器工作负载。
2.3.1. 可选:使用 Local Storage Operator 置备本地块卷 复制链接链接已复制到粘贴板!
OpenShift 沙盒容器的本地块卷可以使用 Local Storage Operator (LSO)来置备。本地卷置备程序会在定义的资源中指定的路径上查找任何块设备。
先决条件
- 安装了 Local Storage Operator。
您有一个满足以下条件的本地磁盘:
- 它附加到一个节点。
- 它尚未挂载。
- 它不包含分区。
流程
创建本地卷资源。此资源必须定义本地卷的节点和路径。
注意不要在同一设备中使用不同的存储类名称。这样做可创建多个持久性卷 (PV)。
例如:Block
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 安装了 Local Storage Operator 的命名空间。
- 2
- 可选:包含附加了本地存储卷的节点列表的节点选择器。本例使用从
oc get node获取的节点主机名。如果没有定义值,则 Local Storage Operator 会尝试在所有可用节点上查找匹配的磁盘。 - 3
- 创建持久性卷对象时使用的存储类的名称。
- 4
- 此设置定义是否调用
wipefs,它会删除分区表签名(魔法字符串),使磁盘准备好用于 Local Storage Operator 置备。除了签名外,没有其它数据会被清除。默认为 "false" (不调用wipefs)。当在需要重新使用的磁盘中,将forceWipeDevicesAndDestroyAllData设置为 "true" 很有用。在这些情况下,将此字段设置为 true 可消除管理员手动擦除磁盘的需要。 - 5
- 包含要从中选择的本地存储设备列表的路径。在块设备上部署沙盒容器节点时,您必须使用此路径。
- 6
- 使用到
LocalVolume资源by-id的实际本地磁盘文件路径(如/dev/disk/by-id/wwn)替换这个值。当置备程序已被成功部署时,会为这些本地磁盘创建 PV。
在 OpenShift Container Platform 集群中创建本地卷资源。指定您刚才创建的文件:
oc create -f <local-volume>.yaml
$ oc create -f <local-volume>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证置备程序是否已创建并创建了相应的守护进程集:
oc get all -n openshift-local-storage
$ oc get all -n openshift-local-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意
所需的和当前的守护进程设定进程数。所需的数量为0表示标签选择器无效。验证持久性卷是否已创建:
oc get pv
$ oc get pvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE local-pv-1cec77cf 100Gi RWO Delete Available local-sc 88m local-pv-2ef7cd2a 100Gi RWO Delete Available local-sc 82m local-pv-3fa1c73 100Gi RWO Delete Available local-sc 48m
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE local-pv-1cec77cf 100Gi RWO Delete Available local-sc 88m local-pv-2ef7cd2a 100Gi RWO Delete Available local-sc 82m local-pv-3fa1c73 100Gi RWO Delete Available local-sc 48mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
编辑 LocalVolume 对象不会更改现有的持久性卷,因为这样做可能会导致破坏性操作。
2.3.2. 可选:在块设备上部署节点 复制链接链接已复制到粘贴板!
如果为 OpenShift 沙盒容器置备本地块卷,您可以选择在定义的卷资源中指定的路径上部署节点。
先决条件
- 已使用 Local Storage Operator 置备块设备
流程
- 对您要使用块设备部署的每个节点运行以下命令:
oc debug node/worker-0 -- chcon -vt container_file_t /host/path/to/device
$ oc debug node/worker-0 -- chcon -vt container_file_t /host/path/to/device
+ /path/to/device 必须是您在创建本地存储资源时定义的相同路径。
+ .输出示例
system_u:object_r:container_file_t:s0 /host/path/to/device
system_u:object_r:container_file_t:s0 /host/path/to/device
2.3.3. 创建 KataConfig 自定义资源 复制链接链接已复制到粘贴板!
您必须创建一个 KataConfig 自定义资源(CR)来作为 worker 节点上的运行时类安装 kata。
创建 KataConfig CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:
-
在 RHCOS 节点上安装所需的 RHCOS 扩展,如 QEMU 和
kata-containers。 - 确保 CRI-O 运行时配置了正确的运行时处理程序。
-
使用默认配置创建一个名为
kata的RuntimeClassCR。这可让用户在RuntimeClassName字段中引用 CR 将工作负载配置为使用kata作为运行时。此 CR 也指定运行时的资源开销。
OpenShift 沙盒容器将 kata 作为集群中的辅助 可选运行时安装,而不是作为主要运行时。
创建 KataConfig CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。妨碍重启时间的因素如下:
- 带有更多 worker 节点的大型 OpenShift Container Platform 部署。
- 激活 BIOS 和 Diagnostics 实用程序。
- 在硬盘而不是 SSD 上部署。
- 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
- CPU 和网络较慢。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 可选:如果要启用节点资格检查,已安装了 Node Feature Discovery Operator。
流程
根据以下示例创建
cluster-kataconfig.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 可选:将'checkNodeEligibility' 设置为
true以运行节点资格检查。
可选: 要在所选节点上安装
kata,请按照以下示例指定节点标签:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定所选节点的标签。
创建
KataConfigCR:oc create -f cluster-kataconfig.yaml
$ oc create -f cluster-kataconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新的
KataConfigCR 会被创建,并在 worker 节点上作为运行时类安装kata。在验证安装前,等待
kata安装完成,以及 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。
详情请参阅 KataConfig 状态信息。
2.3.4. 可选:修改 pod 开销 复制链接链接已复制到粘贴板!
Pod 开销描述了节点上 pod 使用的系统资源量。您可以通过更改 RuntimeClass 自定义资源的 spec.overhead 字段来修改 pod 开销。例如,如果您为容器运行的配置消耗 QEMU 进程和客户机内核数据的 350Mi 内存,您可以更改 RuntimeClass 开销来满足您的需要。
在客户机中执行任何类型的文件系统 I/O 时,将在客户机内核中分配文件缓冲区。文件缓冲区也在主机上的 QEMU 进程以及 virtiofsd 进程中映射。
例如,如果您在客户机中使用 300Mi 文件缓冲区缓存,QEMU 和 virtiofsd 都显示使用 300Mi 额外内存。但是,所有三种情况下都使用相同的内存。因此,内存使用总量仅为 300Mi,映射在三个不同的位置。报告内存使用率指标时,会正确计算。
红帽支持默认值。不支持更改默认开销值,这可能会导致技术问题。
流程
运行以下命令来获取
RuntimeClass对象:oc describe runtimeclass kata
$ oc describe runtimeclass kataCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
overhead.podFixed.memory和cpu值,保存为RuntimeClass.yaml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.5. 配置工作负载对象 复制链接链接已复制到粘贴板!
您可以通过将 kata 配置为以下 pod 模板对象的运行时类来部署 OpenShift 沙盒容器工作负载:
-
Pod对象 -
ReplicaSet对象 -
ReplicationController对象 -
StatefulSet对象 -
Deployment对象 -
deploymentConfig对象
不要在 openshift-sandboxed-containers-operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。
先决条件
- 您已为供应商创建了 secret 对象。
- 您已为供应商创建了配置映射。
-
您已创建了
KataConfig自定义资源 (CR)。
流程
将
spec.runtimeClassName: kata添加到每个 pod 模板工作负载对象的清单中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform 创建工作负载对象并开始调度它。
验证
-
检查 pod 模板对象的
spec.runtimeClassName字段。如果值为kata,则工作负载在 OpenShift 沙盒容器中运行,使用对等 pod。
第 3 章 在公共云中部署工作负载 复制链接链接已复制到粘贴板!
您可以在 AWS Cloud Computing Services 和 Microsoft Azure Cloud Computing Services 上部署 OpenShift 沙盒容器工作负载。
集群要求
- 已安装 Red Hat OpenShift Container Platform 4.13 或更高版本。
- 您的集群至少有一个 worker 节点。
3.1. 在 AWS 上部署工作负载 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台或命令行界面(CLI)在 AWS Cloud Computing Services 上部署 OpenShift 沙盒容器工作负载。
部署工作流
- 启用端口。
- 为 AWS 创建 secret。
- 为 AWS 创建配置映射。
-
创建
KataConfig自定义资源。 - 可选:修改每个节点的对等 pod VM 限制。
-
将您的工作负载对象配置为使用
kata-remote运行时类。
3.1.1. 准备您的环境 复制链接链接已复制到粘贴板!
执行以下步骤准备您的环境:
- 确保集群有足够的资源。
- 安装 OpenShift 沙盒容器 Operator。
- 启用端口 15150 和 9000,以允许内部与对等 pod 通信。
3.1.1.1. 资源要求 复制链接链接已复制到粘贴板!
对等 pod 虚拟机(VM)需要位于两个位置的资源:
-
worker 节点。worker 节点存储元数据、Kata shim 资源(
containerd-shim-kata-v2)、remote-hypervisor 资源(cloud-api-adaptor),以及 worker 节点和对等 pod 虚拟机之间的隧道设置。 - 云实例。这是在云中运行的实际对等 pod 虚拟机。
Kubernetes worker 节点中使用的 CPU 和内存资源由 RuntimeClass (kata-remote)定义中包含的 pod 开销 处理,用于创建对等 pod。
在云中运行的对等 pod 虚拟机总数定义为 Kubernetes 节点扩展资源。这个限制是每个节点,并由 peerpodConfig 自定义资源(CR)中的 limit 属性设置。
在创建 kataConfig CR 并启用对等 pod 时,名为 peerpodconfig-openshift 的 peerpodConfig CR 会被创建,位于 openshift-sandboxed-containers-operator 命名空间中。
以下 peerpodConfig CR 示例显示默认的 spec 值:
- 1
- 默认限制为每个节点 10 个虚拟机。
扩展资源名为 kata.peerpods.io/vm,并允许 Kubernetes 调度程序处理容量跟踪和核算。
您可以根据环境要求编辑每个节点的限制。如需更多信息,请参阅"修改对等 pod 中每个节点的虚拟机限制"。
变异 Webhook 将扩展的资源 kata.peerpods.io/vm 添加到 pod 规格中。如果存在,它还会从 pod 规格中删除任何特定于资源的条目。这可让 Kubernetes 调度程序考虑这些扩展资源,确保仅在资源可用时调度对等 pod。
变异 Webhook 修改 Kubernetes pod,如下所示:
-
变异 Webhook 会检查 pod 是否有预期的
RuntimeClassName值,在TARGET_RUNTIME_CLASS环境变量中指定。如果 pod 规格中的值与TARGET_RUNTIME_CLASS的值不匹配,则 Webhook 会在不修改 pod 的情况下退出。 如果
RuntimeClassName值匹配,webhook 会对 pod 规格进行以下更改:-
Webhook 从 pod 中所有容器和 init 容器的
resources字段中删除每个资源规格。 -
Webhook 通过修改 pod 中第一个容器的 resources 字段,将扩展资源(
kata.peerpods.io/vm)添加到 spec。Kubernetes 调度程序使用扩展资源kata.peerpods.io/vm用于核算目的。
-
Webhook 从 pod 中所有容器和 init 容器的
变异 Webhook 排除 OpenShift Container Platform 中的特定系统命名空间。如果在这些系统命名空间中创建了对等 pod,则使用 Kubernetes 扩展资源的资源核算不起作用,除非 pod spec 包含扩展资源。
作为最佳实践,定义集群范围的策略,仅允许在特定命名空间中创建对等 pod。
3.1.1.2. 为 AWS 启用端口 复制链接链接已复制到粘贴板!
您必须启用端口 15150 和 9000,以允许内部与 AWS 上运行的对等 pod 通信。
先决条件
- 已安装 OpenShift 沙盒容器 Operator。
- 已安装 AWS 命令行工具。
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
登录您的 OpenShift Container Platform 集群并检索实例 ID:
INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')$ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 AWS 区域:
AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}')$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索安全组 ID,并将其存储在阵列中:
AWS_SG_IDS=($(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text --region $AWS_REGION))$ AWS_SG_IDS=($(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text --region $AWS_REGION))Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于每个安全组 ID,授权 peer pod shim 访问 kata-agent 通信,并设置对等 pod 隧道:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在启用这些端口。
3.1.1.3. 安装 OpenShift 沙盒容器 Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台或命令行界面(CLI)安装 OpenShift 沙盒容器 Operator。
3.1.1.3.1. 使用 Web 控制台安装 Operator 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Container Platform Web 控制台安装 OpenShift 沙盒容器 Operator。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
- 在 OpenShift Container Platform Web 控制台中导航至 Operators → OperatorHub。
-
在 Filter by keyword 字段中,输入
OpenShift sandboxed containers。 - 选择 OpenShift 沙盒容器 Operator 标题并点 Install。
- 在 Install Operator 页面中,从可用 Update Channel 选项列表中选择 stable。
验证为 Installed Namespace 选择了 Operator recommended Namespace。这会在
openshift-sandboxed-containers-operator命名空间中安装 Operator。如果此命名空间尚不存在,则会自动创建。注意尝试在
openshift-sandboxed-containers-operator以外的命名空间中安装 OpenShift 沙盒容器 Operator 会导致安装失败。- 验证是否为 Approval Strategy 选择了 Automatic。Automatic 是默认值,当有新的 z-stream 发行版本可用时,自动启用对 OpenShift 沙盒容器的自动更新。
- 点 Install。
OpenShift 沙盒容器 Operator 现已安装在集群中。
验证
- 导航到 Operators → Installed Operators。
- 验证 OpenShift 沙盒容器 Operator 是否已显示。
3.1.1.3.2. 使用 CLI 安装 Operator 复制链接链接已复制到粘贴板!
您可以使用 CLI 安装 OpenShift 沙盒容器 Operator。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。
流程
创建
Namespace.yaml清单文件:apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令创建命名空间:
oc create -f Namespace.yaml
$ oc create -f Namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
OperatorGroup.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 operator 组:
oc create -f OperatorGroup.yaml
$ oc create -f OperatorGroup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Subscription.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建订阅:
oc create -f Subscription.yaml
$ oc create -f Subscription.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift 沙盒容器 Operator 现已安装在集群中。
验证
运行以下命令确保 Operator 已正确安装:
oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.2. 使用 Web 控制台部署工作负载 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台部署 OpenShift 沙盒容器工作负载。
3.1.2.1. 创建 secret 复制链接链接已复制到粘贴板!
您必须在 OpenShift Container Platform 集群中创建 Secret 对象。secret 存储云供应商凭证,用于创建 pod 虚拟机(VM)镜像和对等 pod 实例。默认情况下,OpenShift 沙盒容器 Operator 根据用于创建集群的凭证创建 secret。但是,您可以手动创建使用不同的凭证的 secret。
先决条件
-
AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY您可以在 AWS 控制台中生成这些值。
流程
- 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 点 OpenShift 沙盒容器 Operator 标题。
- 单击右上角的 Import 图标(+)。
在 Import YAML 窗口中,粘贴以下 YAML 清单:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Save 应用更改。
如果更新 peer pod secret,您必须重启 peerpodconfig-ctrl-caa-daemon DaemonSet 来应用更改。
更新 secret 后,点 Save 应用更改。然后运行以下命令来重启 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。
验证
- 导航到 Workloads → Secrets 以查看 secret。
3.1.2.2. 创建配置映射 复制链接链接已复制到粘贴板!
您必须在 OpenShift Container Platform 集群上为您的云供应商创建配置映射。
您必须设置 Amazon Machine Image (AMI) ID。在创建配置映射前,您可以检索这个值。
流程
从 AWS 实例获取以下值:
检索并记录实例 ID:
INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')$ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这用于检索 secret 对象的其他值。
检索并记录 AWS 区域:
AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索并记录 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\""$ 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 Copied! Toggle word wrap Toggle overflow 检索并记录 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\""$ 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 Copied! Toggle word wrap Toggle overflow 检索并记录 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\""$ 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 Copied! Toggle word wrap Toggle overflow
- 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 从 Operator 列表中选择 OpenShift 沙盒容器 Operator。
- 单击右上角的 Import 图标 (+)。
在 Import YAML 窗口中,粘贴以下 YAML 清单:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 点 Save 应用更改。
为您的云供应商创建一个配置映射。
如果更新 peer pod 配置映射,您必须重启 peerpodconfig-ctrl-caa-daemon daemonset 以应用更改。
更新配置映射后,点 Save 应用更改。然后运行以下命令来重启 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。
验证
- 导航到 Workloads → ConfigMaps 以查看新的配置映射。
3.1.2.3. 创建 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角色的用户访问集群。
流程
- 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 选择 OpenShift 沙盒容器 Operator。
- 在 KataConfig 选项卡中,点 Create KataConfig。
输入以下详情:
-
Name: 可选:默认名称为
example-kataconfig。 -
标签 :可选:输入任何相关的、识别到
KataConfig资源的属性。每个标签代表一个键值对。 - enablePeerPods :为公共云、IBM Z® 和 IBM® LinuxONE 部署选择。
KataConfigPoolSelector。可选: 要在所选节点上安装
kata-remote,请在所选节点上安装标签的匹配表达式:- 展开 kataConfigPoolSelector 区域。
- 在 kataConfigPoolSelector 区域中,展开 matchExpressions。这是标签选择器要求列表。
- 点 Add matchExpressions。
- 在 Key 字段中,输入选择器应用到的标签键。
-
在 Operator 字段中,输入键与标签值的关系。有效的运算符为
In、NotIn、Exists和DoesNotExist。 - 展开 Values 区域,然后点 Add value。
-
在 Value 字段中,为 key 标签值输入
true或false。
-
loglevel :定义使用
kata-remote运行时类为节点检索的日志数据级别。
-
Name: 可选:默认名称为
点 Create。
KataConfigCR 会被创建并在 worker 节点上安装kata-remote运行时类。在验证安装前,等待
kata-remote安装完成,以及 worker 节点重新引导。
验证
-
在 KataConfig 选项卡中,点
KataConfigCR 查看其详情。 点 YAML 选项卡查看
status小节。status小节包含conditions和kataNodes键。status.kataNodes的值是一个节点数组,每个节点都列出处于kata-remote安装的特定状态的节点。每次有更新时都会出现一条消息。点 Reload 以刷新 YAML。
当
status.kataNodes数组中的所有 worker 都会显示installed和conditions.InProgress: False时,集群中会安装kata-remote。
详情请参阅 KataConfig 状态信息。
3.1.2.3.1. 可选:验证 pod 虚拟机镜像 复制链接链接已复制到粘贴板!
在集群中安装 kata-remote 后,OpenShift 沙盒容器 Operator 会创建一个 pod 虚拟机镜像,用于创建对等 pod。此过程可能需要很长时间,因为镜像是在云实例上创建的。您可以通过检查您为云供应商创建的配置映射来验证 pod 虚拟机镜像是否已成功创建。
流程
- 进入 Workloads → ConfigMaps。
- 点供应商配置映射查看其详情。
- 点 YAML 标签。
检查 YAML 文件
的状态小节。如果
PODVM_AMI_ID参数被填充,则 pod 虚拟机镜像已创建成功。
故障排除
运行以下命令来检索事件日志:
oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
$ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检索作业日志:
oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
$ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您无法解决这个问题,请提交红帽支持问题单并附加这两个日志的输出。
3.1.2.4. 可选:修改每个节点的对等 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 运行以下命令修改
peerpodConfigCR 的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> 替换为您要定义的限制。
3.1.2.5. 配置工作负载对象 复制链接链接已复制到粘贴板!
您可以通过将 kata-remote 配置为以下 pod 模板对象的运行时类来部署 OpenShift 沙盒容器工作负载:
-
Pod对象 -
ReplicaSet对象 -
ReplicationController对象 -
StatefulSet对象 -
Deployment对象 -
deploymentConfig对象
不要在 openshift-sandboxed-containers-operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。
您可以通过在 YAML 文件中添加注解,定义工作负载是否使用配置映射中定义的默认实例类型部署。
如果您不想手动定义实例类型,您可以添加注解来使用自动实例类型,具体取决于可用内存。
先决条件
- 您已为供应商创建了 secret 对象。
- 您已为供应商创建了配置映射。
-
您已创建了
KataConfig自定义资源 (CR)。
流程
- 在 OpenShift Container Platform Web 控制台中,导航到 Workloads → workload type,如 Pods。
- 在工作负载类型页面中,点对象查看其详情。
- 点 YAML 标签。
将
spec.runtimeClassName: kata-remote添加到每个 pod 模板工作负载对象的清单中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向 pod 模板对象添加注解,以使用手动定义的实例类型或自动实例类型:
要使用手动定义的实例类型,请添加以下注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定配置映射中定义的实例类型。
要使用自动实例类型,请添加以下注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义可供工作负载使用的内存量。工作负载将根据可用内存量在自动实例类型上运行。
点 Save 应用更改。
OpenShift Container Platform 创建工作负载对象并开始调度它。
验证
-
检查 pod 模板对象的
spec.runtimeClassName字段。如果值为kata-remote,则工作负载在 OpenShift 沙盒容器上运行,使用对等 pod。
3.1.3. 使用命令行部署工作负载 复制链接链接已复制到粘贴板!
您可以使用命令行部署 OpenShift 沙盒容器工作负载。
3.1.3.1. 创建 secret 复制链接链接已复制到粘贴板!
您必须在 OpenShift Container Platform 集群中创建 Secret 对象。secret 存储云供应商凭证,用于创建 pod 虚拟机(VM)镜像和对等 pod 实例。默认情况下,OpenShift 沙盒容器 Operator 根据用于创建集群的凭证创建 secret。但是,您可以手动创建使用不同的凭证的 secret。
先决条件
-
AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY您可以在 AWS 控制台中生成这些值。
流程
根据以下示例创建
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.yamlCopy 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。
3.1.3.2. 创建配置映射 复制链接链接已复制到粘贴板!
您必须在 OpenShift Container Platform 集群上为您的云供应商创建配置映射。
您必须设置 Amazon Machine Image (AMI) ID。在创建配置映射前,您可以检索这个值。
流程
从 AWS 实例获取以下值:
检索并记录实例 ID:
INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')$ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这用于检索 secret 对象的其他值。
检索并记录 AWS 区域:
AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索并记录 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\""$ 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 Copied! Toggle word wrap Toggle overflow 检索并记录 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\""$ 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 Copied! Toggle word wrap Toggle overflow 检索并记录 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\""$ 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 Copied! Toggle word wrap Toggle overflow
根据以下示例创建
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.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的云供应商创建一个配置映射。
如果更新 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。
3.1.3.3. 创建 KataConfig 自定义资源 复制链接链接已复制到粘贴板!
您必须创建一个 KataConfig 自定义资源(CR)来作为 worker 节点上的运行时类安装 kata-remote。
创建 KataConfig CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:
-
使用默认配置创建一个名为
kata-remote的RuntimeClassCR。这可让用户在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
- 指定所选节点的标签。
创建
KataConfigCR:oc create -f cluster-kataconfig.yaml
$ oc create -f cluster-kataconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新的
KataConfigCR 被创建,并在 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 状态信息。
3.1.3.3.1. 可选:验证 pod 虚拟机镜像 复制链接链接已复制到粘贴板!
在集群中安装 kata-remote 后,OpenShift 沙盒容器 Operator 会创建一个 pod 虚拟机镜像,用于创建对等 pod。此过程可能需要很长时间,因为镜像是在云实例上创建的。您可以通过检查您为云供应商创建的配置映射来验证 pod 虚拟机镜像是否已成功创建。
流程
获取您为对等 pod 创建的配置映射:
oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yaml
$ oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 YAML 文件
的状态小节。如果
PODVM_AMI_ID参数被填充,则 pod 虚拟机镜像已创建成功。
故障排除
运行以下命令来检索事件日志:
oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
$ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检索作业日志:
oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
$ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您无法解决这个问题,请提交红帽支持问题单并附加这两个日志的输出。
3.1.3.4. 可选:修改每个节点的对等 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 运行以下命令修改
peerpodConfigCR 的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> 替换为您要定义的限制。
3.1.3.5. 配置工作负载对象 复制链接链接已复制到粘贴板!
您可以通过将 kata-remote 配置为以下 pod 模板对象的运行时类来部署 OpenShift 沙盒容器工作负载:
-
Pod对象 -
ReplicaSet对象 -
ReplicationController对象 -
StatefulSet对象 -
Deployment对象 -
deploymentConfig对象
不要在 openshift-sandboxed-containers-operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。
您可以通过在 YAML 文件中添加注解,定义工作负载是否使用配置映射中定义的默认实例类型部署。
如果您不想手动定义实例类型,您可以添加注解来使用自动实例类型,具体取决于可用内存。
先决条件
- 您已为供应商创建了 secret 对象。
- 您已为供应商创建了配置映射。
-
您已创建了
KataConfig自定义资源 (CR)。
流程
将
spec.runtimeClassName: kata-remote添加到每个 pod 模板工作负载对象的清单中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向 pod 模板对象添加注解,以使用手动定义的实例类型或自动实例类型:
要使用手动定义的实例类型,请添加以下注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定配置映射中定义的实例类型。
要使用自动实例类型,请添加以下注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义可供工作负载使用的内存量。工作负载将根据可用内存量在自动实例类型上运行。
运行以下命令,将更改应用到工作负载对象:
oc apply -f <object.yaml>
$ oc apply -f <object.yaml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform 创建工作负载对象并开始调度它。
验证
-
检查 pod 模板对象的
spec.runtimeClassName字段。如果值为kata-remote,则工作负载在 OpenShift 沙盒容器上运行,使用对等 pod。
3.2. 在 Azure 上部署工作负载 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台或命令行界面(CLI)在 Microsoft Azure Cloud Computing Services 上部署 OpenShift 沙盒容器工作负载。
部署工作流
- 为您的 Azure 访问密钥创建 secret。
- 创建配置映射以定义 Azure 实例大小和其他参数。
- 创建 SSH 密钥 secret。
-
创建
KataConfig自定义资源。 - 可选:修改每个节点的对等 pod VM 限制。
-
将您的工作负载对象配置为使用
kata-remote运行时类。
3.2.1. 准备您的环境 复制链接链接已复制到粘贴板!
执行以下步骤准备您的环境:
- 确保集群有足够的资源。
- 安装 OpenShift 沙盒容器 Operator。
3.2.1.1. 资源要求 复制链接链接已复制到粘贴板!
对等 pod 虚拟机(VM)需要位于两个位置的资源:
-
worker 节点。worker 节点存储元数据、Kata shim 资源(
containerd-shim-kata-v2)、remote-hypervisor 资源(cloud-api-adaptor),以及 worker 节点和对等 pod 虚拟机之间的隧道设置。 - 云实例。这是在云中运行的实际对等 pod 虚拟机。
Kubernetes worker 节点中使用的 CPU 和内存资源由 RuntimeClass (kata-remote)定义中包含的 pod 开销 处理,用于创建对等 pod。
在云中运行的对等 pod 虚拟机总数定义为 Kubernetes 节点扩展资源。这个限制是每个节点,并由 peerpodConfig 自定义资源(CR)中的 limit 属性设置。
在创建 kataConfig CR 并启用对等 pod 时,名为 peerpodconfig-openshift 的 peerpodConfig CR 会被创建,位于 openshift-sandboxed-containers-operator 命名空间中。
以下 peerpodConfig CR 示例显示默认的 spec 值:
- 1
- 默认限制为每个节点 10 个虚拟机。
扩展资源名为 kata.peerpods.io/vm,并允许 Kubernetes 调度程序处理容量跟踪和核算。
您可以根据环境要求编辑每个节点的限制。如需更多信息,请参阅"修改对等 pod 中每个节点的虚拟机限制"。
变异 Webhook 将扩展的资源 kata.peerpods.io/vm 添加到 pod 规格中。如果存在,它还会从 pod 规格中删除任何特定于资源的条目。这可让 Kubernetes 调度程序考虑这些扩展资源,确保仅在资源可用时调度对等 pod。
变异 Webhook 修改 Kubernetes pod,如下所示:
-
变异 Webhook 会检查 pod 是否有预期的
RuntimeClassName值,在TARGET_RUNTIME_CLASS环境变量中指定。如果 pod 规格中的值与TARGET_RUNTIME_CLASS的值不匹配,则 Webhook 会在不修改 pod 的情况下退出。 如果
RuntimeClassName值匹配,webhook 会对 pod 规格进行以下更改:-
Webhook 从 pod 中所有容器和 init 容器的
resources字段中删除每个资源规格。 -
Webhook 通过修改 pod 中第一个容器的 resources 字段,将扩展资源(
kata.peerpods.io/vm)添加到 spec。Kubernetes 调度程序使用扩展资源kata.peerpods.io/vm用于核算目的。
-
Webhook 从 pod 中所有容器和 init 容器的
变异 Webhook 排除 OpenShift Container Platform 中的特定系统命名空间。如果在这些系统命名空间中创建了对等 pod,则使用 Kubernetes 扩展资源的资源核算不起作用,除非 pod spec 包含扩展资源。
作为最佳实践,定义集群范围的策略,仅允许在特定命名空间中创建对等 pod。
3.2.1.2. 安装 OpenShift 沙盒容器 Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台或命令行界面(CLI)安装 OpenShift 沙盒容器 Operator。
3.2.1.2.1. 使用 Web 控制台安装 Operator 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Container Platform Web 控制台安装 OpenShift 沙盒容器 Operator。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
- 在 OpenShift Container Platform Web 控制台中导航至 Operators → OperatorHub。
-
在 Filter by keyword 字段中,输入
OpenShift sandboxed containers。 - 选择 OpenShift 沙盒容器 Operator 标题并点 Install。
- 在 Install Operator 页面中,从可用 Update Channel 选项列表中选择 stable。
验证为 Installed Namespace 选择了 Operator recommended Namespace。这会在
openshift-sandboxed-containers-operator命名空间中安装 Operator。如果此命名空间尚不存在,则会自动创建。注意尝试在
openshift-sandboxed-containers-operator以外的命名空间中安装 OpenShift 沙盒容器 Operator 会导致安装失败。- 验证是否为 Approval Strategy 选择了 Automatic。Automatic 是默认值,当有新的 z-stream 发行版本可用时,自动启用对 OpenShift 沙盒容器的自动更新。
- 点 Install。
OpenShift 沙盒容器 Operator 现已安装在集群中。
验证
- 导航到 Operators → Installed Operators。
- 验证 OpenShift 沙盒容器 Operator 是否已显示。
3.2.1.2.2. 使用 CLI 安装 Operator 复制链接链接已复制到粘贴板!
您可以使用 CLI 安装 OpenShift 沙盒容器 Operator。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。
流程
创建
Namespace.yaml清单文件:apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令创建命名空间:
oc create -f Namespace.yaml
$ oc create -f Namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
OperatorGroup.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 operator 组:
oc create -f OperatorGroup.yaml
$ oc create -f OperatorGroup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Subscription.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建订阅:
oc create -f Subscription.yaml
$ oc create -f Subscription.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift 沙盒容器 Operator 现已安装在集群中。
验证
运行以下命令确保 Operator 已正确安装:
oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2. 使用 Web 控制台部署工作负载 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台部署 OpenShift 沙盒容器工作负载。
3.2.2.1. 创建 secret 复制链接链接已复制到粘贴板!
您必须在 OpenShift Container Platform 集群中创建 Secret 对象。secret 存储云供应商凭证,用于创建 pod 虚拟机(VM)镜像和对等 pod 实例。默认情况下,OpenShift 沙盒容器 Operator 根据用于创建集群的凭证创建 secret。但是,您可以手动创建使用不同的凭证的 secret。
先决条件
- 已安装并配置了 Azure CLI 工具。
流程
检索 Azure 订阅 ID:
AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
$ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 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 }$ 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 Copied! Toggle word wrap Toggle overflow 输出示例:
{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
记录要在
secret对象中使用的 RBAC 输出。 - 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 点 OpenShift 沙盒容器 Operator 标题。
- 单击右上角的 Import 图标(+)。
在 Import YAML 窗口中,粘贴以下 YAML 清单:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Save 应用更改。
如果更新 peer pod secret,您必须重启 peerpodconfig-ctrl-caa-daemon DaemonSet 来应用更改。
更新 secret 后,点 Save 应用更改。然后运行以下命令来重启 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。
验证
- 导航到 Workloads → Secrets 以查看 secret。
3.2.2.2. 创建配置映射 复制链接链接已复制到粘贴板!
您必须在 OpenShift Container Platform 集群上为您的云供应商创建配置映射。
流程
从 Azure 实例获取以下值:
检索并记录 Azure VNet 名称:
AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)$ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个值用于检索 Azure 子网 ID。
检索并记录 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\""$ 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 Copied! Toggle word wrap Toggle overflow 检索并记录 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\""$ 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 Copied! Toggle word wrap Toggle overflow 检索并记录 Azure 资源组:
AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""$ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索并记录 Azure 区域:
AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""$ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 从 Operator 列表中选择 OpenShift 沙盒容器 Operator。
- 单击右上角的 Import 图标 (+)。
在 Import YAML 窗口中,粘贴以下 YAML 清单:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 点 Save 应用更改。
为您的云供应商创建一个配置映射。
如果更新 peer pod 配置映射,您必须重启 peerpodconfig-ctrl-caa-daemon daemonset 以应用更改。
更新配置映射后,点 Save 应用更改。然后运行以下命令来重启 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。
验证
- 导航到 Workloads → ConfigMaps 以查看新的配置映射。
3.2.2.3. 创建 SSH 密钥 secret 复制链接链接已复制到粘贴板!
您必须为 Azure 创建 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 - 在 OpenShift Container Platform Web 控制台中导航至 Workloads → Secrets。
- 在 Secrets 页面中,验证您是否位于 openshift-sandboxed-containers-operator 项目中。
- 点 Create 并选择 Key/value secret。
-
在 Secret name 字段中,输入
ssh-key-secret。 -
在 Key 字段中,输入
id_rsa.pub。 - 在 Value 字段中,粘贴您的公共 SSH 密钥。
点 Create。
SSH 密钥 secret 已创建。
删除您创建的 SSH 密钥:
shred -remove id_rsa.pub id_rsa
$ shred -remove id_rsa.pub id_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2.4. 创建 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角色的用户访问集群。
流程
- 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 选择 OpenShift 沙盒容器 Operator。
- 在 KataConfig 选项卡中,点 Create KataConfig。
输入以下详情:
-
Name: 可选:默认名称为
example-kataconfig。 -
标签 :可选:输入任何相关的、识别到
KataConfig资源的属性。每个标签代表一个键值对。 - enablePeerPods :为公共云、IBM Z® 和 IBM® LinuxONE 部署选择。
KataConfigPoolSelector。可选: 要在所选节点上安装
kata-remote,请在所选节点上安装标签的匹配表达式:- 展开 kataConfigPoolSelector 区域。
- 在 kataConfigPoolSelector 区域中,展开 matchExpressions。这是标签选择器要求列表。
- 点 Add matchExpressions。
- 在 Key 字段中,输入选择器应用到的标签键。
-
在 Operator 字段中,输入键与标签值的关系。有效的运算符为
In、NotIn、Exists和DoesNotExist。 - 展开 Values 区域,然后点 Add value。
-
在 Value 字段中,为 key 标签值输入
true或false。
-
loglevel :定义使用
kata-remote运行时类为节点检索的日志数据级别。
-
Name: 可选:默认名称为
点 Create。
KataConfigCR 会被创建并在 worker 节点上安装kata-remote运行时类。在验证安装前,等待
kata-remote安装完成,以及 worker 节点重新引导。
验证
-
在 KataConfig 选项卡中,点
KataConfigCR 查看其详情。 点 YAML 选项卡查看
status小节。status小节包含conditions和kataNodes键。status.kataNodes的值是一个节点数组,每个节点都列出处于kata-remote安装的特定状态的节点。每次有更新时都会出现一条消息。点 Reload 以刷新 YAML。
当
status.kataNodes数组中的所有 worker 都会显示installed和conditions.InProgress: False时,集群中会安装kata-remote。
详情请参阅 KataConfig 状态信息。
3.2.2.4.1. 可选:验证 pod 虚拟机镜像 复制链接链接已复制到粘贴板!
在集群中安装 kata-remote 后,OpenShift 沙盒容器 Operator 会创建一个 pod 虚拟机镜像,用于创建对等 pod。此过程可能需要很长时间,因为镜像是在云实例上创建的。您可以通过检查您为云供应商创建的配置映射来验证 pod 虚拟机镜像是否已成功创建。
流程
- 进入 Workloads → ConfigMaps。
- 点供应商配置映射查看其详情。
- 点 YAML 标签。
检查 YAML 文件
的状态小节。如果
AZURE_IMAGE_ID参数被填充,则 pod 虚拟机镜像已被成功创建。
故障排除
运行以下命令来检索事件日志:
oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
$ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检索作业日志:
oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
$ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您无法解决这个问题,请提交红帽支持问题单并附加这两个日志的输出。
3.2.2.5. 可选:修改每个节点的对等 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 运行以下命令修改
peerpodConfigCR 的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> 替换为您要定义的限制。
3.2.2.6. 配置工作负载对象 复制链接链接已复制到粘贴板!
您可以通过将 kata-remote 配置为以下 pod 模板对象的运行时类来部署 OpenShift 沙盒容器工作负载:
-
Pod对象 -
ReplicaSet对象 -
ReplicationController对象 -
StatefulSet对象 -
Deployment对象 -
deploymentConfig对象
不要在 openshift-sandboxed-containers-operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。
您可以通过在 YAML 文件中添加注解,定义工作负载是否使用配置映射中定义的默认实例大小进行部署。
如果您不想手动定义实例大小,您可以添加注解来使用自动实例大小,具体取决于可用内存。
先决条件
- 您已为供应商创建了 secret 对象。
- 您已为供应商创建了配置映射。
-
您已创建了
KataConfig自定义资源 (CR)。
流程
- 在 OpenShift Container Platform Web 控制台中,导航到 Workloads → workload type,如 Pods。
- 在工作负载类型页面中,点对象查看其详情。
- 点 YAML 标签。
将
spec.runtimeClassName: kata-remote添加到每个 pod 模板工作负载对象的清单中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向 pod 模板对象添加注解,以使用手动定义的实例大小或自动实例大小:
要使用手动定义的实例大小,请添加以下注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定配置映射中定义的实例大小。
要使用自动实例大小,请添加以下注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义可供工作负载使用的内存量。工作负载将根据可用内存量在自动实例大小上运行。
点 Save 应用更改。
OpenShift Container Platform 创建工作负载对象并开始调度它。
验证
-
检查 pod 模板对象的
spec.runtimeClassName字段。如果值为kata-remote,则工作负载在 OpenShift 沙盒容器上运行,使用对等 pod。
3.2.3. 使用命令行部署工作负载 复制链接链接已复制到粘贴板!
您可以使用命令行部署 OpenShift 沙盒容器工作负载。
3.2.3.1. 创建 secret 复制链接链接已复制到粘贴板!
您必须在 OpenShift Container Platform 集群中创建 Secret 对象。secret 存储云供应商凭证,用于创建 pod 虚拟机(VM)镜像和对等 pod 实例。默认情况下,OpenShift 沙盒容器 Operator 根据用于创建集群的凭证创建 secret。但是,您可以手动创建使用不同的凭证的 secret。
先决条件
- 已安装并配置了 Azure CLI 工具。
流程
检索 Azure 订阅 ID:
AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
$ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 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 }$ 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 Copied! Toggle word wrap Toggle overflow 输出示例:
{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
记录要在
secret对象中使用的 RBAC 输出。 根据以下示例创建
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.yamlCopy 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。
3.2.3.2. 创建配置映射 复制链接链接已复制到粘贴板!
您必须在 OpenShift Container Platform 集群上为您的云供应商创建配置映射。
流程
从 Azure 实例获取以下值:
检索并记录 Azure VNet 名称:
AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)$ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个值用于检索 Azure 子网 ID。
检索并记录 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\""$ 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 Copied! Toggle word wrap Toggle overflow 检索并记录 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\""$ 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 Copied! Toggle word wrap Toggle overflow 检索并记录 Azure 资源组:
AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""$ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索并记录 Azure 区域:
AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""$ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow
根据以下示例创建
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.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的云供应商创建一个配置映射。
如果更新 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。
3.2.3.3. 创建 SSH 密钥 secret 复制链接链接已复制到粘贴板!
您必须为 Azure 创建 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 运行以下命令来创建
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_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow SSH 密钥 secret 已创建。
删除您创建的 SSH 密钥:
shred -remove id_rsa.pub id_rsa
$ shred -remove id_rsa.pub id_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.3.4. 创建 KataConfig 自定义资源 复制链接链接已复制到粘贴板!
您必须创建一个 KataConfig 自定义资源(CR)来作为 worker 节点上的运行时类安装 kata-remote。
创建 KataConfig CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:
-
使用默认配置创建一个名为
kata-remote的RuntimeClassCR。这可让用户在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
- 指定所选节点的标签。
创建
KataConfigCR:oc create -f cluster-kataconfig.yaml
$ oc create -f cluster-kataconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新的
KataConfigCR 被创建,并在 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 状态信息。
3.2.3.4.1. 可选:验证 pod 虚拟机镜像 复制链接链接已复制到粘贴板!
在集群中安装 kata-remote 后,OpenShift 沙盒容器 Operator 会创建一个 pod 虚拟机镜像,用于创建对等 pod。此过程可能需要很长时间,因为镜像是在云实例上创建的。您可以通过检查您为云供应商创建的配置映射来验证 pod 虚拟机镜像是否已成功创建。
流程
获取您为对等 pod 创建的配置映射:
oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yaml
$ oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 YAML 文件
的状态小节。如果
AZURE_IMAGE_ID参数被填充,则 pod 虚拟机镜像已被成功创建。
故障排除
运行以下命令来检索事件日志:
oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
$ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检索作业日志:
oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
$ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您无法解决这个问题,请提交红帽支持问题单并附加这两个日志的输出。
3.2.3.5. 可选:修改每个节点的对等 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 运行以下命令修改
peerpodConfigCR 的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> 替换为您要定义的限制。
3.2.3.6. 配置工作负载对象 复制链接链接已复制到粘贴板!
您可以通过将 kata-remote 配置为以下 pod 模板对象的运行时类来部署 OpenShift 沙盒容器工作负载:
-
Pod对象 -
ReplicaSet对象 -
ReplicationController对象 -
StatefulSet对象 -
Deployment对象 -
deploymentConfig对象
不要在 openshift-sandboxed-containers-operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。
您可以通过在 YAML 文件中添加注解,定义工作负载是否使用配置映射中定义的默认实例大小进行部署。
如果您不想手动定义实例大小,您可以添加注解来使用自动实例大小,具体取决于可用内存。
先决条件
- 您已为供应商创建了 secret 对象。
- 您已为供应商创建了配置映射。
-
您已创建了
KataConfig自定义资源 (CR)。
流程
将
spec.runtimeClassName: kata-remote添加到每个 pod 模板工作负载对象的清单中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向 pod 模板对象添加注解,以使用手动定义的实例大小或自动实例大小:
要使用手动定义的实例大小,请添加以下注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定配置映射中定义的实例大小。
要使用自动实例大小,请添加以下注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义可供工作负载使用的内存量。工作负载将根据可用内存量在自动实例大小上运行。
运行以下命令,将更改应用到工作负载对象:
oc apply -f <object.yaml>
$ oc apply -f <object.yaml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform 创建工作负载对象并开始调度它。
验证
-
检查 pod 模板对象的
spec.runtimeClassName字段。如果值为kata-remote,则工作负载在 OpenShift 沙盒容器上运行,使用对等 pod。
第 4 章 在 IBM 上部署工作负载 复制链接链接已复制到粘贴板!
您可以在 IBM Z® 和 IBM® LinuxONE 上部署 OpenShift 沙盒容器工作负载。
在 IBM Z® 和 IBM® LinuxONE 上部署 OpenShift 沙盒容器工作负载只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
集群先决条件
- 已安装 Red Hat OpenShift Container Platform 4.14 或更高版本。
- 集群有三个控制节点和两个 worker 节点。
部署流程
虽然本文档只涉及 IBM Z®,但所有流程也适用于 IBM® LinuxONE。
您可以通过执行以下步骤部署 OpenShift 沙盒容器工作负载:
- 在 KVM 主机上配置 libvirt 卷。
- 创建 KVM 客户机镜像并将其上传到 libvirt 卷。
- 创建对等 pod 虚拟机镜像并将其上传到 libvirt 卷。
- 为 libvirt 提供程序创建 secret。
- 为 libvirt 供应商创建配置映射。
- 为您的 KVM 主机创建 SSH 密钥 secret。
-
创建
KataConfigCR。 - 可选:修改每个节点的对等 pod VM 限制。
-
将您的工作负载对象配置为使用
kata-remote运行时类。
- 集群节点和对等 pod 必须位于同一 IBM Z® KVM 主机逻辑分区(LPAR)中。
- 集群节点和对等 pod 必须连接到同一子网。
4.1. 准备您的环境 复制链接链接已复制到粘贴板!
执行以下步骤准备您的环境:
- 确保集群有足够的资源。
- 安装 OpenShift 沙盒容器 Operator。
4.1.1. 资源要求 复制链接链接已复制到粘贴板!
对等 pod 虚拟机(VM)需要位于两个位置的资源:
-
worker 节点。worker 节点存储元数据、Kata shim 资源(
containerd-shim-kata-v2)、remote-hypervisor 资源(cloud-api-adaptor),以及 worker 节点和对等 pod 虚拟机之间的隧道设置。 - 云实例。这是在云中运行的实际对等 pod 虚拟机。
Kubernetes worker 节点中使用的 CPU 和内存资源由 RuntimeClass (kata-remote)定义中包含的 pod 开销 处理,用于创建对等 pod。
在云中运行的对等 pod 虚拟机总数定义为 Kubernetes 节点扩展资源。这个限制是每个节点,并由 peerpodConfig 自定义资源(CR)中的 limit 属性设置。
在创建 kataConfig CR 并启用对等 pod 时,名为 peerpodconfig-openshift 的 peerpodConfig CR 会被创建,位于 openshift-sandboxed-containers-operator 命名空间中。
以下 peerpodConfig CR 示例显示默认的 spec 值:
- 1
- 默认限制为每个节点 10 个虚拟机。
扩展资源名为 kata.peerpods.io/vm,并允许 Kubernetes 调度程序处理容量跟踪和核算。
您可以根据环境要求编辑每个节点的限制。如需更多信息,请参阅"修改对等 pod 中每个节点的虚拟机限制"。
变异 Webhook 将扩展的资源 kata.peerpods.io/vm 添加到 pod 规格中。如果存在,它还会从 pod 规格中删除任何特定于资源的条目。这可让 Kubernetes 调度程序考虑这些扩展资源,确保仅在资源可用时调度对等 pod。
变异 Webhook 修改 Kubernetes pod,如下所示:
-
变异 Webhook 会检查 pod 是否有预期的
RuntimeClassName值,在TARGET_RUNTIME_CLASS环境变量中指定。如果 pod 规格中的值与TARGET_RUNTIME_CLASS的值不匹配,则 Webhook 会在不修改 pod 的情况下退出。 如果
RuntimeClassName值匹配,webhook 会对 pod 规格进行以下更改:-
Webhook 从 pod 中所有容器和 init 容器的
resources字段中删除每个资源规格。 -
Webhook 通过修改 pod 中第一个容器的 resources 字段,将扩展资源(
kata.peerpods.io/vm)添加到 spec。Kubernetes 调度程序使用扩展资源kata.peerpods.io/vm用于核算目的。
-
Webhook 从 pod 中所有容器和 init 容器的
变异 Webhook 排除 OpenShift Container Platform 中的特定系统命名空间。如果在这些系统命名空间中创建了对等 pod,则使用 Kubernetes 扩展资源的资源核算不起作用,除非 pod spec 包含扩展资源。
作为最佳实践,定义集群范围的策略,仅允许在特定命名空间中创建对等 pod。
4.1.2. 安装 OpenShift 沙盒容器 Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台或命令行界面(CLI)安装 OpenShift 沙盒容器 Operator。
4.1.2.1. 使用 Web 控制台安装 Operator 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Container Platform Web 控制台安装 OpenShift 沙盒容器 Operator。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
- 在 OpenShift Container Platform Web 控制台中导航至 Operators → OperatorHub。
-
在 Filter by keyword 字段中,输入
OpenShift sandboxed containers。 - 选择 OpenShift 沙盒容器 Operator 标题并点 Install。
- 在 Install Operator 页面中,从可用 Update Channel 选项列表中选择 stable。
验证为 Installed Namespace 选择了 Operator recommended Namespace。这会在
openshift-sandboxed-containers-operator命名空间中安装 Operator。如果此命名空间尚不存在,则会自动创建。注意尝试在
openshift-sandboxed-containers-operator以外的命名空间中安装 OpenShift 沙盒容器 Operator 会导致安装失败。- 验证是否为 Approval Strategy 选择了 Automatic。Automatic 是默认值,当有新的 z-stream 发行版本可用时,自动启用对 OpenShift 沙盒容器的自动更新。
- 点 Install。
OpenShift 沙盒容器 Operator 现已安装在集群中。
验证
- 导航到 Operators → Installed Operators。
- 验证 OpenShift 沙盒容器 Operator 是否已显示。
4.1.2.2. 使用 CLI 安装 Operator 复制链接链接已复制到粘贴板!
您可以使用 CLI 安装 OpenShift 沙盒容器 Operator。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。
流程
创建
Namespace.yaml清单文件:apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令创建命名空间:
oc create -f Namespace.yaml
$ oc create -f Namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
OperatorGroup.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 operator 组:
oc create -f OperatorGroup.yaml
$ oc create -f OperatorGroup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Subscription.yaml清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建订阅:
oc create -f Subscription.yaml
$ oc create -f Subscription.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift 沙盒容器 Operator 现已安装在集群中。
验证
运行以下命令确保 Operator 已正确安装:
oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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_POOLCopy 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® 系统。
将
s390xRHEL 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.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,进入
podvm目录:cd cloud-api-adaptor && git checkout 8577093
$ cd cloud-api-adaptor && git checkout 8577093Copy 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_DIRCopy 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 --sparseCopy 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.yamlCopy 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.yamlCopy 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_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow SSH 密钥 secret 已创建。
删除您创建的 SSH 密钥:
shred -remove id_rsa.pub id_rsa
$ shred -remove id_rsa.pub id_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.7. 创建 KataConfig 自定义资源 复制链接链接已复制到粘贴板!
您必须创建一个 KataConfig 自定义资源(CR)来作为 worker 节点上的运行时类安装 kata-remote。
创建 KataConfig CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:
-
使用默认配置创建一个名为
kata-remote的RuntimeClassCR。这可让用户在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
- 指定所选节点的标签。
创建
KataConfigCR:oc create -f cluster-kataconfig.yaml
$ oc create -f cluster-kataconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新的
KataConfigCR 被创建,并在 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 运行以下命令修改
peerpodConfigCR 的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。
第 5 章 监控 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台监控与沙盒工作负载和节点的健康状态相关的指标。
OpenShift 沙盒容器在 OpenShift Container Platform Web 控制台中有一个预先配置的仪表板。管理员还可以通过 Prometheus 访问和查询原始指标。
5.1. 关于指标 复制链接链接已复制到粘贴板!
OpenShift 沙盒容器指标让管理员能够监控沙盒容器的运行方式。您可以在 OpenShift Container Platform Web 控制台中的 Metrics UI 中查询这些指标。
OpenShift 沙盒容器指标为以下类别收集:
- Kata 代理指标
-
Kata 代理指标显示有关嵌入在沙盒容器中运行的 kata 代理进程的信息。这些指标包括
/proc/<pid>/[io, stat, status]中的数据。 - Kata 客户机操作系统指标
-
Kata 客户机操作系统指标显示沙盒容器中运行的客户机操作系统中的数据。这些指标包括
/proc/[stats, diskstats, meminfo, vmstats]和/proc/net/dev中的数据。 - hypervisor 指标
-
hypervisor 指标显示有关运行嵌入在沙盒容器中虚拟机的虚拟机监控程序的数据。这些指标主要包括
/proc/<pid>/[io, stat, status]中的数据。 - Kata 监控指标
- Kata 监控器是收集指标数据并提供给 Prometheus 的进程。kata 监控指标显示有关 kata-monitor 进程本身的资源使用情况的详细信息。这些指标还包括 Prometheus 数据收集的计数器。
- Kata containerd shim v2 指标
-
Kata containerd shim v2 指标显示有关 kata shim 进程的详细信息。这些指标包括来自
/proc/<pid>/[io, stat, status]和详细的资源使用量指标的数据。
5.2. 查看指标 复制链接链接已复制到粘贴板!
您可以在 OpenShift Container Platform Web 控制台的 Metrics 页面中访问 OpenShift 沙盒容器的指标。
先决条件
-
您可以使用具有
cluster-admin角色或所有项目的查看权限的用户访问集群。
流程
- 在 OpenShift Container Platform web 控制台中进入到 Observe → Metrics。
在输入字段中,输入您要观察到的指标的查询。
所有与 kata 相关的指标都以 kata 开头。键入 kata 会显示所有可用 kata 指标的列表。
在页面中会视觉化查询的指标。
第 6 章 卸装 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台或命令行卸载 OpenShift 沙盒容器。
卸载工作流
- 删除工作负载 pod。
-
删除
KataConfig自定义资源。 - 卸载 OpenShift 沙盒容器 Operator。
-
删除
KataConfig自定义资源定义。
6.1. 使用 Web 控制台卸载 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台卸载 OpenShift 沙盒容器。
6.1.1. 删除工作负载 pod 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台删除 OpenShift 沙盒容器工作负载 pod。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 您有一个使用 OpenShift 沙盒容器运行时类的 pod 列表。
流程
- 在 OpenShift Container Platform Web 控制台中导航至 Workloads → Pods。
- 在 Search by name 字段中输入您要删除的 pod 的名称。
- 点 pod 名称打开它。
-
在 Details 页面中,检查是否为 Runtime 类 显示
kata或kata-remote。 -
点击 Options 菜单
并选择 Delete Pod。
- 点击 Delete。
6.1.2. 删除 KataConfig CR 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台删除 KataConfig 自定义资源(CR)。删除 KataConfig CR 会从集群中移除并卸载 kata 运行时及其相关资源。
删除 KataConfig CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。妨碍重启时间的因素如下:
- 带有更多 worker 节点的大型 OpenShift Container Platform 部署。
- 激活 BIOS 和 Diagnostics 实用程序。
- 在硬盘而不是 SSD 上部署。
- 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
- CPU 和网络较慢。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 -
您已删除所有使用
kata作为runtimeClass的 pod。
流程
- 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 使用 Search by name 字段搜索 OpenShift 沙盒容器 Operator。
- 点 Operator 打开它,然后选择 KataConfig 选项卡。
-
点
KataConfig资源的 Options 菜单
,然后选择 Delete KataConfig。 - 在确认窗口中点击 Delete。
等待 kata 运行时和资源卸载,并使 worker 节点重启,然后继续下一步。
6.1.3. 卸载 Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台卸载 OpenShift 沙盒容器 Operator。卸载 Operator 会删除该 Operator 的目录订阅、Operator 组和集群服务版本(CSV)。然后,您可以删除 openshift-sandboxed-containers-operator 命名空间。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
- 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 在 Search by name 字段中输入 OpenShift 沙盒容器 Operator 名称。
-
点击 Operator 的 Options 菜单
并选择 Uninstall Operator。
- 在确认窗口中点 Uninstall。
-
在 Search by name 字段中输入
openshift-sandboxed-containers-operator名称。 点命名空间的 Options 菜单
并选择 Delete Namespace。
注意如果 Delete Namespace 选项不可用,代表您没有删除命名空间的权限。
-
在 Delete Namespace 窗口中,输入
openshift-sandboxed-containers-operator并点 Delete。 - 点击 Delete。
6.1.4. 删除 KataConfig CRD 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台删除 KataConfig 自定义资源定义(CRD)。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 -
已删除
KataConfigCR。 - 已卸载 OpenShift 沙盒容器 Operator。
流程
- 在 Web 控制台中,导航到 Administration → CustomResourceDefinitions。
-
在 Search by name 字段中输入
KataConfig名称。 -
点
KataConfigCRD 的 Options 菜单
,然后选择 Delete CustomResourceDefinition。
- 在确认窗口中点击 Delete。
-
等待
KataConfigCRD 会从列表中消失。这可能需要几分钟。
6.2. 使用 CLI 卸载 复制链接链接已复制到粘贴板!
您可以使用命令行界面(CLI)卸载 OpenShift 沙盒容器。
6.2.1. 删除工作负载 pod 复制链接链接已复制到粘贴板!
您可以使用 CLI 删除 OpenShift 沙盒容器工作负载 pod。
先决条件
-
已安装 JSON 处理器(
jq)工具。
流程
运行以下命令来搜索 pod:
oc get pods -A -o json | jq -r '.items[] | \ select(.spec.runtimeClassName == "<runtime>").metadata.name'
$ oc get pods -A -o json | jq -r '.items[] | \ select(.spec.runtimeClassName == "<runtime>").metadata.name'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为裸机部署指定
kata。为公有云、IBM Z® 和 IBM® LinuxONE 部署指定kata-remote。
运行以下命令来删除每个 pod:
oc delete pod <pod>
$ oc delete pod <pod>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.2. 删除 KataConfig CR 复制链接链接已复制到粘贴板!
您可以使用命令行删除 KataConfig 自定义资源(CR)。
删除 KataConfig CR 会从集群中移除运行时及其相关资源。
删除 KataConfig CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。妨碍重启时间的因素如下:
- 带有更多 worker 节点的大型 OpenShift Container Platform 部署。
- 激活 BIOS 和 Diagnostics 实用程序。
- 在硬盘而不是 SSD 上部署。
- 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
- CPU 和网络较慢。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。
流程
运行以下命令来删除
KataConfigCR:oc delete kataconfig <kataconfig>
$ oc delete kataconfig <kataconfig>Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift 沙盒容器 Operator 会删除最初为在集群中启用运行时创建的所有资源。
当您删除 KataConfig CR 时,CLI 会停止响应,直到所有 worker 节点重启为止。在执行验证前,您必须使删除过程完成。
要验证
KataConfig自定义资源是否已删除,请运行以下命令:oc get kataconfig <kataconfig>
$ oc get kataconfig <kataconfig>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
No KataConfig instances exist
No KataConfig instances existCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.3. 卸载 Operator 复制链接链接已复制到粘贴板!
您可以使用 CLI 卸载 OpenShift 沙盒容器 Operator。您可以通过删除 Operator 订阅、Operator 组、集群服务版本(CSV)和命名空间来卸载 Operator。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
已安装命令行 JSON 处理器(
jq)。 -
您可以使用具有
cluster-admin角色的用户访问集群。
流程
运行以下命令,从订阅中获取 OpenShift 沙盒容器的集群服务版本(CSV)名称:
CSV_NAME=$(oc get csv -n openshift-sandboxed-containers-operator -o=custom-columns=:metadata.name)
CSV_NAME=$(oc get csv -n openshift-sandboxed-containers-operator -o=custom-columns=:metadata.name)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从 Operator Lifecyle Manager (OLM)中删除 Operator 订阅:
oc delete subscription sandboxed-containers-operator -n openshift-sandboxed-containers-operator
$ oc delete subscription sandboxed-containers-operator -n openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,删除 OpenShift 沙盒容器的 CSV 名称:
oc delete csv ${CSV_NAME} -n openshift-sandboxed-containers-operator$ oc delete csv ${CSV_NAME} -n openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来获取 Operator 组名称:
OG_NAME=$(oc get operatorgroup -n openshift-sandboxed-containers-operator -o=jsonpath={..name})$ OG_NAME=$(oc get operatorgroup -n openshift-sandboxed-containers-operator -o=jsonpath={..name})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 Operator 组名称:
oc delete operatorgroup ${OG_NAME} -n openshift-sandboxed-containers-operator$ oc delete operatorgroup ${OG_NAME} -n openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 Operator 命名空间:
oc delete namespace openshift-sandboxed-containers-operator
$ oc delete namespace openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.4. 删除 KataConfig CRD 复制链接链接已复制到粘贴板!
您可以使用命令行删除 KataConfig 自定义资源定义(CRD)。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。 -
已删除
KataConfigCR。 - 已卸载 OpenShift 沙盒容器 Operator。
流程
运行以下命令来删除
KataConfigCRD:oc delete crd kataconfigs.kataconfiguration.openshift.io
$ oc delete crd kataconfigs.kataconfiguration.openshift.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证
KataConfigCRD 是否已删除,请运行以下命令:oc get crd kataconfigs.kataconfiguration.openshift.io
$ oc get crd kataconfigs.kataconfiguration.openshift.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Unknown CR KataConfig
Unknown CR KataConfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 7 章 升级 复制链接链接已复制到粘贴板!
OpenShift 沙盒容器组件的升级由以下三个步骤组成:
-
升级 OpenShift Container Platform 以更新
Kata运行时及其依赖项。 - 升级 OpenShift 沙盒容器 Operator 以更新 Operator 订阅。
您可以在 OpenShift 沙盒容器 Operator 升级前或之后升级 OpenShift Container Platform,但有以下例外。在升级 OpenShift 沙盒容器 Operator 后,始终立即应用 KataConfig 补丁。
7.1. 升级资源 复制链接链接已复制到粘贴板!
OpenShift 沙盒容器资源使用 Red Hat Enterprise Linux CoreOS (RHCOS) 扩展部署到集群中。
RHCOS 扩展 沙盒容器 包含运行 OpenShift 沙盒容器所需的组件,如 Kata 容器运行时、虚拟机监控程序 QEMU 和其他依赖项。您可以通过将集群升级到 OpenShift Container Platform 的新版本来升级扩展。
有关升级 OpenShift Container Platform 的更多信息,请参阅更新集群。
7.2. 升级 Operator 复制链接链接已复制到粘贴板!
使用 Operator Lifecycle Manager (OLM) 手动或自动升级 OpenShift 沙盒容器 Operator。在初始部署期间,选择手动或自动升级可决定将来的升级模式。对于手动升级,OpenShift Container Platform Web 控制台会显示集群管理员可安装的可用更新。
有关在 Operator Lifecycle Manager (OLM)中升级 OpenShift 沙盒容器 Operator 的更多信息,请参阅更新已安装的 Operator。
第 8 章 故障排除 复制链接链接已复制到粘贴板!
当对 OpenShift 沙盒容器进行故障排除时,您可以创建一个支持问题单,并使用 must-gather 工具提供调试信息。
如果您是集群管理员,您还可以自行查看日志,启用更详细的日志级别。
8.1. 为红帽支持收集数据 复制链接链接已复制到粘贴板!
在提交问题单时同时提供您的集群信息,可以帮助红帽支持为您进行排除故障。
您可使用 must-gather 工具来收集有关 OpenShift Container Platform 集群的诊断信息,包括虚拟机和有关 OpenShift 沙盒容器的其他数据。
为了获得快速支持,请提供 OpenShift Container Platform 和 OpenShift 沙盒容器的诊断信息。
使用 must-gather 工具
oc adm must-gather CLI 命令可收集最有助于解决问题的集群信息,包括:
- 资源定义
- 服务日志
默认情况下,oc adm must-gather 命令使用默认的插件镜像,并写入 ./must-gather.local。
另外,您可以使用适当的参数运行命令来收集具体信息,如以下部分所述:
要收集与一个或多个特定功能相关的数据,请使用
--image参数和镜像,如以下部分所述。例如:
oc adm must-gather --image=registry.redhat.io/openshift-sandboxed-containers/osc-must-gather-rhel9:1.6.0
$ oc adm must-gather --image=registry.redhat.io/openshift-sandboxed-containers/osc-must-gather-rhel9:1.6.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要收集审计日志,请使用
-- /usr/bin/gather_audit_logs参数,如以下部分所述。例如:
oc adm must-gather -- /usr/bin/gather_audit_logs
$ oc adm must-gather -- /usr/bin/gather_audit_logsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意作为默认信息集合的一部分,不会收集审计日志来减小文件的大小。
当您运行 oc adm must-gather 时,集群的新项目中会创建一个带有随机名称的新 pod。在该 pod 上收集数据,并保存至以 must-gather.local 开头的一个新目录中。此目录在当前工作目录中创建。
例如:
NAMESPACE NAME READY STATUS RESTARTS AGE ... openshift-must-gather-5drcj must-gather-bklx4 2/2 Running 0 72s openshift-must-gather-5drcj must-gather-s8sdh 2/2 Running 0 72s ...
NAMESPACE NAME READY STATUS RESTARTS AGE
...
openshift-must-gather-5drcj must-gather-bklx4 2/2 Running 0 72s
openshift-must-gather-5drcj must-gather-s8sdh 2/2 Running 0 72s
...
另外,您可以使用 --run-namespace 选项在特定命名空间中运行 oc adm must-gather 命令。
例如:
oc adm must-gather --run-namespace <namespace> --image=registry.redhat.io/openshift-sandboxed-containers/osc-must-gather-rhel9:1.6.0
$ oc adm must-gather --run-namespace <namespace> --image=registry.redhat.io/openshift-sandboxed-containers/osc-must-gather-rhel9:1.6.0
8.2. 收集日志数据 复制链接链接已复制到粘贴板!
以下功能和对象与 OpenShift 沙盒容器关联:
- 属于 OpenShift 沙盒容器资源的所有命名空间及其子对象
- 所有 OpenShift 沙盒容器自定义资源定义 (CRD)
您可以为使用 kata 运行时运行的每个 pod 收集以下组件日志:
- Kata 代理日志
- Kata 运行时日志
- QEMU 日志
- 审计日志
- CRI-O 日志
8.2.1. 为 CRI-O 运行时启用调试日志 复制链接链接已复制到粘贴板!
您可以通过更新 KataConfig CR 中的 logLevel 字段来启用调试日志。这会更改运行 OpenShift 沙盒容器的 worker 节点的 CRI-O 运行时中的日志级别。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。
流程
将现有
KataConfigCR 中的logLevel字段更改为debug:oc patch kataconfig <kataconfig> --type merge --patch '{"spec":{"logLevel":"debug"}}'$ oc patch kataconfig <kataconfig> --type merge --patch '{"spec":{"logLevel":"debug"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 监控
kata-oc机器配置池,直到UPDATED的值为True,表示所有 worker 节点都已更新:oc get mcp kata-oc
$ oc get mcp kata-ocCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE kata-oc rendered-kata-oc-169 False True False 3 1 1 0 9h
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE kata-oc rendered-kata-oc-169 False True False 3 1 1 0 9hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用机器配置池中的节点启动 debug 会话:
oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将根目录改为
/host:chroot /host
# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
crio.conf文件中的更改:crio config | egrep 'log_level
# crio config | egrep 'log_levelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
log_level = "debug"
log_level = "debug"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.2.2. 查看组件的调试日志 复制链接链接已复制到粘贴板!
集群管理员可以使用调试日志进行故障排除。每个节点的日志会输出到节点日志中。
您可以查看以下 OpenShift 沙盒容器组件的日志:
- Kata 代理
-
Kata runtime (
containerd-shim-kata-v2) -
virtiofsd
QEMU 仅生成警告和错误日志。这些警告和错误会在 Kata 运行时日志和带有额外的 qemuPid 字段的 CRI-O 日志中打印到节点日志。
QEMU 日志示例
Mar 11 11:57:28 openshift-worker-0 kata[2241647]: time="2023-03-11T11:57:28.587116986Z" level=info msg="Start logging QEMU (qemuPid=2241693)" name=containerd-shim-v2 pid=2241647 sandbox=d1d4d68efc35e5ccb4331af73da459c13f46269b512774aa6bde7da34db48987 source=virtcontainers/hypervisor subsystem=qemu Mar 11 11:57:28 openshift-worker-0 kata[2241647]: time="2023-03-11T11:57:28.607339014Z" level=error msg="qemu-kvm: -machine q35,accel=kvm,kernel_irqchip=split,foo: Expected '=' after parameter 'foo'" name=containerd-shim-v2 pid=2241647 qemuPid=2241693 sandbox=d1d4d68efc35e5ccb4331af73da459c13f46269b512774aa6bde7da34db48987 source=virtcontainers/hypervisor subsystem=qemu Mar 11 11:57:28 openshift-worker-0 kata[2241647]: time="2023-03-11T11:57:28.60890737Z" level=info msg="Stop logging QEMU (qemuPid=2241693)" name=containerd-shim-v2 pid=2241647 sandbox=d1d4d68efc35e5ccb4331af73da459c13f46269b512774aa6bde7da34db48987 source=virtcontainers/hypervisor subsystem=qemu
Mar 11 11:57:28 openshift-worker-0 kata[2241647]: time="2023-03-11T11:57:28.587116986Z" level=info msg="Start logging QEMU (qemuPid=2241693)" name=containerd-shim-v2 pid=2241647 sandbox=d1d4d68efc35e5ccb4331af73da459c13f46269b512774aa6bde7da34db48987 source=virtcontainers/hypervisor subsystem=qemu
Mar 11 11:57:28 openshift-worker-0 kata[2241647]: time="2023-03-11T11:57:28.607339014Z" level=error msg="qemu-kvm: -machine q35,accel=kvm,kernel_irqchip=split,foo: Expected '=' after parameter 'foo'" name=containerd-shim-v2 pid=2241647 qemuPid=2241693 sandbox=d1d4d68efc35e5ccb4331af73da459c13f46269b512774aa6bde7da34db48987 source=virtcontainers/hypervisor subsystem=qemu
Mar 11 11:57:28 openshift-worker-0 kata[2241647]: time="2023-03-11T11:57:28.60890737Z" level=info msg="Stop logging QEMU (qemuPid=2241693)" name=containerd-shim-v2 pid=2241647 sandbox=d1d4d68efc35e5ccb4331af73da459c13f46269b512774aa6bde7da34db48987 source=virtcontainers/hypervisor subsystem=qemu
当 QEMU 启动时,Kata 运行时会在 QEMU 启动时打印 Start logging QEMU,并在 QEMU 停止时停止日志记录 QEMU。使用 qemuPid 字段的两个日志消息之间会出现这个错误。QEMU 的实际错误消息以红色显示。
QEMU 客户机的控制台也会输出到节点日志中。您可以查看客户机控制台日志以及 Kata 代理日志。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。
流程
要查看 Kata 代理日志和客户机控制台日志,请运行以下命令:
oc debug node/<nodename> -- journalctl -D /host/var/log/journal -t kata -g “reading guest console”
$ oc debug node/<nodename> -- journalctl -D /host/var/log/journal -t kata -g “reading guest console”Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看 Kata 运行时日志,请运行以下命令:
oc debug node/<nodename> -- journalctl -D /host/var/log/journal -t kata
$ oc debug node/<nodename> -- journalctl -D /host/var/log/journal -t kataCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看
virtiofsd日志,请运行以下命令:oc debug node/<nodename> -- journalctl -D /host/var/log/journal -t virtiofsd
$ oc debug node/<nodename> -- journalctl -D /host/var/log/journal -t virtiofsdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看 QEMU 日志,请运行以下命令:
oc debug node/<nodename> -- journalctl -D /host/var/log/journal -t kata -g "qemuPid=\d+"
$ oc debug node/<nodename> -- journalctl -D /host/var/log/journal -t kata -g "qemuPid=\d+"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
- 在 OpenShift Container Platform 文档中收集有关集群的数据 https://docs.redhat.com/documentation/en-us/openshift_container_platform/4.15/html-single/support/index#support_gathering_data_gathering-cluster-data
附录 A. KataConfig 状态信息 复制链接链接已复制到粘贴板!
下表显示了具有两个 worker 节点的集群的 KataConfig 自定义资源(CR)的状态消息。
| Status | 描述 |
|---|---|
| 初始安装
当创建 |
|
| 安装 在几秒钟内,状态会改变。 |
|
| 安装 (Worker-1 安装开始)
在短时间内,状态会改变,表示一个节点启动了 |
|
| 安装 (安装了Worker-1,worker-0 安装已启动)
一段时间后, |
|
| 已安装
安装后,两个 worker 都被列出为 installed, |
|
| Status | 描述 |
|---|---|
| 初始卸载
如果在 worker 上同时安装了 |
|
| 卸装 几秒钟后,其中一个 worker 开始卸载。 |
|
| 卸装 worker-1 完成,worker-0 开始卸载。 |
kataNodes: nodeCount: 0 readyNodeCount: 0 uninstalling: - worker-0
|
reason 字段也可以报告以下原因:
-
失败:如果节点无法完成转换,则报告此报告。状态报告True,消息为Node <node_name> Degraded: <error_message_from_the_node>。 -
BlockedByExistingKataPods:如果在卸载运行时的集群中运行了 pod,则会报告它。katastatus字段为False,消息为Existing pod,使用 "kata" RuntimeClass found。Please delete the pods for KataConfig delete to proceed。如果与集群 control plane 的通信失败,则报告的技术错误消息,如Failed to list kata pod: <error_message>。