3.2. 使用 Web 控制台部署 OpenShift 沙盒容器
您可以使用 OpenShift Container Platform Web 控制台在 AWS 上部署 OpenShift 沙盒容器以执行以下任务:
- 安装 OpenShift 沙盒容器 Operator。
- 启用端口 15150 和 9000,以允许内部与对等 pod 通信。
- 创建对等 pod secret。
- 创建对等 pod 配置映射。
-
创建
KataConfig
自定义资源。 - 配置 OpenShift 沙盒容器工作负载对象。
3.2.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。
3.2.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.2.3. 创建对等 pod secret
您必须为 OpenShift 沙盒容器创建对等 pod secret。
secret 存储用于创建 pod 虚拟机(VM)镜像和对等 pod 实例的凭证。
默认情况下,OpenShift 沙盒容器 Operator 根据用于创建集群的凭证创建 secret。但是,您可以手动创建使用不同的凭证的 secret。
先决条件
您有使用 AWS 控制台生成的以下值:
-
AWS_ACCESS_KEY_ID
-
AWS_SECRET_ACCESS_KEY
-
流程
-
在 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 应用更改。
-
导航到 Workloads
Secrets 以验证对等 pod secret。
3.2.4. 创建对等 pod 配置映射
您必须为 OpenShift 沙盒容器创建对等 pod 配置映射。
先决条件
- 如果没有根据集群凭证使用默认 AMI ID,则具有 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 json | jq -r '.[][][]' | paste -sd ",") && 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" PODVM_AMI_ID: "<podvm_ami_id>" 3 AWS_REGION: "<aws_region>" 4 AWS_SUBNET_ID: "<aws_subnet_id>" 5 AWS_VPC_ID: "<aws_vpc_id>" 6 AWS_SG_IDS: "<aws_sg_ids>" 7 DISABLECVM: "true"
- 点 Save 应用更改。
-
导航到 Workloads
ConfigMaps 以查看新的配置映射。
3.2.5. 创建 KataConfig 自定义资源
您必须创建 KataConfig
自定义资源(CR),以便在 worker 节点上作为 RuntimeClass
安装 kata-remote
。
kata-remote
运行时类默认安装在所有 worker 节点上。如果要在特定节点上安装 kata-remote
,您可以向这些节点添加标签,然后在 KataConfig
CR 中定义该标签。
OpenShift 沙盒容器将 kata-remote
安装为集群上的 辅助 可选运行时,而不是主运行时。
创建 KataConfig
CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。以下因素可能会增加重启时间:
- 带有更多 worker 节点的大型 OpenShift Container Platform 部署。
- 激活 BIOS 和 Diagnostics 实用程序。
- 在硬盘而不是 SSD 上部署。
- 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
- CPU 和网络较慢。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 - 可选:如果要启用节点资格检查,已安装了 Node Feature Discovery Operator。
流程
-
在 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 文件
的状态
小节。如果
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.2.6. 配置工作负载对象
您必须通过将 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 模板工作负载对象的清单中,如下例所示: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。