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
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令创建命名空间:
oc apply -f osc-namespace.yaml
$ oc apply -f osc-namespace.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
osc-operatorgroup.yaml
清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 operator 组:
oc apply -f osc-operatorgroup.yaml
$ oc apply -f osc-operatorgroup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
osc-subscription.yaml
清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建订阅:
oc apply -f osc-subscription.yaml
$ oc apply -f osc-subscription.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 Operator 是否已正确安装:
oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令可能需要几分钟来完成。
运行以下命令监控进程:
watch oc get csv -n openshift-sandboxed-containers-operator
$ watch oc get csv -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.8.1 1.7.0 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.8.1 1.7.0 Succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.2. 修改每个节点的对等 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 运行以下命令修改
peerpodConfig
CR 的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> 替换为您要定义的限制。
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>
$ 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_POOL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为池创建 libvirt 卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.4. 创建自定义对等 pod 虚拟机镜像 复制链接链接已复制到粘贴板!
您可以创建自定义对等 pod 虚拟机(VM)镜像,而不是使用默认的 Operator 构建镜像。
您可以使用对等 pod QCOW2 镜像构建开放容器项目(OCI)容器。之后,您将容器 registry URL 和镜像路径添加到对等 pod 虚拟机镜像配置映射。
流程
创建
Dockerfile.podvm-oci
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用 pod 虚拟机 QCOW2 镜像构建容器:
docker build -t podvm-libvirt \ --build-arg PODVM_IMAGE_SRC=<podvm_image_source> \ --build-arg PODVM_IMAGE_PATH=<podvm_image_path> \ -f Dockerfile.podvm-oci .
$ 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 .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.5. 创建对等 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。
先决条件
-
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"
$ 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"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
REDHAT_OFFLINE_TOKEN
.您已生成此令牌,以通过 Red Hat API Tokens 下载 RHEL 镜像。
流程
根据以下示例创建
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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.6. 创建对等 pod 配置映射 复制链接链接已复制到粘贴板!
您必须为 OpenShift 沙盒容器创建对等 pod 配置映射。
流程
根据以下示例创建
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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.7. 创建对等 pod 虚拟机镜像配置映射 复制链接链接已复制到粘贴板!
您必须为对等 pod 虚拟机镜像创建配置映射。
流程
根据以下示例创建
libvirt-podvm-image-cm.yaml
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建配置映射:
oc apply -f libvirt-podvm-image-cm.yaml
$ oc apply -f libvirt-podvm-image-cm.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow libvirt pod 虚拟机镜像配置映射为您的 libvirt 供应商创建。
6.2.8. 创建 KVM 主机 secret 复制链接链接已复制到粘贴板!
您必须为 KVM 主机创建 secret。
流程
运行以下命令来生成 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_rsa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除您创建的 SSH 密钥:
shred --remove id_rsa.pub id_rsa
$ shred --remove id_rsa.pub id_rsa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 可选:如果您应用了节点标签在特定节点上安装
kata-remote
,请指定键和值,例如osc: 'true'
。
运行以下命令来创建
KataConfig
CR:oc apply -f example-kataconfig.yaml
$ oc apply -f example-kataconfig.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新的
KataConfig
CR 被创建,并在 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
。运行以下命令,验证您是否已构建对等 pod 镜像并将其上传到 libvirt 卷中:
oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator
$ oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,监控
kata-oc
机器配置池进度,以确保它处于UPDATED
状态,当UPDATED
等于 MACHINECOUNT 时:MACHINECOUNT
watch oc get mcp/kata-oc
$ watch oc get mcp/kata-oc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证守护进程集:
oc get -n openshift-sandboxed-containers-operator ds/peerpodconfig-ctrl-caa-daemon
$ oc get -n openshift-sandboxed-containers-operator ds/peerpodconfig-ctrl-caa-daemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证运行时类:
oc get runtimeclass
$ oc get runtimeclass
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152m
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.10. 配置工作负载对象 复制链接链接已复制到粘贴板!
您必须通过将 kata-remote
设置为以下 pod 模板对象的运行时类来配置 OpenShift 沙盒容器工作负载对象:
-
Pod
对象 -
ReplicaSet
对象 -
ReplicationController
对象 -
StatefulSet
对象 -
Deployment
对象 -
deploymentConfig
对象
不要在 Operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。
先决条件
-
您已创建了
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。