目录
【任务?2】容器云应用部署:?Docker Compose 编排部署[7.0 分]
【任务?3】容器云应用部署:?基于?Kubernetes?构建?CICD[8.0 分]
【任务?4】容器云服务运维:?Kubernetes 基于容器的运维[6 分]
【任务?5】容器云服务运维:?Kubernetes ?基于虚拟机的运维[4.0 分]
【任务?6】容器云运维开发:Kubernetes?APIs 运维开发[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】平台部署--部署容器云平台[1.5 分]
登录?OpenStack 私有云平台,使用?CentOS7.9 镜像创建两台云主机,使用?kubeeasy 工具?完成?Kubernetes?1.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 分。 |
【适用平台】私有云
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 分。 |
该公司决定采用?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 分; 2.项目导入成功得?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?分; 2.GitLab?Runner?注册成功得?0.5?分; |
3.GitLab?Runner?持久化配置成功得?1?分。 |
【题目?3】配置?GitLab[1.5 分]
将?Kubernetes?集群添加到?demo-2048?项目中, 并命名为?kubernetes-agent,项目命名空
间选择?gitlab-ci。
完成后提交?master?节点的用户名、密码和?IP?地址到答题框。(需要用到的软件包路径
CICD-Runner.tar.gz)
1.GitLab?Agent?安装成功得?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?分。 |
【适用平台】私有云
【题目?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 来运行所有进程,并在启动时执行“sleep?1h”命令。
完成后提交?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?命名空间下,?使用?Istio??Gateway??可?以?实?现应?用程?序?从?外?部?访?问?,?请?为?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 分。 |
【适用平台】私有云
【题目?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 分。 |
【适用平台】私有云
【题目?1】Python 运维开发:基于?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 分; 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?资源的?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 分; |
3.发起指定参数的?POST 创建?Pod 请求,?成功创建?Pod 服务,计?1 分。 |
【题目?4】Python 运维开发:?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?分; 2.发起指定参数的?POST 创建?service 请求,成功创建?service?资源,计?1 分; 3.发起指定参数的?GET?查询?service 请求,?成功查询指定名称的?Service,计?1 分; 4.发起指定参数的?DELETE 删除?service?请求,成功删除指定名称的?Service,计 1 分。 |