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 操作系统的云主机:masternode

Chinaskill_Cloud_PaaS.iso镜像包中有本次容器云部署所需的所有文件,运维所需的文件见附件。

某公司技术部产品开发上线周期长,客户的需求经常得不到及时响应。引入CICD

(Continuous Integration 持续集成、Continuous Delivery 持续交付) 成了公司的当务之急,发团队决定搭建基于KubernetesCICD 环境,希望基于这个平台来实现DevOps的部分流

程,来减轻开发、部署、运维的负担。

为了能够让公司开发的web 应用系统产品能够基于服务器的性能、可靠性、高可用性

与方便维护,研发部决定使用微服务架构,实现基于Kubernetes的容器化部署。

节点规划如表1 所示。

1 容器云平台节点规划

节点角色

主机名

VCPUS

内存

硬盘

MasterHarborCICD

master

8

12G

100G

Worker Node

node

8

8G

100G

【任务1】容器云平台搭建[5 ]

【适用平台】私有云

【题目1】平台部署部署容器云平台[1.5 ]

登录OpenStack 私有云平台,使用CentOS7.9 镜像创建两台云主机,使用kubeeasy 工具完成Kubernetes1.22.1 集群的搭建。然后使用nginx 镜像在default 命名空间下创建一个名为

examPod,并为该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镜像自定义一个 ChartDeployment名称为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+KubernetesCICD 境部署(构建持续集成所需要的所有软件包在软件包CICD-Runner.tar.gz中)。CICD 应用系

统架构如下:

【适用平台】私有云

【题目1】安装GitLab 环境[1 ]

Kubernetes 集群中新建命名空间gitlab-ci,将GitLab 部署到该命名空间下,DeploymentService 名称均为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 ]

【适用平台】私有云

【题目1Pod 管理创建Pod[0.5 ]

default 命名空间下使用nginx:latest 镜像创建一个QoS 类为GuaranteedPod,名称

qos-demo

完成后提交master 节点的IP 地址、用户名和密码到答题框。

1.Pod 创建成功得0.2 分;

2.Pod QoS 类型为Guaranteed 0.3分。

【题目2】安全管理配置Pod 安全上下文[0.5 ]

使用busybox 镜像启动一个名为context-demoPod,为该Pod 配置安全上下文,要求

容器内以用户1000 和用户组3000 来运行所有进程,并在启动时执行“sleep1h”命令。

完成后提交master 节点的IP 地址、用户名和密码到答题框。

1.Pod 安全上下午配置正确得0.5 分。

【题目3CRD管理创建自定义资源类型[0.5 ]

Kubernetes 集群中自定义一种资源类型StudentAPI stable.example.com/v1,单数形式为student,复数形式为students,简写为stu,作用域为命名空间级,然后在default

名空间下创建一个名为examStudent对象。

完成后提交master 节点的IP 地址、用户名和密码到答题框。

1.资源类型Student 定义成功的0.3 分;

2.exam 创建成功得0.2 分。

【题目4】解析管理添加主机别名到Pod[0.5 ]

使用nginx 镜像在default 命名空间下创建一个名为nginxPod,并Pod/etc/hosts

中添加IP 地址127.0.0.1chinaskills的解析。

完成后提交master 节点的IP 地址、用户名和密码到答题框。

1.自定义解析配置正确得0.5 分。

【题目5HPA管理创建HPA 规则[1 ]

默认情况下HPA是无法调整伸缩灵敏度的,但不同的业务场景对伸缩灵敏度的要求不一样。要求在default命名空间下使用nginx镜像创建一个名为webdeployment,自定义HPA的伸缩灵敏度, 为该deployment 创建一个名为webHPA,扩容时立即新增当前9 数量的副本数,时间窗口为5s,伸缩范围为1–1000。例如一开始只有1 Pod,当CPU 使

用率超过80%时,Pod数量变化趋势为: 1 10 1001000

完成后提交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:v1reviews服务的Pod上。此外, 路径以/wpcatalog//consumercatalog/开头的HTTP 请求将被重写/newcatalog,并被发送到标签为version:v2

Pod上。

完成后提交master 节点的IP 地址、用户名和密码到答题框。

1.请求路由创建成功得0.2 分;

2.路由策略配置正确得0.3 分。

【任务5】容器云服务运维:Kubernetes 基于虚拟机的运维[4.0 ]

【适用平台】私有云

【题目1VM 管理创建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 分。

【题目3KubeVirt 运维创建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 分。

【题目4KubeVirt 运维启用快照[1 ]

KubeVirt 支持对VM 进行快照, 请启用KubeVirt 快照管理功能:

完成后提交master 节点的IP 地址、用户名和密码到答题框。

1.快照功能启用成功得1 分。

【任务6】容器云运维开发:KubernetesAPIs 运维开发[10 ]

【适用平台】私有云

【题目1Python 运维开发:基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

式展示。

创建Deploymentyaml的配置如下:

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 分。

【题目2Python 运维开发:基于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 分。

【题目3Python 运维开发: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}PodResponseBodyjson 格式输出。

POST /pod/{yamlfilename} 创建yaml 文件名称为{yamlfilename}PodResponse

Bodyjson格式。

编码完成后,“手工下载”文件服务器主目录所有*.yaml 文件到root 目录下,“手动执

行”所编写pod_server.py 程序, 提交答案进行检测。

1.HTTP 服务成功启动, 计1分;

2.发起指定参数的GET查询Pod 请求,成功查询指定名称的pod 服务,1 分;

3.发起指定参数的POST 创建Pod 请求,成功创建Pod 服务,计1 分。

【题目4Python 运维开发:Service资源RestfulAPIs HTTP 服务封装[4 ]

编写Python 程序实现Service资源管理程序,将Service资源管理的封装成Web 服务。

/root目录下创建service_server.py 程序, 实现Service的增删查改等Web 访问操作。

http.serverhost localhost,端口 8888;程序内部实现Kubernetes 认证。

提示说明:Python 标准库http.server 模块,提供了HTTP Server 请求封装。

需要实现的RestfulAPI 接口如下:

GET /services/{name},查询指定名称{name}ServiceResponseBodyjson 格式

输出。

POST /services/{yamlfilename} 创建yaml 文件名称为{yamlfilename}Service

ResponseBodyjson 格式,(手工将文件服务器主目录所有*.yaml 件下载到root 目录

下)。

DELETE /services/{name};删除指定名称的ServiceResponseBodyjson 格式。

编码完成后,自己手动执行提供Web HTTP 服务的service_server.py 程序,提交答案进

行检测。

1.HTTP 服务成功启动, 计1分;

2.发起指定参数的POST 创建service 请求,成功创建service资源,计1 分;

3.发起指定参数的GET查询service 请求成功查询指定名称的Service,计1 分;

4.发起指定参数的DELETE 删除service请求,成功删除指定名称的Service,计 1 分。

需要竞赛软件包环境可私信博主!