3.3. 使用带有 CLI 的对等 pod 部署 OpenShift 沙盒容器工作负载
您可以使用 CLI 部署 OpenShift 沙盒容器工作负载。首先,您必须安装 OpenShift 沙盒容器 Operator,然后创建 KataConfig
自定义资源。在沙盒容器中部署工作负载后,您必须将 kata-remote-cc
作为 runtimeClassName
添加到工作负载 YAML 文件中。
3.3.1. 使用 CLI 安装 OpenShift 沙盒容器 Operator 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift CLI 安装 OpenShift 沙盒容器 Operator。
先决条件
- 在集群中安装了 Red Hat OpenShift 4.13。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 您已订阅了 OpenShift 沙盒容器目录。
注意订阅 OpenShift 沙盒容器目录为
openshift-sandboxed-containers-operator
命名空间提供了对 OpenShift 沙盒容器 Operator 的访问权限。
流程
为 OpenShift 沙盒容器 Operator 创建
Namespace
对象。创建一个包含以下清单的
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 创建
Namespace
对象:oc create -f Namespace.yaml
$ oc create -f Namespace.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为 OpenShift 沙盒容器 Operator 创建
OperatorGroup
对象。创建一个包含以下清单的
OperatorGroup
对象 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
OperatorGroup
对象:oc create -f OperatorGroup.yaml
$ oc create -f OperatorGroup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
Subscription
对象,以便为 OpenShift 沙盒容器 Operator 订阅命名空间
。创建一个包含以下内容的
Subscription
对象 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Subscription
对象:oc create -f Subscription.yaml
$ oc create -f Subscription.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift 沙盒容器 Operator 现已安装在集群中。
以上列出的所有对象文件名都是建议。您可以使用其他名称创建对象 YAML 文件。
验证
确保正确安装 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 输出示例
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.4.1 1.4.0 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.4.1 1.4.0 Succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.2. 使用 CLI 为 AWS 设置对等 pod 复制链接链接已复制到粘贴板!
要设置在 AWS 上使用的对等 pod,您必须创建一个 secret 对象、AWS 镜像虚拟机(AMI)和 peer-pod ConfigMap。
为 AWS 设置对等 pod 后,您仍必须创建 KataConfig
自定义资源(CR)来使用 peer pod 部署 OpenShift 沙盒容器。
先决条件
- 在集群中安装了 Red Hat OpenShift 4.13。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 OpenShift 沙盒容器 Operator。
3.3.2.1. 使用 CLI 为 AWS 创建 secret 对象 复制链接链接已复制到粘贴板!
设置 AWS 访问密钥并在 secret 对象中配置网络。secret 对象用于创建 pod 虚拟机镜像,并由对等 pod 使用。
为 AWS 创建 secret 对象时,您必须设置特定的环境值。在创建 secret 对象前,您可以检索其中的一些值。但是,您必须准备以下值:
-
AWS_ACCESS_KEY_ID
-
AWS_SECRET_ACCESS_KEY
流程
收集 secret 对象所需的参数值。确保记下每个值。
检索实例 ID:
INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
$ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow secret 对象本身不需要这个值,而是用于检索 secret 对象的其他值。
检索 AWS 区域:
AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 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_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\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 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_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\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 AWS 安全组 ID:
AWS_SG_IDS=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --region ${AWS_REGION} --output text)
$ 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\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下清单创建 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
secret 对象被应用。
3.3.2.2. 使用 CLI 创建 AWS 虚拟机镜像(AMI) 复制链接链接已复制到粘贴板!
要使用 AWS 上的对等 pod 运行 OpenShift 沙盒容器,您必须首先使用 AWS 帐户和资源创建一个 RHEL AMI。
流程
运行以下 K8s 作业以创建镜像:
oc apply -f https://raw.githubusercontent.com/openshift/sandboxed-containers-operator/peer-pods-tech-preview/hack/aws-image-job.yaml
$ oc apply -f https://raw.githubusercontent.com/openshift/sandboxed-containers-operator/peer-pods-tech-preview/hack/aws-image-job.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此镜像不由 OpenShift 沙盒容器管理。您可以使用 AWS Web 控制台或 AWS CLI 工具删除它。
等待作业完成:
oc wait --for=condition=complete job.batch/aws-image-creation --timeout=7m -n openshift-sandboxed-containers-operator
$ oc wait --for=condition=complete job.batch/aws-image-creation --timeout=7m -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建镜像后,您必须使用 peer-pod ConfigMap 设置镜像。
3.3.2.3. 使用 CLI 为 AWS 创建 peer-pod ConfigMap 复制链接链接已复制到粘贴板!
为 AWS 创建 ConfigMap 时,您必须设置 AMI ID。在创建 ConfigMap 前,您可以检索这个值。
流程
检索 AMI ID。确保保存该值以便稍后保存。
PODVM_AMI_ID=$(aws ec2 describe-images --query "Images[*].[ImageId]" --filters "Name=name,Values=peer-pod-ami" --region ${AWS_REGION} --output text) && echo "PODVM_AMI_ID: \"$PODVM_AMI_ID\""
$ PODVM_AMI_ID=$(aws ec2 describe-images --query "Images[*].[ImageId]" --filters "Name=name,Values=peer-pod-ami" --region ${AWS_REGION} --output text) && echo "PODVM_AMI_ID: \"$PODVM_AMI_ID\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下清单创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 输入您检索到的 AMI ID 值。
部署 ConfigMap:
oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ConfigMap 被部署。创建 KataConfig
CR 后,您可以使用 AWS 上的对等 pod 运行 OpenShift 沙盒容器。
3.3.3. 使用 CLI 为 Azure 设置对等 pod 复制链接链接已复制到粘贴板!
要设置在 Microsoft Azure 上使用的对等 pod,您必须创建一个 secret 对象、Azure 镜像虚拟机、peer-pod ConfigMap 和 SSH 密钥 secret 对象。
为 Azure 设置对等 pod 后,您仍必须创建 KataConfig
自定义资源(CR)来使用 peer pod 部署 OpenShift 沙盒容器。
先决条件
- 在集群中安装了 Red Hat OpenShift 4.13。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 OpenShift 沙盒容器 Operator。
3.3.3.1. 使用 CLI 为 Azure 创建 secret 对象 复制链接链接已复制到粘贴板!
设置 Azure 访问密钥并在 secret 对象中配置网络。secret 对象用于创建 pod 虚拟机镜像,并由对等 pod 使用。
为 Azure 创建 secret 对象时,您必须设置特定的环境值。在创建 secret 对象前,您可以检索其中的一些值。但是,您必须准备以下值:
-
AZURE_CLIENT_ID
-
AZURE_CLIENT_SECRET
-
AZURE_TENANT_ID
流程
为 secret 对象收集额外的参数值。确保记下每个值。
检索订阅 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 检索资源组:
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 区域:
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
使用以下清单创建 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
secret 对象被应用。
3.3.3.2. 使用 CLI 创建 Azure 虚拟机镜像 复制链接链接已复制到粘贴板!
要使用 Azure 上的对等 pod 运行 OpenShift 沙盒容器,您必须首先使用 Azure 帐户和资源为 Azure 创建 RHEL 镜像。
流程
运行以下 K8s 作业以创建镜像:
oc apply -f https://raw.githubusercontent.com/openshift/sandboxed-containers-operator/peer-pods-tech-preview/hack/azure-image-job.yaml
$ oc apply -f https://raw.githubusercontent.com/openshift/sandboxed-containers-operator/peer-pods-tech-preview/hack/azure-image-job.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此镜像不由 OpenShift 沙盒容器管理。如果需要,可以使用 Azure web 控制台或 Azure CLI 工具删除它。
等待作业完成:
oc wait --for=condition=complete job.batch/azure-image-creation --timeout=7m -n openshift-sandboxed-containers-operator
$ oc wait --for=condition=complete job.batch/azure-image-creation --timeout=7m -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建镜像后,您必须使用 peer-pod ConfigMap 设置镜像。
3.3.3.3. 使用 CLI 为 Azure 创建 peer-pod ConfigMap 复制链接链接已复制到粘贴板!
为 Azure 创建 ConfigMap 时,您必须设置特定的配置值。在创建 ConfigMap 前,您可以检索这些值。
流程
收集 Azure peer-pod ConfigMap 的配置值。确保记下每个值。
检索 Azure 镜像 ID:
AZURE_IMAGE_ID=$(az image list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id: id} | [? contains(Id, 'peer-pod-vmimage')]" --output tsv) && echo "AZURE_IMAGE_ID: \"$AZURE_IMAGE_ID\""
$ AZURE_IMAGE_ID=$(az image list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id: id} | [? contains(Id, 'peer-pod-vmimage')]" --output tsv) && echo "AZURE_IMAGE_ID: \"$AZURE_IMAGE_ID\""
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 ConfigMap 不需要这个值,但用于检索 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
使用以下清单创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 ConfigMap:
oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ConfigMap 被部署。
3.3.3.4. 使用 CLI 为 Azure 创建 SSH 密钥 secret 对象 复制链接链接已复制到粘贴板!
您必须生成 SSH 密钥并创建 SSH 密钥 secret 对象,以便在 Azure 中使用对等 pod。
流程
生成 SSH 密钥:
ssh-keygen -f ./id_rsa -N ""
$ ssh-keygen -f ./id_rsa -N ""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 SHH 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 密钥已创建,并且创建了 SSH 密钥 secret 对象。创建 KataConfig
CR 后,您可以使用 Azure 上的对等 pod 运行 OpenShift 沙盒容器。
3.3.4. 使用 CLI 创建 KataConfig 自定义资源 复制链接链接已复制到粘贴板!
您必须创建一个 KataConfig
自定义资源(CR),以便在节点上安装 kata-remote-cc
作为 RuntimeClass
。创建 KataConfig
CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:
-
在 RHCOS 节点上安装所需的 RHCOS 扩展,如 QEMU 和
kata-containers
。 - 确保 CRI-O 运行时配置了正确的运行时处理程序。
-
使用默认配置,创建一个名为
kata-remote-cc
的RuntimeClass
CR。这可让用户在RuntimeClassName
字段中引用 CR 将工作负载配置为使用kata-remote-cc
作为运行时。此 CR 也指定运行时的资源开销。
默认情况下,对等 pod 的 Kata 安装在所有 worker 节点上。如果要在特定节点上安装 kata-remote-cc
作为 RuntimeClass
,您可以在这些节点上添加标签,然后在创建时在 KataConfig
CR 中定义标签。
先决条件
- 在集群中安装了 Red Hat OpenShift 4.13。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 OpenShift 沙盒容器 Operator。
创建 KataConfig
CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。妨碍重启时间的因素如下:
- 带有更多 worker 节点的大型 Red Hat OpenShift 部署。
- 激活 BIOS 和 Diagnostics 实用程序。
- 在硬盘而不是 SSD 上部署。
- 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
- CPU 和网络较慢。
流程
使用以下清单创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)如果您要仅在所选节点上安装
kata-remote-cc
作为RuntimeClass
,请创建一个包含清单中的标签的 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
kataConfigPoolSelector
中的标签只支持单个值;不支持nodeSelector
语法。
创建
KataConfig
资源:oc create -f cluster-kataconfig.yaml
$ oc create -f cluster-kataconfig.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建新的 KataConfig
CR,并开始在 worker 节点上安装 kata-remote-cc
作为 RuntimeClass
。等待 kata-remote-cc
安装完成,以及 worker 节点重新引导,然后继续下一步。
OpenShift 沙盒容器仅将 kata-remote-cc
安装为集群上的辅助可选运行时,而不是主运行时。
验证
监控安装进度:
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 当 Is In Progress 的值显示为
false
后,安装就已完成。
3.3.5. 使用 CLI 在沙盒容器中部署对等 pod 的工作负载 复制链接链接已复制到粘贴板!
OpenShift 沙盒容器将 Kata 安装为集群上的辅助、可选运行时,而不是主运行时。
要使用沙盒容器中的对等 pod 部署 pod 模板工作负载,您必须将 kata-remote-cc
作为 runtimeClassName
添加到工作负载 YAML 文件中。
先决条件
- 在集群中安装了 Red Hat OpenShift 4.13。
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 OpenShift 沙盒容器 Operator。
- 您已创建了一个 secret 对象和 peer-pod 配置映射,对云供应商是唯一的。
-
您已创建了
KataConfig
自定义资源 (CR)。
流程
将
runtimeClassName: kata-remote-cc
添加到任何 pod 模板对象中:-
Pod
对象 -
ReplicaSet
对象 -
ReplicationController
对象 -
StatefulSet
对象 -
Deployment
对象 -
deploymentConfig
对象
-
Pod 对象示例
Red Hat OpenShift 创建工作负载并开始调度它。
验证
-
检查 pod 模板对象上的
runtimeClassName
字段。如果runtimeClassName
是kata-remote-cc
,则工作负载使用对等 pod 在 OpenShift 沙盒容器上运行。