3.3. 使用命令行部署 OpenShift 沙盒容器
您可以使用命令行界面(CLI)在 AWS 上部署 OpenShift 沙盒容器,以执行以下任务:
- 安装 OpenShift 沙盒容器 Operator。
- 可选:更改每个 worker 节点上运行的虚拟机数量。
- 启用端口 15150 和 9000,以允许内部与对等 pod 通信。
- 创建对等 pod secret。
- 创建对等 pod 配置映射。
-
创建
KataConfig自定义资源。 - 配置 OpenShift 沙盒容器工作负载对象。
3.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
3.3.2. 修改每个节点的对等 pod 虚拟机数量 复制链接链接已复制到粘贴板!
您可以通过编辑 peerpodConfig 自定义资源(CR)来更改每个节点对等 pod 虚拟机(VM)的限制。
流程
运行以下命令检查当前的限制:
$ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'运行以下命令修改
peerpodConfigCR 的limit属性:$ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'1 - 1
- 将 <value> 替换为您要定义的限制。
3.3.3. 为 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.3.4. 创建对等 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。
先决条件
您有使用 AWS 控制台生成的以下值:
-
AWS_ACCESS_KEY_ID -
AWS_SECRET_ACCESS_KEY
-
流程
根据以下示例创建
peer-pods-secret.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 运行以下命令来创建 secret:
$ oc apply -f peer-pods-secret.yaml
3.3.5. 创建对等 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\""
根据以下示例创建
peer-pods-cm.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"运行以下命令来创建配置映射:
$ oc apply -f peer-pods-cm.yaml
3.3.6. 创建 KataConfig 自定义资源 复制链接链接已复制到粘贴板!
您必须创建 KataConfig 自定义资源(CR)来作为 worker 节点上的运行时类安装 kata-remote。
创建 KataConfig CR 会触发 OpenShift 沙盒容器 Operator 来执行以下操作:
-
使用默认配置创建一个名为
kata-remote的RuntimeClassCR。这可让用户在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'。
运行以下命令来创建
KataConfigCR:$ oc apply -f example-kataconfig.yaml新的
KataConfigCR 被创建,并在 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 文件
的状态小节。如果
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.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: "t3.medium"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。