2022 年全国职业院校技能大赛高职组云计算赛项试卷(容器云)

#需要资源(软件包及镜像)或有问题的,可私聊博主!!!

#需要资源(软件包及镜像)或有问题的,可私聊博主!!!

#需要资源(软件包及镜像)或有问题的,可私聊博主!!!

【赛程名称】云计算赛项第二场**-**容器云

说明: 完成本任务需要两台安装了 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 工具完成Kubernetes 1.22.1 集群的搭建。然后使用 nginx 镜像在 default 命名空间下创建一个名为 exam 的Pod,并为该 Pod 设置环境变量 exam,其值为 2022。

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

  1. Kubernetes 集群部署成功得 1 分;
  1. Pod 创建成功且环境变量设置正确得 0.5 分。

【题目 2】平台部署--部署 Istio 服务网格[0.5 分]

在 Kubernetes 集群上完成 Istio 服务网格环境的安装,然后新建命名空间 exam,为该命名空间开启自动注入Sidecar。

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

  1. Istio 所有组件运行成功得 0.3 分;
  1. 命名空间 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 分;
  1. Helm 工具安装成功得 0.2 分;
  1. 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 分;
  1. 数据库安装且导入数据成功得 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 分;
  1. 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 分;
  1. 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 分;
  1. PHP 安装成功得 0.2 分;
  1. 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 + GitLab CI 来构建 CICD 环境,以缩短新功能开发上线周期,及时满足客户的需求,实现 DevOps 的部分流程,来减轻部署运维的负担,实现可视化容器生命周期管理、应用发布和版本迭代更新,请完成GitLab CI + 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 分;
  1. 项目导入成功得 0.5 分。

【题目 2】部署GitLab Runner[2 分]

将 GitLab Runner 部署到 gitlab-ci 命名空间下,Release 名称为 gitlab-runner,为 GitLab Runner 创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache 以加速构建速度,并将其注册到 GitLab 中。

完成后提交 master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包路径CICD-Runner.tar.gz)

  1. GitLab Runner 部署成功得 0.5 分;
  1. GitLab Runner 注册成功得 0.5 分;

  2. GitLab Runner 持久化配置成功得 1 分。

【题目 3】配置GitLab[1.5 分]

将 Kubernetes 集群添加到 demo-2048 项目中,并命名为 kubernetes-agent,项目命名空间选择 gitlab-ci。

完成后提交 master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包路径CICD-Runner.tar.gz)

  1. GitLab Agent 安装成功得 1 分;
  1. 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 分;
  1. 镜像构建成功得 1 分;
  1. 服务发布成功得 1 分;
  1. 服务能正常访问得 1 分。

【任务 4 】容器云服务运维:Kubernetes 基于容器的运维**[6** 分**]**

【适用平台】私有云

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

在 default 命名空间下使用nginx:latest 镜像创建一个QoS 类为 Guaranteed 的 Pod,名称为 qos-demo。

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

  1. Pod 创建成功得 0.2 分;
  1. Pod QoS 类型为Guaranteed 得 0.3 分。

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

使用 busybox 镜像启动一个名为 context-demo 的Pod,为该 Pod 配置安全上下文,要求容器内以用户 1000 和用户组 3000 来运行所有进程,并在启动时执行"sleep 1h"命令。

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

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

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

在 Kubernetes 集群中自定义一种资源类型 Student,API 为 stable.example.com/v1,单数形式为 student,复数形式为 students,简写为 stu,作用域为命名空间级,然后在 default 命名空间下创建一个名为 exam 的 Student 对象。

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

  1. 资源类型Student 定义成功的 0.3 分;
  1. 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 分。

【题目 5HPA 管理**--** 创建 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 分;
  1. 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 分;
  1. 规则配置正确得 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 命名空间下,使用 Istio Gateway 可以实现应用程序从外部访问, 请为 Bookinfo 应用创建一个名为 bookinfo-gateway 的网关,指定所有 HTTP 流量通过 80 端口流入网格,然后将网关绑定到虚拟服务 bookinfo 上。

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

  1. Bookinfo 应用部署成功得 0.2 分;
  1. Bookinfo 能通过网关访问得 0.3 分。

【题目 10】服务网格--创建基于用户身份的路由[0.5 分]

创建一个名为 reviews 路由,要求来自名为 Jason 的用户的所有流量将被路由到服务reviews:v2。

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

  1. 路由创建成功得 0.2 分;
  1. 用户限制正确得 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** 分**]**

【适用平台】私有云

【题目 1VM 管理**--** 创建 VM[0.5 分**]**

使用镜像 fedora-virt:v1.0 在 default 命名空间下创建一台 vm,名称为 vm-fedora,内存为 1G。

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

  1. VM 创建成功得 0.3 分;
  1. VM 配置正确得 0.2 分。

【题目 2 】存储与卷**--** 创建 emptyDisk 卷**[1** 分**]**

使用镜像 fedora-virt:v1.0 在 default 命名空间下创建一台 vmi,名称为 vmi-fedora,并使用 emptyDisk 卷为 vmi 挂载一块 2G 的磁盘。

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

  1. VMI 创建成功得 0.4 分;
  1. 卷挂载成功得 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 分;
  1. VMI 创建成功得 0.3 分;

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

KubeVirt 支持对 VM 进行快照,请启用KubeVirt 快照管理功能:完成后提交 master 节点的 IP 地址、用户名和密码到答题框。

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

【任务 6 】容器云运维开发:Kubernetes APIs 运维开发**[10** 分**]**

【适用平台】私有云

【题目 1Python 运维开发:基于 Kubernetes Restful API 实现 Deployment 创建**[2** 分**]**

在提供的OpenStack 私有云平台上,使用 k8s-python-dev 镜像创建 1 台云主机,云主机类型使用 4vCPU/12G 内存/100G 硬盘。该主机中已经默认安装了所需的开发环境,登录默认账号密码为"root/1DaoYun@2022"。

使用Kubernetes Restful API 库,在/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 分;
  1. 检查创建的 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 分;
  1. 查询 job 资源,配置信息无误,计 0.5 分。

【题目 3Python 运维开发:Pod 资源的 Restful APIs HTTP 服务封装**[3** 分**]**

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

在/root 目录下创建pod_server.py 程序,实现Pod 的增删查改等Web 访问操作。http.server的 host 为 localhost,端口 8889;程序内部实现Kubernetes 认证。

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

需要实现的 Restful API 接口如下:

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

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

编写 Python 程序实现 Service 资源管理程序,将 Service 资源管理的封装成 Web 服务。在/root 目录下创建 service_server.py 程序,实现 Service 的增删查改等 Web 访问操作。http.server 的 host 为 localhost,端口 8888;程序内部实现Kubernetes 认证。

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

需要实现的 Restful API 接口如下:

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 分;
  1. 发起指定参数的 POST 创建 service 请求,成功创建 service 资源,计 1 分;
  1. 发起指定参数的GET 查询 service 请求,成功查询指定名称的 Service,计 1 分;
  1. 发起指定参数的DELETE 删除 service 请求,成功删除指定名称的 Service,计 1 分。
相关推荐
aliceDingYM3 小时前
Linux python3.6安装mayavi报错
linux·python·ui
季春二九4 小时前
解决 Docker 容器镜像拉取难题:全面指南
运维·docker·容器
^_^ 纵歌4 小时前
virtualbox和docker的区别和优缺点以及如何选择
运维·docker·容器
.生产的驴6 小时前
SpringBoot AOP切入点表达式
spring boot·后端·python
逆水寻舟6 小时前
算法学习记录2
python·学习·算法
march of Time7 小时前
docker容器技术、k8s的原理和常见命令、用k8s部署应用步骤
docker·容器·kubernetes
B站计算机毕业设计超人7 小时前
计算机毕业设计Python深度学习美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
大数据·python·深度学习·机器学习·数据分析·课程设计·推荐算法
码农超哥同学7 小时前
Python面试题:请解释 `lambda` 函数是什么,并举一个例子
开发语言·python·面试·编程
古猫先生7 小时前
顶会FAST24最佳论文|阿里云块存储架构演进的得与失-1.引言
阿里云·云计算
YCyjs7 小时前
云计算【第一阶段(27)】DHCP原理与配置以及FTP的介绍
linux·运维·服务器·云计算