目录
2022年全国职业院校技能大赛(高职组)
“云计算”赛项赛卷1
第二场次:容器云(40分)
任务一、容器云服务搭建任务(5分)
任务二、容器云应用部署任务(15分)
任务三、容器云服务运维任务(10分)
任务四、容器云运维开发任务(10分)(本任务为4-6道Kubernetes APIs 运维开发题,只公布考试范围,不公布赛题)
说明:完成本任务需要两台安装了CentOS7.9操作系统的云主机master和node,镜像包中有本次容器云平台部署和运维所需的所有文件。
云梦公司存在两套虚拟化调度平台,虚拟机使用OpenStack调度,容器使用Kubernetes调度,两套系统两班人马,人力和资源都存在着一定的重叠和浪费。且该公司产品开发上线周期长,用户规模大且版本更新频繁。新版本的每次上线,产品都要承受极大的压力。
经过技术调研,公司决定引入KubeVirt实现OpenStack到Kubernetes的全面转型,用Kubernetes来管一切虚拟化运行时,包含裸金属、VM、容器等,实现一套调度,多种运行时。同时研发团队决定搭建基于Kubernetes 的CICD环境,基于这个平台来实现DevOps的部分流程,并基于Kubernetes实现业务系统的灰度发布。
为了能够让云梦公司开发的Web应用系统产品能够缩减开发周期,快速迭代版本,并实现业务从老版本到新版本的平滑过渡,避免升级过程中出现的问题对用户造成的影响。研发部决定使用微服务架构,实现基于Kubernetes的容器化部署、CICD和运维开发。
题目1. 容器云平台搭建(5分)
1. 在master节点完成Docker CE、docker-compose以及Harbor仓库的安装,导入所有镜像,并推送到私有仓库。
2. 在master、node节点完成Kubernetes集群的安装。
3. 在Kubernetes集群中完成KubeVirt环境的安装。
4. 在Kubernetes集群中完成服务网格(ServiceMesh)项目Istio环境的安装。
5. 集群部署完成后,使用kubectl自带排序功能,列出集群内所有的Pod,并以name字段排序。
题目2. 容器云应用(7分)
该公司开发了一套基于Spring Cloud的分布式系统套件,并实现全容器化部署,该系统主要模块如下:
模块 |
说明 |
Config |
配置中心 |
Gateway |
微服务网关 |
Eureka |
注册中心 |
Spring Boot Admin |
监控和管理的源软件 |
Zipkin |
分布式实时数据追踪系统 |
Hello Service |
服务注册 |
试将Gateway组件、Eureka组件、Spring Boot Admin组件和Zipkin组件按照要求进行容器化,其它组件Config、Hello Service已经实现容器化,直接从仓库中拉取镜像运行容器即可。
1. 编写Dockerfile基于centos:7.9.2009基础镜像制作Gateway镜像,生成镜像名为chinaskill-gateway:v1.0,要求安装JDK环境和Gateway服务,并设置服务自启动。
2. 编写Dockerfile基于centos:7.9.2009基础镜像制作Eureka镜像,生成镜像名为chinaskill-eureka:v1.0,要求安装JDK环境和Eureka服务,并设置服务自启动。
3. 编写Dockerfile基于centos:7.9.2009基础镜像制作Zipkin镜像,生成镜像名为chinaskill-zipkin:v1.0,要求安装JDK环境和Zipkin服务,并设置服务自启动。
4. 编写Dockerfile基于centos:7.9.2009基础镜像制作Hello Service镜像,生成镜像名为chinaskill-hello:v1.0,要求安装Hello Service服务,并设置服务自启动。
5. 编写docker-compose.yaml文件,使用上述镜像编排部署Spring Cloud分布式系统。
题目3. 基于Kubernetes构建CICD(8分)
该公司决定采用GitLab + GitLab CI + Harbor + Kubernetes架构来构建CICD环境,以缩短新功能开发上线周期,及时满足客户的需求,实现DevOps的部分流程,来减轻部署运维的负担,实现可视化容器生命周期管理、应用发布和版本迭代更新,请完成CICD环境部署。CICD应用系统架构如下:
1.在Kubernetes集群上完成GitLab程序的部署,副本数为2,使用NodePort方式将GitLab服务对外暴露30081端口。
2.在Kubernetes集群上完成GitLab-Runner的部署,并完成Shared Runner的注册。
3. 在GitLab中开启Container Registry,并完成Environment variables的设置。
4.将Kubernetes集群添加到GitLab中,并命名为cicd-cluster。
5. 编写.gitlab-ci.yml自动化脚本,要求整个构建流程包含test、build、release、review和deploy几个阶段。
6.将提供的项目包推送到GitLab仓库并触发自动构建,完成代码编译、镜像构建、镜像推送和服务发布的自动化实现。
题目4. Kubernetes基于容器的运维(6分)
1.将master节点设置为污点,并且重新调度该节点上所有允许的pods。
2. Kubernetes默认的证书有效期只有一年时间,对于某些场景下一个时间足够长的证书有效期是非常有必要的,请将Kubernetes集群证书的有效期延长至20年。
3.在master节点/root目录下编写YAML文件limitrange.yaml,具体要求如下:
(1)LimitRange名称:mem-limit-range;
(2)命名空间:default;
(3)容器默认资源请求为256Mi内存、500m CPU;
(4)容器资源请求上限为800Mi内存、3000m CPU;
(5)内存和CPU超售的比率均为2。
完成后使用该yaml文件创建LimitRange。
4. 为master节点打上标签“disktype=ssd”和标签“exam=chinaskill”,然后在master节点/root目录下编写YAML文件deployment.yaml创建Deployment,具体要求如下:
(1)Deployment名称:nginx-deployment;
(2)要求Pod只能调度到具有标签“disktype=ssd”的节点上;
(3)具有标签“exam=chinaskill”的节点优先被调度。
完成后使用该YAML文件创建Deployment。
5. 在master节点/root目录下编写YAML文件role.yaml文件创建集群角色,具体要求如下:
(1)集群角色名称:deployment-clusterrole;
(2)该角色拥有对Deployment、Daemonset、StatefulSet的创建权限。
完成后使用该YAML文件创建集群角色。
6. 在master节点/root目录下编写YAML文件创建network.yaml创建网络策略,具体要求如下:
(1)网络策略名称:exam-nework;
(2)针对namespace test下的Pod,只允许相同namespace下的Pod访问,并且可访问Pod的9000端口。
完成后使用该YAML文件创建网络策略。
7. 在master节点/root目录下编写YAML文件pv.yaml创建PV,具体要求如下:
(1)PV名称:app-pv;
(2)容量为10Gi;
(3)访问模式为ReadWriteMany;
(4)volume的类型为hostPath,位置为/src/app-config。
完成后使用该YAML文件创建PV。
8. 在Kubernetes集群中完成Bookinfo样例程序的部署,在master节点/root目录下编写YAML文件istio.yaml创建请求路由,具体要求如下:
(1)路由名称:bookinfo-virtualservice;
(2)将所有流量路由到每个微服务的 v1 版本。
完成后使用该YAML文件创建请求路由。
题目5. Kubernetes基于虚拟机的运维(4分)
根据Garnter的最新预测,到2022年将会有75%的生产应用全部跑在容器环境之上。由于技术原因,某公司的多数架构仍运行在虚拟机上。经过技术调研,KubeVirt支持完全的虚拟机纳管,可以完美迁移因为内核版本过于陈旧或者语言问题而无法迁移到容器的部分应用,所以公司决定将业务全部迁移到Kubernetes集群中。
1. 在KubeVirt中启用实时迁移功能,以实现将一台正在运行的虚拟机实例从一个节点迁移到另一个节点,期间工作负载继续运行且能保持持续访问。
2.使用提供的OpenStack qcow2镜像,在master节点/root目录下编写YAML文件创建VMI,具体要求如下:
(1)VMI名称:chinaskill-vmi;
(2)运行策略:Manual;
(3)磁盘驱动:virtio。
完成后使用该YAML文件创建VMI,然后使用virtctl工具启动该VMI。
3. 在master节点上编写YAML文件vmi-sshkey.yaml为虚拟实例chinaskill-vmi进行动态密钥注入,具体要求如下:
(1)使用 qemuGuestAgent 将访问凭证api附加到chinaskill-vmi。
完成后运行该YAML文件并使用SSH验证VMI的连通性。
题目6. Kubernetes APIs 运维开发(10分)
编写Python脚本,调用Kubernetes API实现对Kubernetes容器云平台进行管理和运维。