2025-2026学年广东省职业院校学生专业技能大赛云计算应用赛项题目
收集自网络等公开渠道,如有雷同纯属巧合。仅为个人学习使用,如有侵权请联系下架。
【实操题】1.1.1 集群主机环境配置(0.5分)
使用已提供创建两台云主机搭建OpenStack两节点集群,检测2台主机的网络互通情况,以确保网络正常通信与ssh连接,然后按以下要求配置服务器:
(1)设置控制节点主机名为controller,设置计算节点主机名为compute;
(2)修改hosts文件将IP地址映射为主机名;
(3)使用提供的安装包文件,并分别修改好controller节点和compute节点的yum源文件“/etc/yum.repos.d/local.repo”。
(4)配置controller节点可以无秘钥访问compute节点。
完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.1.2 基础软件包安装(0.5分)
在控制节点和计算节点上分别安装iaas-yoga软件包,根据表2配置两个节点脚本文件中的基本变量(配置脚本文件为/etc/1cloud/openrc.sh)。
表2 云平台配置信息
| 服务名称 | 变量 | 参数/密码 |
|---|---|---|
| Mysql | root | 000000 |
| Keystone | 000000 | |
| Glance | 000000 | |
| Nova | 000000 | |
| Neutron | 000000 | |
| Heat | 000000 | |
| Zun | 000000 | |
| Keystone | DOMAIN_NAME | demo |
| Admin | 000000 | |
| Rabbit | 000000 | |
| Glance | 000000 | |
| Nova | 000000 | |
| Neutron | 000000 | |
| Heat | 000000 | |
| Zun | 000000 | |
| Neutron | Metadata | 000000 |
| External Network | eth1(以实际为准) |
完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.1.3 数据库及消息服务安装与使用(0.5分)
在控制节点上使用安装Mariadb、RabbitMQ等服务。并进行相关操作。
在controller节点上使用iaas-install-mariadb.sh 脚本安装Mariadb、Memcached、RabbitMQ等服务。安装服务完毕后,修改/etc/my.cnf文件,完成下列要求:
1.设置数据库支持大小写;
2.设置数据库缓存innodb表的索引,数据,插入数据时的缓冲为4G;
3.设置数据库的log buffer为64MB;
4.设置数据库的redo log大小为256MB;
5.设置数据库的redo log文件组为2。
6.设置数据库允许的最大通信包大小为64M。
7.修改Memcached的相关配置,将内存占用大小设置为512MB,调整最大连接数参数为2048;
8.调整Memcached的数据摘要算法(hash)为md5;
完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.1.4 Keystone服务安装与使用(0.5分)
在控制节点上安装Keystone服务并创建用户。
在controller节点上使用iaas-install-keystone.sh脚本安装Keystone服务。
Keystone服务安装完成后,在/etc/keystone/目录下编写admin-openrc.sh文件,此文件用于组件之间的认证。
然后创建OpenStack域210Demo,其中包含Engineering与Production项目,在域210Demo中创建组Devops,其中需包含以下用户:
1.Robert用户是Engineering项目的用户(member)与管理员(admin),email地址为:Robert@lab.example.com。
2.George用户是Engineering项目的用户(member),email地址为:George@lab.example.com。
3.William用户是Production项目的用户(member)与管理员(admin),email地址为:William@lab.example.com。
4.John用户是Production项目的用户(member),email地址为:John@lab.example.com。
完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.1.5 Glance安装与使用(0.5分)
在控制节点上安装Glance 服务。上传镜像至平台,并设置镜像启动的要求参数。
在controller节点上使用iaas-install-glance.sh脚本安装glance服务。然后将cirros-0.5.2-x86_64-disk.img镜像上传到OpenStack平台中,镜像名称为cirros-0.5.2。完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.1.6 Nova安装(0.5分)
在控制节点和计算节点上分别安装Nova服务。安装完成后,完成Nova相关配置。
在controller节点和compute节点上分别使用iaas-install-nova-controller.sh脚本、iaas-install-nova-compute.sh脚本安装Nova服务。在OpenStack中,修改相关配置文件,修改调度器规则采用缓存调度器,缓存主机信息,提升调度时间,修改完成后,不要重启nova服务。配置完成后提交controller点的用户名、密码和IP地址到答题框。
【实操题】1.1.7 Neutron安装(0.5分)
在控制和计算节点上正确安装Neutron服务。
使用提供的脚本iaas-install-neutron-controller-openvswitch.sh和iaas-install-neutron-compute-openvswitch.sh,在controller和compute节点上安装neutron服务。完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.1.8 Dashboard安装(0.5分)
在控制节点上安装Dashboard服务。安装完成后,将Dashboard中的 Django数据修改为存储在文件中。
在controller节点上使用iaas-install-horizon.sh脚本安装Dashboard服务。安装完成后,修改相关配置文件,完成下列两个操作:
1.将Dashboard中的Django数据修改为存储在文件中。
2.将登陆页面的“云计算基础架构平台”修改为“私有云云计算基础架构平台”。
完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.1.9 Swift安装(0.5分)
在控制节点和计算节点上分别安装Swift服务。安装完成后,将cirros镜像进行分片存储。
在控制节点和计算节点上分别使用iaas-install-swift-controller.sh和iaas-install-swift-storage.sh脚本安装Swift服务。安装完成后,使用命令创建一个名叫examcontainer的容器,将cirros-0.3.4-x86_64-disk.img镜像上传到examcontainer容器中,并设置分段存放,每一段大小为10M。完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.1.10 Cinder安装与创建硬盘(0.5分)
在控制节点和计算节点分别安装Cinder服务,请在计算节点,对块存储进行扩容操作。
在控制节点和计算节点分别使用iaas-install-cinder-controller.sh、iaas-install-cinder-storage.sh脚本安装Cinder服务,请在计算节点,对块存储进行扩容操作,即在计算节点再分出一个5G的分区,加入到cinder块存储的后端存储中去。完成后提交计算节点的用户名、密码和IP地址到答题框。
【实操题】1.2.1 Cgroup运维(1分)
在 OpenStack 云主机上,使用 cgroup 技术创建名为 cpu_limit 的组,将 yes命令的 CPU 使用率限制在最多 20% 单核。
注意:cg系列命令可通过libcgroup软件包下载。
完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.2.2 Glance调优(1分)
在OpenStack云平台中,Glance的镜像缓存目录会因为缓存过多的镜像而占用大量的磁盘空间,请为Glance配置镜像缓存目录,并设置缓存最大容量为50GB,缓存超过12个小时未访问则会被自动清理掉。
完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.2.3 Glance API调优(1分)
在 OpenStack 云平台中,Glance 在上传大体量镜像时经常出现连接中断的问题,请对 Glance API 进行稳定性调优,设置 socket 超时时间为 180 秒,并启用 KeepAlive 机制,以确保大镜像能够稳定、完整地上传。
完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.2.4 监控系统部署与应用(1分)
在centos7.9系统的云主机,使用prometheus_monitor.zip软件包安装Prometheus和grafana服务,然后再申请一台centos7.9的云主机,安装node_exporter服务,并为Prometheus、grafana、node_exporter服务配置systemd,将Prometheus设置为Grafana的数据源,数据源名字为Prometheus,使用提供的可视化JSON文件,创建监控面板监控第二台云主机的性能数据,修改监控面板的“网络进带宽”和“网络出带宽”,使其可以正常监控到云主机的网络数据。
Prometheus和grafana解压到/opt/monitor/目录下,名字更改为prometheus和grafana;node_exporter解压到/usr/local/目录下,名字更改为node_exporter。
注意:配置systemd时,文件名格式必须为服务名+service,例如prometheus.service,不用大写,grafana的用户名和密码均设置为admin/admin。
完成部署服务后,提交Prometheus节点的IP地址、用户名和密码到答题框。
【实操题】1.2.5 OpenStack镜像压缩(1分)
使用自行搭建的OpenStack平台。在HTTP服务中存在一个镜像为CentOS7.5-compress.qcow2的镜像,使用qemu相关命令,对该镜像进行压缩,压缩后的镜像命名为chinaskill-js-compress.qcow2并存放在/root目录下。完成后提交controller点的用户名、密码和IP地址到答题框。
【实操题】1.2.6 Nova调优(1分)
在OpenStack平台上创建虚拟机的时候,可以选择虚拟机的创建数量,如果一次过多的话会导致机器创建失败,这个时候可以通过修改nova的配置文件来限制虚拟机的并发创建数量,限制同时只能创建3台虚拟机。
配置完成后提交改动节点的用户名、密码和IP地址到答题框。
【实操题】1.2.7 ISCSI存储配置(1分)
在自行搭建的OpenStack云平台上,控制节点为客户端,计算节点为服务端,自行预留磁盘存储,进行iscsi存储服务器的配置,要求如下:
1.创建target,target名称为iqn.2024-11.com.chinaskills:compute;
2.创建名为chinaskills.iscsi_store的存储设备;
3.将存储设备绑定到后端存储;
4.设置控制列表,只允许主机名controller的客户端可以进行访问;
5.关闭账号密码验证访问;
6.客户端可以连接到服务端共享的存储设备;
完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.2.8 keystone调优(1分)
在自行搭建的OpenStack云平台上,Keystone服务因频繁查询数据库导致认证延迟高,如令牌生成时间超过200ms,此时需要对keystone进行优化,请修改keystone相关配置文件,启用memcached缓存,减少数据库负载并提升认证响应速度。
注意:在进行配置中涉及到填写IP处均以controller主机名代替。
完成后提交控制节点的用户名、密码和IP地址到答题框。
【实操题】1.2.9 Nova组件优化(1分)
请修改OpenStack相关参数,缩短nova/neutron等组件调用系统命令的时间,优化系统命令的调用速度。
在OpenStack中,非root用户想执行需要root权限相关的命令时,比如在启动虚拟机的过程中,会多次调用系统命令,调用命令时,会经过某命令进行封装,这个命令在每次允许过程中,都会加载命令白名单,最终再调用实际命令运行,这个过程会产生额外的耗时。这种情况可以通过修改nova相关配置文件,来进行减少耗时,节省调用时间。
配置完成后提交改动节点的用户名、密码和IP地址到答题框。
【实操题】1.2.10 使用Heat模板创建容器(1分)
在自行搭建的OpenStack私有云平台上,在/root目录下编写Heat模板create_container.yaml,要求执行yaml文件可以创建名为heat-swift的容器。完成后提交控制节点的用户名、密码和IP地址到答题框。(说明:竞赛系统会远程执行create_container.yaml文件,提交前先清理heat中测试数据)
【实操题】1.3.1 MariaDB 数据库操作开发(3分)
使用提供的AIpython3.7.3.tar.gz软件包在controller节点安装开发环境,在/root目录下创建mysql_db_manager.py脚本,基于python的sqlalchemy库进行数据库的管理,实现对OpenStack内指定服务的MariaDB数据库管理功能,实现该数据库下表创建、删除、数据插入、更新等操作,OpenStack MariaDB数据库的账户root、密码000000保存不变:
该表(table)用于描述OpenStack成员信息,表结构如下:
表名称"member",该表有4个字段:
id INTEGER 主键,自动递增;
name VARCHAR(256);
level INTEGER;
place varchar(256);
(1)mysql_db_manager内部实现DM_Manager类,类初始化方法def __init__(self, db_name),参数db_name是OpenStack内部指定的某一服务数据库名称。
(2)DM_Manager类实现create_table(self)方法。实现创建表功能,表指member表。
(3)DM_Manager类实现insert_table_data(self,**kwargs)方法。实现表中表数据插入功能,参数kwargs参数为要插入数据记录信息,key与表字段名称一致。
(4)DM_Manager类实现update_table_data(self,**kwargs)方法。实现表中数据记录更新功能,参数kwargs参数为要更新数据记录信息,key与表字段名称一致。
(5)DM_Manager类实现run_table_raw_sql(self, raw_sql:str): 方法,无参数。实现表中直接执行sql语句功能,raw_sql参数为sql语句。
(6)DM_Manager类实现delete_table(self)方法。实现删除表功能,表指member表。
注意:运行代码命令格式为python37 xxxx.py。如果出现libssl.so.10库文件找不到的情况,可以参考文件服务器中的openssl_install.txt文件,来进行库文件的编译。
完成后提交 controller节点的IP地址,用户名和密码提交。
【实操题】1.3.2 OpenStack用户命令行管理工具开发(7分)
使用已建好的OpenStack Python运维开发环境,在OpenStack Python3.7.3运维开发环境中,使用FastAPI框架和argparse库,服务端口为9046,在/root/onecloud目录下编写onecloud.py文件,基于OpenStack user资源封装命令行客户端,代码编写完成后,自行启动该服务。
命令行参数说明要求:位置参数“stack”表示解析器,位置参数“user”表示操作类型,动作类型包括“list”“show”“create”“delete”;
(1)“list”:查看所有的user;
(2)“show”:查看user的详细信息;
(3)“create”:表示创建用户,后续参数有“--name”、“--password”;“delete”:表示删除用户;
(4)“delete”:删除指定的user;
功能要求如下:
(1)查询所有用户的信息;使用tabulate库将数据进行表格化处理,字段名为ID、Name,表格格式为圆角轮廓。
(2)查询用户的详细信息,要求可以通过ID或者Name来查询用户的详细信息。使用tabulate库将数据进行表格化处理,字段名为Field、Value,表格格式为圆角轮廓。
(3)创建用户,通过指定参数创建出一个在OpenStack平台中的user资源。
(4)删除用户,要求可以通过用户的ID和名字来删除掉用户。
注意:如果出现libssl.so.10库文件找不到的情况,可以参考文件服务器中的openssl_install.txt文件,来进行库文件的编译。
命令格式为onecloud stack user <list/show/create/delete> <参数>
完成后提交该云主机的用户名、密码和IP地址到答题框。
【实操题】2.1.1 部署Kubernetes容器云平台(2分)
使用已创建两台云主机,云主机类型使用4vCPU/12G/100G类型,分别作为Kubernetes集群的Master节点和node节点,然后完成Kubernetes集群部署。
完成后提交Master节点的用户名、密码和IP到答题框。
【实操题】2.1.2 部署Harbor镜像仓库(1分)
在Kubernetes集群中完成Harbor镜像仓库部署。
完成后提交Master节点的用户名、密码和IP到答题框。
【实操题】2.1.3 部署Istio服务网格(1分)
在Kubernetes集群中完成Istio服务网格组件部署。
完成后提交Master节点的用户名、密码和IP到答题框。
【实操题】2.1.4 部署kubeVirt 虚拟化组件(1分)
在Kubernetes集群中完成kubeVirt虚拟化组件部署。
完成后提交Master节点的用户名、密码和IP到答题框。
【实操题】2.2.1 容器化部署Node-Exporter(0.5分)
编写Dockerfile构建monitor-exporter:v1.0镜像,具体要求如下:(需要用到的软件包:Monitor.tar.gz)
(1)基础镜像:centos:centos7.9.2009;
(2)使用二进制包node_exporter-0.18.1.linux-amd64.tar.gz安装node-exporter服务;
(3)声明端口:9100;
(4)设置服务开机自启。
完成后提交master节点的IP地址、用户名和密码到答题框。
【实操题】2.2.2容器化部署Alertmanager(0.5分)
编写Dockerfile构建monitor-alert:v1.0镜像,具体要求如下:(需要用到的软件包:Monitor.tar.gz)
(1)基础镜像:centos:centos7.9.2009;
(2)使用二进制包alertmanager-0.19.0.linux-amd64.tar.gz安装Alertmanager服务;
(3)声明端口:9093、9094;
(4)设置服务开机自启。
完成后提交master节点的IP地址、用户名和密码到答题框。
【实操题】2.2.3 容器化部署Grafana(0.5分)
编写Dockerfile构建monitor-grafana:v1.0镜像,具体要求如下:(需要用到的软件包:Monitor.tar.gz)
(1)基础镜像:centos:centos7.9.2009;
(2)使用二进制包grafana-6.4.1.linux-amd64.tar.gz安装grafana服务;
(3)声明端口:3000;
(4)设置nacos服务开机自启。
(5)Grafana用户名和密码设置为admin/admin。
完成后提交master节点的IP地址、用户名和密码到答题框。
【实操题】2.2.4 容器化部署Prometheus(0.5分)
编写Dockerfile构建monitor-prometheus:v1.0镜像,具体要求如下:(需要用到的软件包:Monitor.tar.gz)
(1)基础镜像:centos:centos7.9.2009;
(2)使用二进制包prometheus-2.13.0.linux-amd64.tar.gz安装promethues服务;
(3)编辑/data/prometheus/prometheus.yml文件,创建3个任务模板:prometheus、node和alertmanager,并将该文件拷贝到/data/prometheus/目录下;
(4)声明端口:9090;
(5)设置服务开机自启。
完成后提交master节点的IP地址、用户名和密码到答题框。
【实操题】2.2.5 编排部署监控系统(1分)
编写docker-compose.yaml文件,使用镜像exporter、alert、grafana和prometheus完成监控系统的编排部署。
编写docker-compose.yaml文件,具体要求如下:
(1)容器1名称:monitor-node;镜像:monitor-exporter:v1.0;端口映射:9100:9100;
(2)容器2名称:monitor- alertmanager;镜像:monitor-alert:v1.0;端口映射:9093:9093、9094:9094;
(3)容器3名称:monitor-grafana;镜像:monitor-grafana:v1.0;端口映射:3000:3000;
(4)容器4名称:monitor-prometheus;镜像:monitor-prometheus:v1.0;端口映射:9090:9090。
完成后编排部署监控系统,将Prometheus设置为Grafana的数据源,并命名为Prometheus。grafana的密码设置为admin/admin。
然后提交master节点的IP地址、用户名和密码到答题框。
【实操题】2.2.6 部署GitLab(0.5分)
将GitLab部署到Kubernetes集群中,设置GitLab服务root用户的密码,使用Service暴露服务,并将提供的项目包导入到GitLab中。
在Kubernetes集群中新建命名空间gitlab-ci,将GitLab部署到该命名空间下,Deployment和Service名称均为gitlab,以NodePort方式将80端口对外暴露为30880,设置GitLab服务root用户的密码为admin@123,将项目包demo-2048.tar.gz导入到GitLab中并命名为demo-2048。
完成后提交Master节点的用户名、密码和IP地址到答题框。(需要用到的软件包:CICD-Runners-demo2048.tar.gz)
【实操题】2.2.7 部署GitLab Runner(1分)
将GitLab Runner部署到Kubernetes集群中,为GitLab Runner创建持久化构建缓存目录以加速构建速度,并将其注册到GitLab中。
将GitLab Runner部署到gitlab-ci命名空间下,Release名称为gitlab-runner,为GitLab Runner创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache以加速构建速度,并将其注册到GitLab中。
完成后提交Master节点的用户名、密码和IP地址到答题框。(需要用到的软件包:CICD-Runners-demo2048.tar.gz)
【实操题】2.2.8 部署GitLab Agent(1分)
将Kubernetes集群添加到GitLab项目中指定名称和命名空间。
将Kubernetes集群添加到demo-2048项目中,并命名为kubernetes-agent,项目命名空间选择gitlab-ci。
完成后提交Master节点的用户名、密码和IP地址到答题框。(需要用到的软件包:CICD-Runners-demo2048.tar.gz)
【实操题】2.2.9 构建CI/CD(0.5分)
编写流水线脚本触发自动构建,要求基于GitLab项目完成代码的编译、镜像的构建与推送,并自动发布应用到Kubernetes集群中。
编写流水线脚本.gitlab-ci.yml触发自动构建,具体要求如下:
(1)基于镜像maven:3.6-jdk-8构建项目的drone分支;
(2)构建镜像的名称:demo:latest;
(3)将镜像推送到Harbor仓库demo项目中;
(4)将demo-2048应用自动发布到Kubernetes集群gitlab-ci命名空间下。
完成后提交Master节点的用户名、密码和IP地址到答题框。(需要用到的软件包:CICD-Runners-demo2048.tar.gz)
【实操题】2.2.10 Etcd配额优化(2分)
etcd的数据库空间配额大小默认限制为2G,当数据达到2G的时候就不允许写入。这里如果想继续写入,必须对历史数据进行压缩,或者调整etcd数据库的空间配额大小限制。
请扩容etcd数据库空间的配额大小,将其扩容至8G。
完成后提交master节点的用户名、密码和IP地址到答题框。
【实操题】2.2.11 Kubernetes控制器调优(2分)
当kubernetes集群中运行了多个Service,在配置更新后,对应的Endpoint和LoadBalancer资源需要长达十几分钟才会生效,经过排查,是服务控制器的处理队列堆积严重,请对服务控制器进行调优配置,增加Service资源的并发为100。
完成后提交master节点的IP地址、用户名和密码到答题框。
【实操题】2.3.1 通过Docker Restful API 实现容器创建(5分)
Docker容器运维脚本开发,使用Restful APIs方式管理Docker容器服务。
在已建好的Kubernetes环境云平台上,使用提供的AIpython3.7.3.tar.gz软件包,进行Python3.7.3的开发环境安装。自行开启Docker REST API端口,端口号为2375,可以使用python request库,在/root目录下,创建api_docker_manager.py文件,要求编写python代码,代码实现以下任务:
(1)使用提供的nginx:latest镜像创建容器,容器主机名为chinaskills-nginx,开机自启动,声明端口为8010,标签为chinaskill: nginx,网络模式选择bridge;
(2)创建完成之后,查询该容器的信息,查询的body部分通过控制台输出,并以json格式的文件输出到当前目录下的api_containers.json文件中;
完成后提交Master节点的用户名、密码和IP地址到答题框。
【实操题】2.3.2 Kubernetes资源监控开发(5分)
在Master节点上使用提供的AIpython3.7.3.tar.gz软件包安装Python3.7.3,在Kubernetes Python3.7.3运维开发环境中,使用FastAPI框架,在/root/k8s目录下编写main.py文件,服务端口为9089,host为0.0.0.0,自行通过uvicorn来启动服务,并开启热重启模式,功能代码要求如下:
定义接口为/cluster/metrics/,方法为GET,数据格式为列表格式,调用此接口时,返回的信息为集群中的节点名称、CPU数量、内存容量、可分配内存容量、可分配CPU数量等信息,若调用接口失败,则使用FastAPI内置的异常类,将相应的HTTP状态码抛出;
完成后提交Master节点的用户名、密码和IP地址到答题框。
【实操题】3.1.1 云端部署(3分)
使用OpenStack集群中k8s-allinone-v1.22.1镜像创建云主机(该镜像启动后内置一个完整的kubernetes服务),该云主机作为KubeEdge的云端Kubernetes 1.22节点。
然后下载软件包kubernetes_kubeedge.zip到云端节点并部署KubeEdge1.11边缘计算系统,在云端节点部署KubeEdge cloudcore云端模块、启动cloudcore服务并配置该服务可被systemd管理。完成后提交云端节点的IP地址、用户名和密码到答题框。
【实操题】3.1.2 边端部署(4分)
使用OpenStack集群中申请2台CentOS7.9的云主机,主机名分别为edge-node1、edge-node2。在http文件服务器中下载kubernetes_kubeedge.zip、mqtt_package.zip软件包和编译工具说明文档MakeInstall.txt,使用该软件包在虚拟机编译部署MQTT服务和KubeEdge edgecore边端模块,并启动edgecore服务。加入成功之后,启用metrics监控服务。
完成后提交云端节点的IP地址、用户名和密码到答题框。
【实操题】3.1.3 边缘应用部署(3分)
利用搭建好的边缘计算平台,在云端节点上使用提供的相关镜像(k8simage目录下)和yaml文件(kubeedge-counter-demo目录下),自行编写DeviceModel、Device资源,要求如下:
DeviceModel名字为counter-model;
属性为status,类型为字符串,存储模式为读写模式,默认值为空;
Device名字为counter;
引用counter-model设备模型;
将此设备通过节点选择器与edge-node1节点进行绑定;
在status字段中的twins字段定义属性名称为status、理想值为“OFF”、真实值为“0”;
编写完成后,按照顺序分别部署好DeviceModel、Device以及云端计数应用控制器和计数应用。部署完成后,将计数器打开。
完成后提交云端节点的用户名、密码和IP到答题框。
模块三边缘计算 任务二、边缘计算云服务开发
(当前任务共2道题目)
【实操题】3.2.1 基于FastAPI框架封装AI识别服务(3分)
利用搭建好的边缘计算平台与 Python 3.7.3开发环境,并安装开发所需的依赖包,将提供的代码包ai_face.tar.gz导入解压到Linux服务器root目录下,打开ai_face工程目录,代码包中已经提供了人脸识别器 XML 文件和人脸视频,基于提供的XML识别文件在apps目录下编写face_recognition.py 文件定义人脸识别接口,服务端口为7047,地址要求为0.0.0.0。
要求识别接口为/detect_face,实现人脸视频material_video.mp4识别,将识别后的人脸信息坐标保存到字典中进行返回。
注意:选手需要手动启动AI识别服务。
完成后提交运行服务节点的用户名、密码和IP到答题框。
模块三边缘计算 任务二、边缘计算云服务开发
(当前任务共2道题目)
【实操题】3.2.2 边缘设备管理开发(7分)
利用搭建好的边缘计算平台与 Python 3.7.3开发环境,将提供的fastapi_device.zip代码包导入到Linux服务器root目录下,打开fastapi_device工程目录,基于FastAPI框架和Kubernetes SDK实现了一组API,来进行管理边缘设备的后端服务,端口为8070,编码要求功能如下:
1、定义获取设备资源的路由,接口为/cloud_edge_service/node/cloudnode,请求为GET,直接返回数据结果。
2、定义获取单个设备资源的路由,接口为 /device/{name},请求方式为 GET,根据设备名称 name 查询 default 命名空间中的 Device 资源,返回的数据类型为 JSON对象类型。
3、定义更新设备期望状态的路由,接口为 /device/device,请求方式为 PUT,根据请求体中的 name 获取对应 Device 资源,并根据 desired 字段更新设备 status.twins.desired.value 的值,返回的数据类型为 JSON对象类型。
4、定义创建设备资源的路由,接口为 /device/device,请求方式为 POST,根据请求体中的 name、dmName 和 nodeName 参数,首先获取对应的 DeviceModel 资源,并读取 spec.properties 字段生成设备属性 twins,然后构建 Device 资源结构在 default 命名空间中创建设备,返回的数据类型为 JSON对象类型。
5、定义删除设备资源的路由,接口为 /device/device,请求方式为 DELETE,根据请求体中的 name 删除 default 命名空间中的 Device 资源,返回的数据类型为 JSON对象类型。
注意:选手需要手动启动该服务,创建Device资源之前,必须要先创建DeviceModel资源,DeviceModel资源名称为test-devicemodel。
完成后提交运行服务节点的用户名、密码和IP到答题框。
【实操题】4.1.1 Dify服务部署(5分)
dify是一款开源的大语言模型(LLM) 应用开发平台,融合了后端即服务和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。
使用Centos7.9镜像申请一台云主机,并使用提供的docker-20.10.20.tgz软件包自行安装docker服务,服务安装完成后,使用提供的dify-1.9.1.zip、dify_images.zip软件包,进行dify服务的镜像导入,完成以下要求之后进行dify服务部署:
(1)修改相关文件,将Python初始化超时时间设置为320秒;
(2)修改相关文件,将插件最大执行时长设置为2400秒;
(3)修改相关文件,将知识库上传文件的大小限制改为100M;
完成后提交dify节点的用户名、密码和IP地址到答题框。
【实操题】4.1.2 Ollama服务部署(5分)
Ollama 是一个用于在本地轻松运行大语言模型的工具,可以用来管理大数据语言模型,并且可以通过调用其接口来完成对模型的使用。
延用上一道题目环境的云主机,部署ollama服务, 容器名称为ollama,并暴露11434端口。
服务部署完成后,将models.tar.gz软件包中提供的离线大模型通过ollama服务来进行管理。
完成后提交ollama节点的用户名、密码和IP地址到答题框。
【实操题】4.2.1 智能聊天机器人开发(10分)
在搭建好 Ollama 服务的机器中,使用提供的 AIpython3.7.3.tar.gz 软件包安装 Python 3.7.3 开发环境,编写 /root/chatbot.py 文件,实现基于 Streamlit框架 + Ollama 模型服务的多轮对话流式智能聊天机器人,服务端口为 7860,host 为 0.0.0.0,手动启动该服务。开发要求如下:
(1)实现对话历史展示功能:在 Web 界面中实时显示完整对话记录;用户消息与模型回复需清晰区分;多轮对话历史能够在当前会话中保持。
(2)实现文件解析功能:系统支持上传文件,并解析内容;可以解析docx、txt、pdf这三种类型的文件;文件内容解析后可以作为上下文参与问答。
(3)实现清空对话功能:提供“清空对话”按钮;点击后立即清除所有历史聊天记录;页面显示区域即时更新为空的对话状态
(4)实现多轮流式对话功能:聊天机器人能够连续多轮回答用户问题;模型回答采用流式生成方式,逐步显示内容;支持在浏览器端实时查看生成过程。
(5)实现多模型切换功能:系统界面提供模型选择下拉框;切换模型后,对话上下文仍然可用;不同模型的回答可实时展示在聊天界面。
完成后提交运行服务节点的用户名、密码和 IP 地址到答题框。