专业编程基础技术教程

网站首页 > 基础教程 正文

基于 Kubernetes 的自动驾驶仿真云平台系统架构

ccvgpt 2025-06-23 15:20:36 基础教程 4 ℃

摘要

随着自动驾驶技术的快速发展,仿真测试成为验证自动驾驶算法安全性和可靠性的重要手段。本文介绍了一种基于 Kubernetes(K8s)的自动驾驶仿真云平台系统架构,旨在通过高效的资源管理和灵活的任务调度,实现自动驾驶场景的快速仿真和结果分析。该平台包括基于 Kind 搭建的本地 Kubernetes 集群、顶层的 Web UI、中间层的常驻服务以及底层的仿真任务执行服务,通过各层之间的紧密协作,实现从任务下发到结果展示的全流程自动化。

1. 引言

自动驾驶技术的复杂性和高风险性要求在实际道路测试之前进行大量的仿真测试。传统的仿真测试方法存在资源利用率低、任务调度不灵活等问题。Kubernetes 作为一种强大的容器编排工具,能够有效解决这些问题。本文提出的仿真云平台利用 Kubernetes 的优势,构建了一个高效、灵活且可扩展的自动驾驶仿真环境。

基于 Kubernetes 的自动驾驶仿真云平台系统架构

2. 基于 Kind 搭建本地 Kubernetes 集群

2.1 Kind 工具介绍

Kind(Kubernetes in Docker)是一个用于在本地开发环境中快速搭建 Kubernetes 集群的工具。它通过在 Docker 容器内运行 Kubernetes 节点,使得开发者可以在本地机器上模拟一个完整的 Kubernetes 环境。Kind 支持多种配置选项,包括多节点集群、自定义镜像等,非常适合用于开发和测试 Kubernetes 应用。缺点是不能模拟跨机集群。

2.2 搭建过程

搭建本地 Kubernetes 集群的步骤如下:

1. 安装 Docker:Kind 依赖于 Docker,因此需要先安装 Docker。

sudo apt-get update
sudo apt-get install -y docker.io

2. 安装 Kind:通过 curl 下载并安装 Kind。

curl -s https://api.github.com/repos/kubernetes-sigs/kind/releases/latest | grep browser_download_url | grep kind-linux | cut -d '"' -f 4 | xargs curl -Lo kind
chmod +x kind
sudo mv kind /usr/local/bin/

3. 创建 Kubernetes 集群:使用 Kind 创建一个名为 my-cluster 的集群。

kind create cluster --name my-cluster

4. 配置 kubectl:将 kubectl 的上下文设置为新创建的集群。

kubectl config use-context kind-my-cluster

5. 验证集群状态:检查集群节点和 Pod 的状态。

kubectl get nodes
kubectl get pods -A

2.3 k8s 常用指令

# Pod操作
# 删除指定Pod
kubectl delete pod $(kubectl get pods --no-headers -o custom-columns=":metadata.name" | grep '^worker-pod-task-')

# 查看Pod日志
kubectl logs -n default task-producer-6bc69485cb-dkc78

# 进入Pod内部执行命令
kubectl exec -it worker-job-b51d4081-qhfqp -n your-namespace -- /bin/sh


# Deployment操作
# 增加副本数量
kubectl scale deployment redis --replicas=1
kubectl scale deployment task-producer --replicas=1
kubectl scale deployment task-scheduler --replicas=1

# 减少副本数量
kubectl scale deployment redis --replicas=0
kubectl scale deployment task-producer --replicas=0
kubectl scale deployment task-scheduler --replicas=0

# 删除Pod(与Deployment相关)
kubectl delete pod -n default test-worker-pod


# 镜像加载
kind load docker-image worker-image:latest --name my-cluster
kind load docker-image task-worker:latest --name my-cluster


# 资源应用与删除
# 应用资源定义文件
kubectl apply -f worker-pod.yaml

# 删除资源
kubectl delete pod -n default test-worker-pod

2.4 生产者消费者集群案例

为了验证集群的功能,实现一个简单的生产者消费者集群案例,使用 Redis 作为任务队列和通讯中间件,基于 Python 实现生产者、任务调度和任务消费。

-- 2.4.1 架构设计

● Redis 服务:作为任务队列和通讯中间件,常驻服务。

● 生产者服务:基于 Python 实现,负责生成任务并将其发送到 Redis 队列。

● 任务调度服务:基于 Python 实现,负责从 Redis 队列中获取任务并调度任务消费服务。

● 任务消费服务:基于 Python 实现,负责执行具体的仿真任务,完成后自动销毁。

-- 2.4.2 镜像构建与加载

构建生产者和任务消费服务的 Docker 镜像,并将它们加载到 Kind 集群中。

# 构建镜像
docker build -t task-worker:latest . -f Dockerfile
docker build -t worker-image:latest -f worker.Dockerfile
# 加载镜像到 Kind 集群
kind load docker-image worker-image:latest --name my-cluster
kind load docker-image task-worker:latest --name my-cluster

-- 2.4.3 部署与运行

将 Redis、生产者、任务调度和任务消费服务的 Kubernetes 配置文件应用到集群中,并启动相应的服务。

-- 2.4.4 总结

--1 kind 集群的镜像需要从宿主机导入

--2 这里的Redis充当了任务队列和消息中间件的作用

--3 k8s 是可以通过yaml文件设定每个pod的资源的,同时也能设定每个命名空间的资源,这样就能对pod资源做分配和管理

--4 pod 在任务结束后也就是进程结束后就会重启,job 在任务结束后会销毁,仿真中我们通常常驻的服务用pod,仿真任务用job,结束后就销毁掉

3. 仿真云平台架构

基于 Kubernetes 构建的自动驾驶仿真云平台包括顶层的 Web UI、中间层的常驻服务和底层的仿真任务执行服务。

3.1 顶层:Web UI

Web UI 提供了场景编辑、任务下发、跑法设定、结果展示等功能。用户可以通过 Web UI 编辑仿真场景,下发仿真任务,并查看仿真结果。

3.2 中间层:常驻服务

中间层包括多个常驻服务,如场景编辑器后台服务、可视化后台服务、场景挖掘后台服务、自动化测试后台服务和任务编排后台服务。其中,任务编排服务尤为重要,它负责接收前端下发的任务,并启动仿真任务。

3.3 底层:仿真任务执行服务

仿真任务在特定的仿真容器内执行,包括仿真和评测。仿真过程的信息会实时写入数据库,前端通过获取数据库信息来展示仿真进度。仿真任务完成后,任务对应的 Pod 会自动销毁,仿真结果会上传到对象存储服务(OSS),并存储到数据库中。

4. 系统工作流程

1. 用户通过 Web UI 编辑仿真场景并下发任务、编辑场景、触发流水线。

2. 任务编排服务接收任务,发起仿真任务。

3. 数据准备服务将算法包提供给仿真服务。

4. 仿真服务执行仿真任务,将仿真过程信息写入数据库。

5. Web UI 从数据库获取仿真进度信息并展示给用户。

6. 仿真任务完成后,任务结果上传到 OSS,并存储到数据库中。

7. Web UI 展示仿真结果。

Tags:

最近发表
标签列表