2022 年全国职业院校技能大赛高职组云计算赛项试卷
云计算赛项第二场–容器云
目录
2022 年全国职业院校技能大赛高职组云计算赛项试卷
【赛程名称】云计算赛项第二场-容器云
【任务1】容器云平台搭建[5 分]
【任务2】容器云应用部署:Docker Compose 编排部署[7.0 分]
【任务3】容器云应用部署:基于Kubernetes构建CICD[8.0 分]
【任务4】容器云服务运维:Kubernetes 基于容器的运维[6 分]
【任务5】容器云服务运维:Kubernetes 基于虚拟机的运维[4.0 分]
【任务6】容器云运维开发:KubernetesAPIs 运维开发[10 分]
需要竞赛软件包环境可私信博主!
说明:完成本任务需要两台安装了 CentOS7.9 操作系统的云主机:master和node。
Chinaskill_Cloud_PaaS.iso镜像包中有本次容器云部署所需的所有文件,运维所需的文件见附件。
某公司技术部产品开发上线周期长,客户的需求经常得不到及时响应。引入CICD
(Continuous Integration 持续集成、Continuous Delivery 持续交付) 成了公司的当务之急,研发团队决定搭建基于Kubernetes的CICD 环境,希望基于这个平台来实现DevOps的部分流
程,来减轻开发、部署、运维的负担。
为了能够让公司开发的web 应用系统产品能够基于服务器的性能、可靠性、高可用性
与方便维护,研发部决定使用微服务架构,实现基于Kubernetes的容器化部署。
节点规划如表1 所示。
表1 容器云平台节点规划
节点角色 | 主机名 | VCPUS | 内存 | 硬盘 |
Master、Harbor、CICD | master | 8 | 12G | 100G |
Worker Node | node | 8 | 8G | 100G |
【任务1】容器云平台搭建[5 分]
【适用平台】私有云
【题目1】平台部署—部署容器云平台[1.5 分]
登录OpenStack 私有云平台,使用CentOS7.9 镜像创建两台云主机,使用kubeeasy 工具完成Kubernetes1.22.1 集群的搭建。然后使用nginx 镜像在default 命名空间下创建一个名为
exam的Pod,并为该Pod 设置环境变量exam,其值为2022。
完成后提交master 节点的用户名、密码和IP到答题框。
1.Kubernetes集群部署成功得1分; 2.Pod创建成功且环境变量设置正确得0.5 分。 |
【题目2】平台部署—部署Istio 服务网格[0.5 分]
在Kubernetes 集群上完成Istio 服务网格环境的安装, 然后新建命名空间exam,为该命
名空间开启自动注入Sidecar。
完成后提交master 节点的用户名、密码和IP到答题框。
1.Istio 所有组件运行成功得0.3 分; 2.命名空间exam自动注入成功得0.2 分。 |
【题目3】平台部署—部署KubeVirt 虚拟化[1 分]
在Kubernetes 集群上完成KubeVirt 虚拟化环境的安装。
完成后提交master 节点的用户名、密码和IP到答题框。
1.KubeVirt 所有组件运行成功得1 分。 |
【题目4】平台部署—部署Harbor 仓库及Helm 包管理工具[1分]
在master 节点上完成Harbor 镜像仓库及Helm 包管理工具的部署。然后使用nginx镜像自定义一个 Chart,Deployment名称为nginx,副本数为 1,然后将该Chart部署到 default
命名空间下,Release 名称为web。
完成后提交master 节点的用户名、密码和IP到答题框。
1.Harbor 仓库部署成功得0.5 分; 2.Helm 工具安装成功得0.2 分; 3.Chart 包部署成功得0.3 分。 |
【题目5】集群管理—备份ETCD 数据[1 分]
Kubernetes 使用ETCD 来存储集群的实时运行数据,为防止服务器宕机导致Kubernetes
集群数据丢失,请将Kubernetes 集群数据备份到/root/etcd.db中。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.etcdctl 工具安装成功得0.2 分; 2.ETCD 数据备份成功得0.8 分。 |
【任务2】容器云应用部署:Docker Compose 编排部署[7.0 分]
【适用平台】私有云
Hyperf 是一个高性能、高灵活性的渐进式PHP协程框架,内置协程服务器及大量常用的组件,性能较传统基于PHP-FPM的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性。请根据要求完成数据库服务MariaDB、缓存服务Redis、微服务Hyperf
及前端服务Nginx 按照要求进行容器化。
【题目1】容器化MariaDB 服务[1 分]
编写Dockerfile文件构建hyperf-mariadb:v1.0镜像,具体要求如下:(需要用到的软件包:
Hyperf.tar.gz)
(1)基础镜像:centos:7.9.2009;
(2)完成MariaDB 服务的安装;
(3)声明端口:3306;
(4)设置数据库root 用户的密码为root;
(5)将提供的数据库文件hyperf_admin.sql 导入数据库;
(6)设置服务开机自启。
完成后构建镜像,并提交master 节点的用户名、密码和IP 地址到答题框。
1.镜像构建成功得0.5 分; 2.数据库安装且导入数据成功得0.5 分。 |
【题目2】容器化Redis 服务[1 分]
编写Dockerfile文件构建hyperf-redis:v1.0镜像,具体要求如下:(需要用到的软件包:
Hyperf.tar.gz)
(1)基础镜像:centos:7.9.2009;
(2)安装Redis 服务;
(3)关闭保护模式;
(4)声明端口:6379;
(5)设置服务开机自启。
完成后构建镜像,并提交master 节点的用户名、密码和IP 地址到答题框。
1.镜像构建成功的0.5 分; 2.Redis 服务安装成功且配置正确得0.5 分。 |
【题目3】容器化Nginx 服务[0.5 分]
编写Dockerfile 文件构建hyperf-nginx:v1.0 镜像,具体要求如下:(需要用到的软件包:
Hyperf.tar.gz)
(1)基础镜像:centos:7.9.2009;
(2)安装nginx 服务;
(3)声明端口:80;
(4)设置服务开机自启。
完成后构建镜像,并提交master 节点的用户名、密码和IP 地址到答题框。
1.镜像构建成功得0.3 分; 2.Nginx安装成功且配置正确得0.2 分。 |
【题目4】容器化Hyperf服务[1 分]
编写Dockerfile 文件构建hyperf-service:v1.0 镜像,具体要求如下:(需要用到的软件包:
Hyperf.tar.gz)
(1)基础镜像:centos:7.9.2009;
(2)安装PHP 及扩展;
(3)使用源码编译安装Swoole。
完成后构建镜像,并提交master 节点的用户名、密码和IP 地址到答题框。
1.镜像构建成功得0.5 分; 2.PHP安装成功得0.2 分; 3.Swoole安装成功得0.3 分。 |
【题目5】编排部署Hyperf框架[3.5 分]
编写/root/hyperf/project/docker-compose.yaml 文件,具体要求如下:
(1)容器1 名称:hyperf-mysql;镜像:hyperf-mariadb:v1.0;端口映射: 3306:3306;
(2)容器2 名称:hyperf-redis;镜像:hyperf-redis:v1.0;
(3)容器3 名称:hyperf-ui;镜像:hyperf-nginx:v1.0;端口映射: 80:8081;
(4)容器4 名称:hyperf-service;镜像:hyperf-service:v1.0。
完成后编排部署Hyperf框架,并提交master 节点的用户名、密码和IP 地址到答题框。
1.docker-compose.yaml 文件编排成功得1.5 分; 2.8081 端口访问服务成功得1 分; 3.Hyperf-service 连接数据库和Redis成功得1 分。 |
【任务3】容器云应用部署:基于Kubernetes构建CICD[8.0 分]
该公司决定采用Kubernetes+GitLabCI 来构建CICD 环境, 以缩短新功能开发上线周期,及时满足客户的需求,实现DevOps的部分流程,来减轻部署运维的负担,实现可视化容器生命周期管理、应用发布和版本迭代更新,请完成GitLabCI+Kubernetes的CICD 环境部署(构建持续集成所需要的所有软件包在软件包CICD-Runner.tar.gz中)。CICD 应用系
统架构如下:
【适用平台】私有云
【题目1】安装GitLab 环境[1 分]
在Kubernetes 集群中新建命名空间gitlab-ci,将GitLab 部署到该命名空间下,Deployment和Service 名称均为gitlab,以NodePort 方式将80 端口对外暴露为30880,设置GitLab 服务root用户的密码为 admin@123,将项目包 demo-2048.tar.gz导入到 GitLab中并命名为demo-2048。
完成后提交master节点的用户名、密码和IP地址到答题框。(需要用到的软件包路径
CICD-Runner.tar.gz)
1.GitLab 部署正确且能正常访问得0.5 分; 2.项目导入成功得0.5 分。 |
【题目2】部署GitLab Runner[2 分]
将GitLab Runner 部署到gitlab-ci 命名空间下,Release 名称为gitlab-runner,为GitLabRunner创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache以加速构建速度, 并将其注册到GitLab中。完成后提交master节点的用户名、密码和IP地址到答题框。(需要用到的软件包路径CICD-Runner.tar.gz)
1.GitLabRunner部署成功得0.5分; 2.GitLabRunner注册成功得0.5分; |
3.GitLabRunner持久化配置成功得1分。 |
【题目3】配置GitLab[1.5 分]
将Kubernetes集群添加到demo-2048项目中, 并命名为kubernetes-agent,项目命名空
间选择gitlab-ci。
完成后提交master节点的用户名、密码和IP地址到答题框。(需要用到的软件包路径
CICD-Runner.tar.gz)
1.GitLabAgent安装成功得1分; 2.Kubernetes连接成功得0.5 分。 |
【题目4】构建CICD[3.5 分]
编写流水线脚本.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-Runner.tar.gz)
1.项目变异成功得0.5分; 2.镜像构建成功得1分; 3.服务发布成功得1分; 4.服务能正常访问得1分。 |
【任务4】容器云服务运维:Kubernetes 基于容器的运维[6 分]
【适用平台】私有云
【题目1】Pod 管理—创建Pod[0.5 分]
在default 命名空间下使用nginx:latest 镜像创建一个QoS 类为Guaranteed的Pod,名称
为qos-demo。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.Pod 创建成功得0.2 分; 2.Pod QoS 类型为Guaranteed 得0.3分。 |
【题目2】安全管理—配置Pod 安全上下文[0.5 分]
使用busybox 镜像启动一个名为context-demo的Pod,为该Pod 配置安全上下文,要求
容器内以用户1000 和用户组3000 来运行所有进程,并在启动时执行“sleep1h”命令。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.Pod 安全上下午配置正确得0.5 分。 |
【题目3】CRD管理—创建自定义资源类型[0.5 分]
在Kubernetes 集群中自定义一种资源类型Student,API 为stable.example.com/v1,单数形式为student,复数形式为students,简写为stu,作用域为命名空间级,然后在default命
名空间下创建一个名为exam的Student对象。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.资源类型Student 定义成功的0.3 分; 2.exam 创建成功得0.2 分。 |
【题目4】解析管理—添加主机别名到Pod[0.5 分]
使用nginx 镜像在default 命名空间下创建一个名为nginx的Pod,并在Pod的/etc/hosts
中添加IP 地址127.0.0.1与chinaskills的解析。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.自定义解析配置正确得0.5 分。 |
【题目5】HPA管理—创建HPA 规则[1 分]
默认情况下HPA是无法调整伸缩灵敏度的,但不同的业务场景对伸缩灵敏度的要求不一样。要求在default命名空间下使用nginx镜像创建一个名为web的deployment,自定义HPA的伸缩灵敏度, 为该deployment 创建一个名为web的HPA,扩容时立即新增当前9 倍数量的副本数,时间窗口为5s,伸缩范围为1–1000。例如一开始只有1 个Pod,当CPU 使
用率超过80%时,Pod数量变化趋势为: 1 →10 →100→1000。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.HPA 创建成功得0.2分; 2.HPA 伸缩策略配置正确得0.8 分。 |
【题目6】节点亲和性管理—创建硬限制规则的Pod[0.5 分]
在 default命名空间下使用nginx镜像运行一个Pod,名称为 nginx,要求使用requiredDuringSchedulingIgnoredDuringExecution策略将Pod调度到具有“disktype=ssd”标
签的节点。
完成后提交master 节点的用户名、密码和IP到答题框。
1.Pod 调度策略配置正确得0.5 分。 |
【题目7】网络策略管理—创建Pod网络策略[0.5 分]
创建一个网络策略network-exam,要求只有 internal命名空间下的Pod可以通过 TCP
协议的8080 端口访问到mysql 命名空间下的Pod。
完成后提交master 节点的IP、用户名和密码到答题框。
1.网络策略创建成功得0.2 分; 2.规则配置正确得0.3 分。 |
【题目8】驱逐机制管理—配置节点压力驱逐[0.5 分]
设置kubelet 数据存储在/apps/data/kubelet目录下,并设置当kubelet 的存储空间不足5%,
或者当容器运行时文件系统可用存储空间不足5%时开始驱逐Pod。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.节点压力驱逐配置正确得0.5 分。 |
【题目9】流量管理—创建Ingress Gateway[0.5 分]
使用提供的软件包ServiceMesh.tar.gz 将Bookinfo 应用部署到default命名空间下,使用IstioGateway可以实现应用程序从外部访问,请为Bookinfo应用创建一个名为bookinfo-gateway的网关,指定所有HTTP 流量通过80 端口流入网格,然后将网关绑定到虚
拟服务bookinfo 上。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.Bookinfo 应用部署成功得0.2分; 2.Bookinfo能通过网关访问得0.3 分。 |
【题目10】服务网格—创建基于用户身份的路由[0.5 分]
创建一个名为 reviews路由,要求来自名为 Jason的用户的所有流量将被路由到服务
reviews:v2。
完成后提交master 节点的用户名、密码和IP到答题框。
1.路由创建成功得0.2 分; 2.用户限制正确得0.3 分。 |
【题目11】服务网格—创建请求路由[0.5 分]
在default命名空间下创建一个名为reviews-route 的虚拟服务,默认情况下,所有的HTTP流量都会被路由到标签为version:v1的reviews服务的Pod上。此外, 路径以/wpcatalog/或/consumercatalog/开头的HTTP 请求将被重写为/newcatalog,并被发送到标签为version:v2的
Pod上。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.请求路由创建成功得0.2 分; |
2.路由策略配置正确得0.3 分。 |
【任务5】容器云服务运维:Kubernetes 基于虚拟机的运维[4.0 分]
【适用平台】私有云
【题目1】VM 管理—创建VM[0.5 分]
使用镜像fedora-virt:v1.0 在default 命名空间下创建一台vm,名称为vm-fedora,内存为
1G。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.VM 创建成功得0.3 分; 2.VM 配置正确得0.2 分。 |
【题目2】存储与卷—创建emptyDisk 卷[1 分]
使用镜像fedora-virt:v1.0 在default 命名空间下创建一台vmi,名称为vmi-fedora,并使
用emptyDisk 卷为vmi 挂载一块2G的磁盘。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.VMI 创建成功得0.4 分; 2.卷挂载成功得0.6 分。 |
【题目3】KubeVirt 运维—创建VMI[1.5 分]
将提供的镜像exam.qcow2 转换为docker 镜像exam:v1.0,然后使用镜像exam:v1.0 镜像在default 命名空间下创建一台vmi,名称为exam,将虚拟机的80 端口以NodePort的方式
对外暴露为30082,并使用数据源在启动时将VM的主机名初始化为exam。
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.qcow2 镜像转化成功得0.3 分; 2.VMI 创建成功得0.3 分; |
3.端口暴露成功得0.3 分; 4.服务能正常访问得0.4 分; 5.主机名初始化成功得0.2 分。 |
【题目4】KubeVirt 运维—启用快照[1 分]
KubeVirt 支持对VM 进行快照, 请启用KubeVirt 快照管理功能:
完成后提交master 节点的IP 地址、用户名和密码到答题框。
1.快照功能启用成功得1 分。 |
【任务6】容器云运维开发:KubernetesAPIs 运维开发[10 分]
【适用平台】私有云
【题目1】Python 运维开发:基于Kubernetes RestfulAPI 实现Deployment 创建[2 分]
在提供的OpenStack 私有云平台上,使用k8s-python-dev 镜像创建1台云主机,云主机类型使用4vCPU/12G内存/100G 硬盘。该主机中已经默认安装了所需的开发环境, 登录默
认账号密码为“root/1DaoYun@2022”。
使用Kubernetes RestfulAPI 库,在/root 目录下,创建api_deployment_manager.py 文件,
要求编写python 代码,代码实现以下任务:
(1)编写Python 程序实现Deployment资源的创建。Deployment 配置信息如下。如果
同名Deployment 存在, 先删除再创建。
(2)创建完成后,查询该Deployment的详细信息, 执行结果控制台输出,以yaml 格
式展示。
创建Deployment的yaml的配置如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas:3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
– name: nginx
image: nginx:1.15.4
ports:
– containerPort:80
1.执行api_deployment_manager.py 脚本,成功创建deployment资源,计1 分; 2.检查创建的deployment资源, 配置信息无误计1 分。 |
【题目2】Python 运维开发:基于Kubernetes Python SDK 实现Job 创建[1 分]
在前面已建好的Kubernetes 开发环境云平台上。使用Kubernetes python SDK的
“kubernetes”Python 库,在/root 目录下,创建sdk_job_manager.py 文件,要求编写python 代
码,代码实现以下任务:
(1)编写Python 程序实现Job资源的创建。Job 配置信息如下。如果同名Job 存在,
先删除再创建。
(2)创建完成后,查询该Job的详细信息,执行结果控制台输出,以json 格式展示。
Job 创建yaml的信息如下:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
– name: pi
image: perl
command:[“perl”, “-Mbignum=bpi”,“-wle”, “print bpi(2000)”]
restartPolicy: Never
backoffLimit: 4
1.执行sdk_job_manager.py 脚本, 成功创建job资源,计0.5 分; 2.查询job资源,配置信息无误,计0.5 分。 |
【题目3】Python 运维开发:Pod资源的RestfulAPIs HTTP 服务封装[3 分]
编写Python 程序实现Pod资源管理程序,将Pod资源管理的封装成Web 服务。
在/root目录下创建pod_server.py程序,实现Pod 的增删查改等Web访问操作。http.server
的host 为localhost,端口8889;程序内部实现Kubernetes 认证。
提示说明:Python 标准库http.server 模块,提供了HTTP Server 请求封装。
需要实现的RestfulAPI 接口如下:
GET /pod/{name} ,查询指定名称{name}的Pod;Response的Body以json 格式输出。
POST /pod/{yamlfilename} 创建yaml 文件名称为{yamlfilename}的Pod;Response的
Body以json格式。
编码完成后,“手工下载”文件服务器主目录所有*.yaml 文件到root 目录下,“手动执
行”所编写pod_server.py 程序, 提交答案进行检测。
1.HTTP 服务成功启动, 计1分; 2.发起指定参数的GET查询Pod 请求,成功查询指定名称的pod 服务,计1 分; |
3.发起指定参数的POST 创建Pod 请求,成功创建Pod 服务,计1 分。 |
【题目4】Python 运维开发:Service资源RestfulAPIs HTTP 服务封装[4 分]
编写Python 程序实现Service资源管理程序,将Service资源管理的封装成Web 服务。
在/root目录下创建service_server.py 程序, 实现Service的增删查改等Web 访问操作。
http.server的host 为localhost,端口 8888;程序内部实现Kubernetes 认证。
提示说明:Python 标准库http.server 模块,提供了HTTP Server 请求封装。
需要实现的RestfulAPI 接口如下:
GET /services/{name},查询指定名称{name}的Service;Response的Body以json 格式
输出。
POST /services/{yamlfilename} 创建yaml 文件名称为{yamlfilename}的Service;
Response的Body以json 格式,(手工将文件服务器主目录所有*.yaml 文件下载到root 目录
下)。
DELETE /services/{name};删除指定名称的Service;Response的Body以json 格式。
编码完成后,自己手动执行提供Web HTTP 服务的service_server.py 程序,提交答案进
行检测。
1.HTTP 服务成功启动, 计1分; 2.发起指定参数的POST 创建service 请求,成功创建service资源,计1 分; 3.发起指定参数的GET查询service 请求,成功查询指定名称的Service,计1 分; 4.发起指定参数的DELETE 删除service请求,成功删除指定名称的Service,计 1 分。 |