第 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
值:
apiVersion: confidentialcontainers.org/v1alpha1
kind: PeerPodConfig
metadata:
name: peerpodconfig-openshift
namespace: openshift-sandboxed-containers-operator
spec:
cloudSecretName: peer-pods-secret
configMapName: peer-pods-cm
limit: "10" 1
nodeSelector:
node-role.kubernetes.io/kata-oc: ""
- 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')
检索 AWS 区域:
$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}')
检索安全组 ID,并将其存储在阵列中:
$ AWS_SG_IDS=($(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text --region $AWS_REGION))
对于每个安全组 ID,授权 peer pod shim 访问 kata-agent 通信,并设置对等 pod 隧道:
$ for AWS_SG_ID in "${AWS_SG_IDS[@]}"; do aws ec2 authorize-security-group-ingress --group-id $AWS_SG_ID --protocol tcp --port 15150 --source-group $AWS_SG_ID --region $AWS_REGION aws ec2 authorize-security-group-ingress --group-id $AWS_SG_ID --protocol tcp --port 9000 --source-group $AWS_SG_ID --region $AWS_REGION done
现在启用这些端口。
3.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
运行以下命令创建命名空间:
$ oc create -f Namespace.yaml
创建
OperatorGroup.yaml
清单文件:apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: openshift-sandboxed-containers-operator namespace: openshift-sandboxed-containers-operator spec: targetNamespaces: - openshift-sandboxed-containers-operator
运行以下命令来创建 operator 组:
$ oc create -f OperatorGroup.yaml
创建
Subscription.yaml
清单文件:apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: openshift-sandboxed-containers-operator namespace: openshift-sandboxed-containers-operator spec: channel: stable installPlanApproval: Automatic name: sandboxed-containers-operator source: redhat-operators sourceNamespace: openshift-marketplace startingCSV: sandboxed-containers-operator.v1.6.0
运行以下命令来创建订阅:
$ oc create -f Subscription.yaml
OpenShift 沙盒容器 Operator 现已安装在集群中。
验证
运行以下命令确保 Operator 已正确安装:
$ oc get csv -n openshift-sandboxed-containers-operator
输出示例
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 Succeeded
3.1.1.3.3. 其他资源
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 清单:
apiVersion: v1 kind: Secret metadata: name: peer-pods-secret namespace: openshift-sandboxed-containers-operator type: Opaque stringData: AWS_ACCESS_KEY_ID: "<aws_access_key>" 1 AWS_SECRET_ACCESS_KEY: "<aws_secret_access_key>" 2
- 点 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)"
重启守护进程集会重新创建对等 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')
这用于检索 secret 对象的其他值。
检索并记录 AWS 区域:
$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
检索并记录 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 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 安全组 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\""
-
在 OpenShift Container Platform web 控制台中导航至 Operators
Installed Operators。 - 从 Operator 列表中选择 OpenShift 沙盒容器 Operator。
- 单击右上角的 Import 图标 (+)。
在 Import YAML 窗口中,粘贴以下 YAML 清单:
apiVersion: v1 kind: ConfigMap metadata: name: peer-pods-cm namespace: openshift-sandboxed-containers-operator data: CLOUD_PROVIDER: "aws" VXLAN_PORT: "9000" PODVM_INSTANCE_TYPE: "t3.medium" 1 PODVM_INSTANCE_TYPES: "t2.small,t2.medium,t3.large" 2 PROXY_TIMEOUT: "5m" DISABLECVM: "true" PODVM_AMI_ID: "<podvm_ami_id>" 3 AWS_REGION: "<aws_region>" 4 AWS_SUBNET_ID: "<aws_subnet_id>" 5 AWS_VPC_ID: "<aws_vpc_id>" 6 AWS_SG_IDS: "<aws_sg_ids>" 7
点 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)"
重启 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。
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
。
详情请参阅 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 logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
如果您无法解决这个问题,请提交红帽支持问题单并附加这两个日志的输出。
3.1.2.4. 可选:修改每个节点的对等 pod 虚拟机数量
您可以通过编辑 peerpodConfig
自定义资源(CR)来更改每个节点对等 pod 虚拟机(VM)的限制。
流程
运行以下命令检查当前的限制:
$ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'
运行以下命令修改
peerpodConfig
CR 的limit
属性:$ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}' 1
- 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 模板工作负载对象的清单中,如下例所示:apiVersion: v1 kind: <object> # ... spec: runtimeClassName: kata-remote # ...
向 pod 模板对象添加注解,以使用手动定义的实例类型或自动实例类型:
要使用手动定义的实例类型,请添加以下注解:
apiVersion: v1 kind: <object> metadata: annotations: io.katacontainers.config.hypervisor.machine_type: t3.medium 1 # ...
- 1
- 指定配置映射中定义的实例类型。
要使用自动实例类型,请添加以下注解:
apiVersion: v1 kind: <Pod> metadata: annotations: io.katacontainers.config.hypervisor.default_vcpus: <vcpus> io.katacontainers.config.hypervisor.default_memory: <memory> # ...
定义可供工作负载使用的内存量。工作负载将根据可用内存量在自动实例类型上运行。
点 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
清单文件:apiVersion: v1 kind: Secret metadata: name: peer-pods-secret namespace: openshift-sandboxed-containers-operator type: Opaque stringData: AWS_ACCESS_KEY_ID: "<aws_access_key>" 1 AWS_SECRET_ACCESS_KEY: "<aws_secret_access_key>" 2
通过应用清单来创建
secret
对象:$ oc apply -f peer-pods-secret.yaml
如果更新 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)"
重启守护进程集会重新创建对等 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')
这用于检索 secret 对象的其他值。
检索并记录 AWS 区域:
$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
检索并记录 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 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 安全组 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\""
根据以下示例创建
peer-pods-cm.yaml
清单:apiVersion: v1 kind: ConfigMap metadata: name: peer-pods-cm namespace: openshift-sandboxed-containers-operator data: CLOUD_PROVIDER: "aws" VXLAN_PORT: "9000" PODVM_INSTANCE_TYPE: "t3.medium" 1 PODVM_INSTANCE_TYPES: "t2.small,t2.medium,t3.large" 2 PROXY_TIMEOUT: "5m" DISABLECVM: "true" PODVM_AMI_ID: "<podvm_ami_id>" 3 AWS_REGION: "<aws_region>" 4 AWS_SUBNET_ID: "<aws_subnet_id>" 5 AWS_VPC_ID: "<aws_vpc_id>" 6 AWS_SG_IDS: "<aws_sg_ids>" 7
应用清单以创建配置映射:
$ oc apply -f peer-pods-cm.yaml
为您的云供应商创建一个配置映射。
如果更新 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)"
重启 daemonset 会重新创建对等 pod。它不会更新现有的 pod。
3.1.3.3. 创建 KataConfig 自定义资源
您必须创建一个 KataConfig
自定义资源(CR)来作为 worker 节点上的运行时类安装 kata-remote
。
创建 KataConfig
CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:
-
使用默认配置创建一个名为
kata-remote
的RuntimeClass
CR。这可让用户在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
清单文件:apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: cluster-kataconfig spec: enablePeerPods: true logLevel: info
可选: 要在所选节点上安装
kata-remote
,请根据以下示例指定节点标签:apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: cluster-kataconfig spec: kataConfigPoolSelector: matchLabels: <label_key>: '<label_value>' 1 # ...
- 1
- 指定所选节点的标签。
创建
KataConfig
CR:$ oc create -f cluster-kataconfig.yaml
新的
KataConfig
CR 被创建,并在 worker 节点上作为运行时类安装kata-remote
。在验证安装前,等待
kata-remote
安装完成,以及 worker 节点重新引导。
验证
运行以下命令监控安装进度:
$ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
安装
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
检查 YAML 文件
的状态
小节。如果
PODVM_AMI_ID
参数被填充,则 pod 虚拟机镜像已创建成功。
故障排除
运行以下命令来检索事件日志:
$ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
运行以下命令来检索作业日志:
$ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
如果您无法解决这个问题,请提交红帽支持问题单并附加这两个日志的输出。
3.1.3.4. 可选:修改每个节点的对等 pod 虚拟机数量
您可以通过编辑 peerpodConfig
自定义资源(CR)来更改每个节点对等 pod 虚拟机(VM)的限制。
流程
运行以下命令检查当前的限制:
$ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'
运行以下命令修改
peerpodConfig
CR 的limit
属性:$ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}' 1
- 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 模板工作负载对象的清单中,如下例所示:apiVersion: v1 kind: <object> # ... spec: runtimeClassName: kata-remote # ...
向 pod 模板对象添加注解,以使用手动定义的实例类型或自动实例类型:
要使用手动定义的实例类型,请添加以下注解:
apiVersion: v1 kind: <object> metadata: annotations: io.katacontainers.config.hypervisor.machine_type: t3.medium 1 # ...
- 1
- 指定配置映射中定义的实例类型。
要使用自动实例类型,请添加以下注解:
apiVersion: v1 kind: <Pod> metadata: annotations: io.katacontainers.config.hypervisor.default_vcpus: <vcpus> io.katacontainers.config.hypervisor.default_memory: <memory> # ...
定义可供工作负载使用的内存量。工作负载将根据可用内存量在自动实例类型上运行。
运行以下命令,将更改应用到工作负载对象:
$ oc apply -f <object.yaml>
OpenShift Container Platform 创建工作负载对象并开始调度它。
验证
-
检查 pod 模板对象的
spec.runtimeClassName
字段。如果值为kata-remote
,则工作负载在 OpenShift 沙盒容器上运行,使用对等 pod。