6.2. 在 IBM Z 和 IBM LinuxONE 上部署 OpenShift 沙盒容器
您可以使用命令行界面(CLI)在 IBM Z® 和 IBM® LinuxONE 上部署 OpenShift 沙盒容器来执行以下任务:
- 安装 OpenShift 沙盒容器 Operator。
- 可选:更改每个 worker 节点上运行的虚拟机数量。
- 配置 libvirt 卷。
- 可选:创建自定义对等 pod 虚拟机镜像。
- 创建对等 pod secret。
- 创建对等 pod 配置映射。
- 创建对等 pod 虚拟机镜像配置映射。
- 创建 KVM 主机 secret。
-
创建
KataConfig
自定义资源。 - 配置 OpenShift 沙盒容器工作负载对象。
6.2.1. 安装 OpenShift 沙盒容器 Operator
您可以使用 CLI 安装 OpenShift 沙盒容器 Operator。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
创建
osc-namespace.yaml
清单文件:apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
运行以下命令创建命名空间:
$ oc apply -f osc-namespace.yaml
创建
osc-operatorgroup.yaml
清单文件:apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: sandboxed-containers-operator-group namespace: openshift-sandboxed-containers-operator spec: targetNamespaces: - openshift-sandboxed-containers-operator
运行以下命令来创建 operator 组:
$ oc apply -f osc-operatorgroup.yaml
创建
osc-subscription.yaml
清单文件:apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: 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.8.1
运行以下命令来创建订阅:
$ oc apply -f osc-subscription.yaml
运行以下命令验证 Operator 是否已正确安装:
$ oc get csv -n openshift-sandboxed-containers-operator
此命令可能需要几分钟来完成。
运行以下命令监控进程:
$ watch oc get csv -n openshift-sandboxed-containers-operator
输出示例
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.8.1 1.7.0 Succeeded
6.2.2. 修改每个节点的对等 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> 替换为您要定义的限制。
6.2.3. 配置 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>
您需要
LIBVIRT_POOL
值来为 libvirt 提供程序创建 secret。运行以下命令设置 libvirt 池的名称:
$ export LIBVIRT_VOL_NAME=<libvirt_volume>
您需要
LIBVIRT_VOL_NAME
值来为 libvirt 提供程序创建 secret。运行以下命令,设置默认存储池位置的路径:
$ export LIBVIRT_POOL_DIRECTORY=<target_directory> 1
- 1
- 为确保 libvirt 具有读写访问权限,请使用 libvirt 存储目录的子目录。默认为
/var/lib/libvirt/images/
。
运行以下命令来创建 libvirt 池:
$ virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
运行以下命令来启动 libvirt 池:
$ virsh pool-start $LIBVIRT_POOL
运行以下命令,为池创建 libvirt 卷:
$ virsh -c qemu:///system \ vol-create-as --pool $LIBVIRT_POOL \ --name $LIBVIRT_VOL_NAME \ --capacity 20G \ --allocation 2G \ --prealloc-metadata \ --format qcow2
6.2.4. 创建自定义对等 pod 虚拟机镜像
您可以创建自定义对等 pod 虚拟机(VM)镜像,而不是使用默认的 Operator 构建镜像。
您可以使用对等 pod QCOW2 镜像构建开放容器项目(OCI)容器。之后,您将容器 registry URL 和镜像路径添加到对等 pod 虚拟机镜像配置映射。
流程
创建
Dockerfile.podvm-oci
文件:FROM scratch ARG PODVM_IMAGE_SRC ENV PODVM_IMAGE_PATH="/image/podvm.qcow2" COPY $PODVM_IMAGE_SRC $PODVM_IMAGE_PATH
运行以下命令,使用 pod 虚拟机 QCOW2 镜像构建容器:
$ docker build -t podvm-libvirt \ --build-arg PODVM_IMAGE_SRC=<podvm_image_source> \ 1 --build-arg PODVM_IMAGE_PATH=<podvm_image_path> \ 2 -f Dockerfile.podvm-oci .
6.2.5. 创建对等 pod secret
您必须为 OpenShift 沙盒容器创建对等 pod secret。
secret 存储用于创建 pod 虚拟机(VM)镜像和对等 pod 实例的凭证。
默认情况下,OpenShift 沙盒容器 Operator 根据用于创建集群的凭证创建 secret。但是,您可以手动创建使用不同的凭证的 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}') $ LIBVIRT_GATEWAY_URI="qemu+ssh://root@${LIBVIRT_URI}/system?no_verify=1"
-
REDHAT_OFFLINE_TOKEN
.您已生成此令牌,以通过 Red Hat API Tokens 下载 RHEL 镜像。
流程
根据以下示例创建
peer-pods-secret.yaml
清单文件:apiVersion: v1 kind: Secret metadata: name: peer-pods-secret namespace: openshift-sandboxed-containers-operator type: Opaque stringData: CLOUD_PROVIDER: "libvirt" LIBVIRT_URI: "<libvirt_gateway_uri>" 1 LIBVIRT_POOL: "<libvirt_pool>" 2 LIBVIRT_VOL_NAME: "<libvirt_volume>" 3 REDHAT_OFFLINE_TOKEN: "<rh_offline_token>" 4
运行以下命令来创建 secret:
$ oc apply -f peer-pods-secret.yaml
6.2.6. 创建对等 pod 配置映射
您必须为 OpenShift 沙盒容器创建对等 pod 配置映射。
流程
根据以下示例创建
peer-pods-cm.yaml
清单文件:apiVersion: v1 kind: ConfigMap metadata: name: peer-pods-cm namespace: openshift-sandboxed-containers-operator data: CLOUD_PROVIDER: "libvirt" DISABLECVM: "true"
运行以下命令来创建配置映射:
$ oc apply -f peer-pods-cm.yaml
6.2.7. 创建对等 pod 虚拟机镜像配置映射
您必须为对等 pod 虚拟机镜像创建配置映射。
流程
根据以下示例创建
libvirt-podvm-image-cm.yaml
清单:apiVersion: v1 kind: ConfigMap metadata: name: libvirt-podvm-image-cm namespace: openshift-sandboxed-containers-operator data: PODVM_DISTRO: "rhel" CAA_SRC: "https://github.com/confidential-containers/cloud-api-adaptor" CAA_REF: "<cloud_api_adaptor_version>" 1 DOWNLOAD_SOURCES: "no" CONFIDENTIAL_COMPUTE_ENABLED: "yes" UPDATE_PEERPODS_CM: "yes" ORG_ID: "<rhel_organization_id>" ACTIVATION_KEY: "<rhel_activation_key>" 2 IMAGE_NAME: "<podvm_libvirt_image>" PODVM_IMAGE_URI: "oci::<image_repo_url>:<image_tag>::<image_path>" 3 SE_BOOT: "true" 4 BASE_OS_VERSION: "<rhel_image_os_version>" 5
运行以下命令来创建配置映射:
$ oc apply -f libvirt-podvm-image-cm.yaml
libvirt pod 虚拟机镜像配置映射为您的 libvirt 供应商创建。
6.2.8. 创建 KVM 主机 secret
您必须为 KVM 主机创建 secret。
流程
运行以下命令来生成 SSH 密钥对:
$ ssh-keygen -f ./id_rsa -N ""
将公共 SSH 密钥复制到 KVM 主机:
$ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>
运行以下命令来创建
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
删除您创建的 SSH 密钥:
$ shred --remove id_rsa.pub id_rsa
6.2.9. 创建 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
角色的用户访问集群。
流程
根据以下示例创建
example-kataconfig.yaml
清单文件:apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: example-kataconfig spec: enablePeerPods: true logLevel: info # kataConfigPoolSelector: # matchLabels: # <label_key>: '<label_value>' 1
- 1
- 可选:如果您应用了节点标签在特定节点上安装
kata-remote
,请指定键和值,例如osc: 'true'
。
运行以下命令来创建
KataConfig
CR:$ oc apply -f example-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
。运行以下命令,验证您是否已构建对等 pod 镜像并将其上传到 libvirt 卷中:
$ oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator
输出示例
Name: peer-pods-cm Namespace: openshift-sandboxed-containers-operator Labels: <none> Annotations: <none> Data ==== CLOUD_PROVIDER: libvirt BinaryData ==== Events: <none>
运行以下命令,监控
kata-oc
机器配置池进度,以确保它处于UPDATED
状态,当UPDATED
等于 MACHINECOUNT 时:MACHINECOUNT
$ watch oc get mcp/kata-oc
运行以下命令验证守护进程集:
$ oc get -n openshift-sandboxed-containers-operator ds/peerpodconfig-ctrl-caa-daemon
运行以下命令验证运行时类:
$ oc get runtimeclass
输出示例
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152m
6.2.10. 配置工作负载对象
您必须通过将 kata-remote
设置为以下 pod 模板对象的运行时类来配置 OpenShift 沙盒容器工作负载对象:
-
Pod
对象 -
ReplicaSet
对象 -
ReplicationController
对象 -
StatefulSet
对象 -
Deployment
对象 -
deploymentConfig
对象
不要在 Operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。
先决条件
-
您已创建了
KataConfig
自定义资源(CR)。
流程
将
spec.runtimeClassName: kata-remote
添加到每个 pod 模板工作负载对象的清单中,如下例所示:apiVersion: v1 kind: <object> # ... spec: runtimeClassName: kata-remote # ...
OpenShift Container Platform 创建工作负载对象并开始调度它。
验证
-
检查 pod 模板对象的
spec.runtimeClassName
字段。如果值为kata-remote
,则工作负载在 OpenShift 沙盒容器上运行,使用对等 pod。