4.3. 使用命令行部署 OpenShift 沙盒容器
您可以使用命令行界面(CLI)在 Azure 上部署 OpenShift 沙盒容器,以执行以下任务:
- 安装 OpenShift 沙盒容器 Operator。
- 可选:更改每个 worker 节点上运行的虚拟机数量。
- 创建对等 pod secret。
- 创建对等 pod 配置映射。
- 创建 Azure secret。
-
创建
KataConfig
自定义资源。 - 配置 OpenShift 沙盒容器工作负载对象。
4.3.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
4.3.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> 替换为您要定义的限制。
4.3.3. 创建对等 pod secret
您必须为 OpenShift 沙盒容器创建对等 pod secret。
secret 存储用于创建 pod 虚拟机(VM)镜像和对等 pod 实例的凭证。
默认情况下,OpenShift 沙盒容器 Operator 根据用于创建集群的凭证创建 secret。但是,您可以手动创建使用不同的凭证的 secret。
先决条件
- 已安装并配置了 Azure CLI 工具。
流程
运行以下命令来检索 Azure 订阅 ID:
$ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" \ -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
运行以下命令来生成 RBAC 内容:
$ az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID \ --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"
输出示例
{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }
-
记录要在
secret
对象中使用的 RBAC 输出。 根据以下示例创建
peer-pods-secret.yaml
清单文件:apiVersion: v1 kind: Secret metadata: name: peer-pods-secret namespace: openshift-sandboxed-containers-operator type: Opaque stringData: AZURE_CLIENT_ID: "<azure_client_id>" 1 AZURE_CLIENT_SECRET: "<azure_client_secret>" 2 AZURE_TENANT_ID: "<azure_tenant_id>" 3 AZURE_SUBSCRIPTION_ID: "<azure_subscription_id>" 4
运行以下命令来创建 secret:
$ oc apply -f peer-pods-secret.yaml
4.3.4. 创建对等 pod 配置映射
您必须为 OpenShift 沙盒容器创建对等 pod 配置映射。
流程
从 Azure 实例获取以下值:
检索并记录 Azure 资源组:
$ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""
检索并记录 Azure VNet 名称:
$ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)
这个值用于检索 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 网络安全组(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 区域:
$ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""
根据以下示例创建
peer-pods-cm.yaml
清单文件:apiVersion: v1 kind: ConfigMap metadata: name: peer-pods-cm namespace: openshift-sandboxed-containers-operator data: CLOUD_PROVIDER: "azure" VXLAN_PORT: "9000" AZURE_INSTANCE_SIZE: "Standard_B2als_v2" 1 AZURE_INSTANCE_SIZES: "Standard_B2als_v2,Standard_D2as_v5,Standard_D4as_v5,Standard_D2ads_v5" 2 AZURE_SUBNET_ID: "<azure_subnet_id>" 3 AZURE_NSG_ID: "<azure_nsg_id>" 4 PROXY_TIMEOUT: "5m" AZURE_IMAGE_ID: "<azure_image_id>" 5 AZURE_REGION: "<azure_region>" 6 AZURE_RESOURCE_GROUP: "<azure_resource_group>" 7 DISABLECVM: "true"
运行以下命令来创建配置映射:
$ oc apply -f peer-pods-cm.yaml
4.3.5. 创建 Azure secret
您必须创建 SSH 密钥 secret,这是 Azure 虚拟机(VM)创建 API 所需的。Azure 只需要 SSH 公钥。机密容器会禁用虚拟机中的 SSH,因此这些密钥对虚拟机没有影响。
流程
运行以下命令来生成 SSH 密钥对:
$ ssh-keygen -f ./id_rsa -N ""
运行以下命令来创建
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
4.3.6. 创建 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
。运行以下命令验证守护进程集:
$ 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
验证 pod 虚拟机镜像
在集群中安装 kata-remote
后,OpenShift 沙盒容器 Operator 会创建一个 pod 虚拟机镜像,用于创建对等 pod。此过程可能需要很长时间,因为镜像是在云实例上创建的。您可以通过检查您为云供应商创建的配置映射来验证 pod 虚拟机镜像是否已成功创建。
流程
获取您为对等 pod 创建的配置映射:
$ oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yaml
检查 YAML 文件
的状态
小节。如果
AZURE_IMAGE_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
如果您无法解决这个问题,请提交红帽支持问题单并附加这两个日志的输出。
4.3.7. 配置工作负载对象
您必须通过将 kata-remote
设置为以下 pod 模板对象的运行时类来配置 OpenShift 沙盒容器工作负载对象:
-
Pod
对象 -
ReplicaSet
对象 -
ReplicationController
对象 -
StatefulSet
对象 -
Deployment
对象 -
deploymentConfig
对象
不要在 Operator 命名空间中部署工作负载。为这些资源创建一个专用命名空间。
您可以通过在 YAML 文件中添加注解,定义工作负载是否使用配置映射中定义的默认实例大小进行部署。
如果您不想手动定义实例大小,您可以添加注解来使用自动实例大小,具体取决于可用内存。
先决条件
-
您已创建了
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: "Standard_B2als_v2" 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。