4.3. 使用 Web 控制台部署 OpenShift 沙盒容器
您可以使用 OpenShift Container Platform Web 控制台在 Azure 上部署 OpenShift 沙盒容器以执行以下任务:
- 安装 OpenShift 沙盒容器 Operator。
- 可选:如果您卸载了 Cloud Credential Operator,它与 OpenShift 沙盒容器 Operator 一起安装的,则创建 peer pod secret。
- 可选: 选择自定义 pod 虚拟机镜像。
- 可选:创建 Azure secret。
- 可选:自定义 Kata 代理策略。
- 创建对等 pod 配置映射。
-
创建
KataConfig
自定义资源。 - 配置 OpenShift 沙盒容器工作负载对象。
4.3.1. 安装 OpenShift 沙盒容器 Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台安装 OpenShift 沙盒容器 Operator。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
-
在 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。
-
导航到 Operators
Installed Operators,以验证是否已安装 Operator。
4.3.2. 创建对等 pod secret 复制链接链接已复制到粘贴板!
当对等 pod secret 为空并安装 Cloud Credential Operator (CCO)时,OpenShift 沙盒容器 Operator 会使用 CCO 检索 secret。如果卸载了 CCO,您必须手动为 OpenShift 沙盒容器创建对等 pod secret,否则对等 pod 将无法操作。
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 内容:
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 应用更改。
-
导航到 Workloads
Secrets 以验证对等 pod secret。
4.3.3. 创建对等 pod 配置映射 复制链接链接已复制到粘贴板!
您必须为 OpenShift 沙盒容器创建对等 pod 配置映射。
流程
从 Azure 实例获取以下值:
检索并记录 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 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_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 - 1
- 如果工作负载中没有定义实例大小,
"Standard_B2als_v2"
实例大小为默认值。 - 2
- 指定实例大小(没有空格)用于创建 pod。这可让您为大型工作负载需要较少的内存和更小的实例大小的工作负载定义较小的实例大小。
- 3
- 指定您检索的
AZURE_SUBNET_ID
值。 - 4
- 指定您检索的
AZURE_NSG_ID
值。 - 5
- 可选:默认情况下,这个值会在运行
KataConfig
CR 时填充,使用基于集群凭证的 Azure 镜像 ID。如果创建自己的 Azure 镜像,请指定正确的镜像 ID。 - 6
- 指定您检索到的
AZURE_REGION
值。 - 7
- 指定您检索的
AZURE_RESOURCE_GROUP
值。 - 8
- 指定每个节点可以创建的对等 pod 的最大数量。默认值为
10
。 - 9
- 您可以将自定义标签配置为 pod 虚拟机实例的
key:value
对,以跟踪对等 pod 成本或标识不同集群中的对等 pod。
- 点 Save 应用更改。
-
导航到 Workloads
ConfigMaps 以查看新的配置映射。
4.3.4. 选择自定义对等 pod 虚拟机镜像 复制链接链接已复制到粘贴板!
您可以通过向 pod 清单添加注解来选择自定义对等 pod 虚拟机(VM)镜像,根据您的工作负载要求量身定制。自定义镜像覆盖对等 pod 配置映射中指定的默认镜像。
先决条件
- 要使用的自定义 pod 虚拟机镜像的 ID,与云供应商或 hypervisor 兼容。
流程
-
在 OpenShift Container Platform web 控制台中导航至 Operators
Installed Operators。 - 从 Operator 列表中选择 OpenShift 沙盒容器 Operator。
- 单击右上角的 Import 图标 (+)。
在 Import YAML 窗口中,粘贴以下 YAML 清单:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Save 应用更改。
4.3.5. 创建 Azure secret 复制链接链接已复制到粘贴板!
您必须创建 SSH 密钥 secret,这是 Azure 虚拟机(VM)创建 API 所需的。Azure 只需要 SSH 公钥。机密容器会禁用虚拟机中的 SSH,因此这些密钥对虚拟机没有影响。
流程
运行以下命令来生成 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 密钥:
shred --remove id_rsa.pub id_rsa
$ shred --remove id_rsa.pub id_rsa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.6. 自定义 Kata 代理策略 复制链接链接已复制到粘贴板!
Kata 代理策略是一种安全机制,用于控制使用 Kata 运行时运行的 pod 的代理 API 请求。使用 Rego 编写并由 Pod 虚拟机(VM)中的 Kata 代理强制,此策略决定哪些操作被允许或拒绝。
您可以针对特定用例使用自定义策略来覆盖默认策略,如在安全不是关注的地方进行开发和测试。例如,您可以在 control plane 可以被信任的环境中运行。您可以通过几种方法应用自定义策略:
- 将其嵌入到 pod 虚拟机镜像中。
- 修补对等 pod 配置映射。
- 为工作负载 pod YAML 添加注解。
对于生产环境系统,首选的方法是使用 initdata 覆盖 Kata 代理策略。以下流程使用 io.katacontainers.config.agent.policy
注解将自定义策略应用到单独的 pod。该策略以 Base64 编码的 Rego 格式提供。此方法会在创建 Pod 时覆盖默认策略,而不修改 pod 虚拟机镜像。
自定义策略完全替换了默认策略。要只修改特定的 API,请包含完整的策略并调整相关规则。
流程
使用自定义策略创建
policy.rego
文件。以下示例显示了所有可配置的 API,并且为演示启用了exec
和log
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此策略启用
exec
(ExecProcessRequest
)和log
(ReadStreamRequest
) API。根据您的需要,调整true
或false
值以进一步自定义策略。运行以下命令,将
policy.rego
文件转换为 Base64 编码的字符串:base64 -w0 policy.rego
$ base64 -w0 policy.rego
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将输出保存到 yaml 文件中。
-
在 OpenShift Container Platform web 控制台中导航至 Operators
Installed Operators。 - 从 Operator 列表中选择 OpenShift 沙盒容器 Operator。
- 单击右上角的 Import 图标 (+)。
在 Import YAML 窗口中,粘贴以下 YAML 清单,并将 Base64 编码的策略添加到其中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Save 应用更改。
4.3.7. 创建 KataConfig 自定义资源 复制链接链接已复制到粘贴板!
您必须创建 KataConfig
自定义资源(CR),以便在 worker 节点上作为 RuntimeClass
安装 kata-remote
。
kata-remote
运行时类默认安装在所有 worker 节点上。如果要在特定节点上安装 kata-remote
,您可以向这些节点添加标签,然后在 KataConfig
CR 中定义该标签。
OpenShift 沙盒容器将 kata-remote
安装为集群上的 辅助 可选运行时,而不是主运行时。
创建 KataConfig
CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。以下因素可能会增加重启时间:
- 带有更多 worker 节点的大型 OpenShift Container Platform 部署。
- 激活 BIOS 和 Diagnostics 实用程序。
- 在硬盘而不是 SSD 上部署。
- 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
- CPU 和网络较慢。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 - 可选:如果要启用节点资格检查,已安装了 Node Feature Discovery Operator。
流程
-
在 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。
KataConfig
CR 会被创建并在 worker 节点上安装kata-remote
运行时类。在验证安装前,等待
kata-remote
安装完成,以及 worker 节点重新引导。
验证
-
在 KataConfig 选项卡中,点
KataConfig
CR 查看其详情。 点 YAML 选项卡查看
status
小节。status
小节包含conditions
和kataNodes
键。status.kataNodes
的值是一个节点数组,每个节点都列出处于kata-remote
安装的特定状态的节点。每次有更新时都会出现一条消息。点 Reload 以刷新 YAML。
当
status.kataNodes
数组中的所有 worker 都会显示installed
和conditions.InProgress: False
时,集群中会安装kata-remote
。
其他资源
验证 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-creation
Copy 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-creation
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您无法解决这个问题,请提交红帽支持问题单并附加这两个日志的输出。
4.3.8. 配置工作负载对象 复制链接链接已复制到粘贴板!
您必须通过将 kata-remote
设置为以下 pod 模板对象的运行时类来配置 OpenShift 沙盒容器工作负载对象:
-
Pod
对象 -
ReplicaSet
对象 -
ReplicationController
对象 -
StatefulSet
对象 -
Deployment
对象 -
deploymentConfig
对象
不要在 Operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。
您可以通过在 YAML 文件中添加注解,定义工作负载是否使用配置映射中定义的默认实例大小进行部署。
如果您不想手动定义实例大小,您可以添加注解来使用自动实例大小,具体取决于可用内存。
先决条件
-
您已创建了
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。