#需要资源(软件包及镜像)或有问题的,可私聊博主!!!
#需要资源(软件包及镜像)或有问题的,可私聊博主!!!
#需要资源(软件包及镜像)或有问题的,可私聊博主!!!
容器云
【赛程名称】第一场:模块一 私有云、模块二 容器云
项目需求:某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台建设,平台聚焦“DevOps 建运一体”和“数据驱动产品开发”,拟采用开源 OpenStack 搭建企业 内部私有云平台,开源 Kubernetes 搭建云原生服务平台,选择国内主流公有云平台服务,基于数字化平台底座,面向业务开发云应用产品。
拟将该任务交给工程师A 与B,分工协助完成云平台服务部署、云应用开发、云系统运维等任务,系统架构如下:
系统架构如图1 所示,IP 地址规划如表1 所示。
图 1 系统架构图
表 1 IP 地址规划
设备名称 | 主机名 | 接口 | IP 地址 | 说明 |
云服务器1 | Controller | eth0 | 192.168.x.0/24 | Vlan x |
eth1 | 自定义 | 自行创建 | ||
云服务器2 | Compute | eth0 | 192.168.x.0/24 | Vlan x |
eth1 | 自定义 | 自行创建 | ||
云服务器3...云服务器 n | 自定义 | eth0 | 192.168.x.0/24 | 用于实操题 |
PC-1 | 本地连接 | 172.16.232.0/24 | PC 使用 |
说明:
- 竞赛使用集群模式进行,比赛时给每个参赛队提供独立的租户与用户,各用户的资源配额相同,选手通过用户名与密码登录竞赛用私有云平台,创建云主机进行相应答题;同组 2 名选手的账号密码一样。
- 表中的x 为赛位号;在进行OpenStack 搭建时的第二块网卡地址根据题意自行创建;
- 根据图表给出的信息,检查硬件连线及网络设备配置,确保网络连接正常;
- 考试所需要的账号资源、竞赛资源包与附件均会在考位信息表与设备确认单中给出;
- 竞赛过程中,为确保服务器的安全,请自行修改服务器密码;在考试系统提交信息时,请确认自己的 IP 地址,用户名和密码。
【任务 4】容器云服务搭建[5 分]
【适用平台】私有云
【题目 1】2.1.1 部署容器云平台[5 分]
使用 OpenStack 私有云平台创建两台云主机,云主机类型使用 4vCPU/12G/100G 类型,分别作为 Kubernetes 集群的 Master 节点和 node 节点,然后完成 Kubernetes 集群的部署,并完成 Istio 服务网格、KubeVirt 虚拟化和 Harbor 镜像仓库的部署。
完成后提交 Master 节点的用户名、密码和 IP 到答题框。
【任务 5】容器云服务运维[15 分]
【适用平台】私有云
【题目 1】2.2.1 容器化部署 MariaDB [0.5 分]
编写 Dockerfile 文件构建 mysql 镜像,要求基于 centos 完成 MariaDB 数据库的安装和配置,并设置服务开机自启。编写 Dockerfile 构建镜像 erp-mysql:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 MariaDB 数据库的安装,设置 root 用户的密码为 tshoperp,新建数据库 jsh_erp 并导入数据库文件 jsh_erp.sql,并设置 MariaDB 数据库开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)
【题目 2】2.2.2 容器化部署 Redis [0.5 分]
编写 Dockerfile 文件构建 redis 镜像,要求基于 centos 完成 Redis 服务的安装和配置,并设置服务开机自启。编写 Dockerfile 构建镜像 erp-redis:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 Redis 服务的安装,修改其配置文件关闭保护模式,并设置 Redis 服务开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)
【题目 3】2.2.3 容器化部署Nginx [0.5 分]
编写 Dockerfile 文件构建 nginx 镜像,要求基于 centos 完成 Nginx 服务的安装和配置,并设置服务开机自启。编写 Dockerfile 构建镜像 erp-nginx:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 Nginx 服务的安装,使用提供的 app.tar.gz 和 nginx.conf 启动 Nginx 服务,并设置开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)
【题目 4】2.2.4 容器化部署 ERP[0.5 分]
编写 Dockerfile 文件构建 erp 镜像,要求基于 centos 完成 JDK 环境和 ERP 服务的安装与配置,并设置服务开机自启。编写 Dockerfile 构建镜像 erp-server:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 JDK 环境的安装,启动提供的 jar 包,并设置服务开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)
【题目 5】2.2.5 编排部署 ERP 管理系统[1 分]
编写 docker-compose.yaml 文件,要求使用镜像 mysql、redis、nginx 和 erp 完成 ERP管理系统的编排部署。编写 docker-compose.yaml 完成 ERP 管理系统的部署,要求定义mysql、redis、nginx和erp 共四个Service,分别使用镜像erp-redis:v1.0、erp-mysql:v1.0、erp-nginx:v1.0和 erp-server:v1.0,并将 nginx 服务的 80 端口映射到宿主机的 8888 端口。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)
【题目 6】2.2.6 部署 GitLab [1 分]
将 GitLab 部署到 Kubernetes 集群中,设置 GitLab 服务 root 用户的密码,使用Service 暴露服务,并将提供的项目包导入到 GitLab 中。在 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)
【题目 7】2.2.7 部署 GitLab Runner [1 分]
将 GitLab Runner 部署到 Kubernetes 集群中,为 GitLab Runner 创建持久化构建缓存目录以加速构建速度,并将其注册到 GitLab 中。
将 GitLab Runner 部署到 gitlab-ci 命名空间下,Release 名称为 gitlab-runner,为 GitLab Runner 创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache 以加速构建速度,并将其注册到 GitLab 中。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)
【题目 8】2.2.8 部署 GitLab Agent [1 分]
将 Kubernetes 集群添加到 GitLab 项目中指定名称和命名空间。
将 Kubernetes 集群添加到 demo-2048 项目中,并命名为 kubernetes-agent,项目命名空间选择 gitlab-ci。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)
【题目 9】2.2.9 构建 CI/CD [2 分]
编写流水线脚本触发自动构建,要求基于 GitLab 项目完成代码的编译、镜像的构建与推送,并自动发布应用到 Kubernetes 集群中。
编写流水线脚本.gitlab-ci.yml 触发自动构建,具体要求如下:
- 基于镜像 maven:3.6-jdk-8 构建项目的 drone 分支;
- 构建镜像的名称:demo:latest;
- 将镜像推送到 Harbor 仓库 demo 项目中;
- 将 demo-2048 应用自动发布到Kubernetes 集群 gitlab-ci 命名空间下。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)
【题目 10】2.2.10 服务网格:创建 VirtualService [1 分]
将 Bookinfo 应用部署到 default 命名空间下,为 Bookinfo 应用创建一个名为reviews的 VirtualService,要求来自名为 Jason 的用户的所有流量将被路由到 reviews 服务的 v2版本。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ServiceMesh.tar.gz)
【题目 11】2.2.11 KubeVirt 运维:创建 VMI [1 分]
使用提供的镜像在default 命名空间下创建一台VMI,名称为exam,指定VMI 的内存、CPU、网卡和磁盘等配置,并开启 Sidecar 注入。将提供的镜像 cirros-0.5.2-x86_64-disk.img 转换为 docker 镜像 cirros:v1.0,然后使用镜像 cirros:v1.0 镜像在 default 命名空间下创建一台 vmi,名称为 vmi-cirros,内存为 1024M。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。
【题目 12】2.2.12 容器云平台优化:使用审计日志[2 分]
启用审计日志可以帮助集群管理员快速的定位问题。请启用Kubernetes 集群的审计日志,要求以JSON 格式保存审计日志并输出到/etc/kubernetes/audit- logs/audit.log 文件中,日志最多保留 10 天,单个日志文件不超过 500M。然后编写审计策略文件/etc/kubernetes/audit-policy/policy.yaml,要求在日志中用 RequestResponse 级别记录 Pod 变化,并记录 kube-system 中 ConfigMap 变更的请求消息体。
完成后提交 master 节点的用户名、密码和 IP 地址到答题框。
【题目 13】2.2.13 容器云平台排错:容器引擎报错[1.5 分]
使用提供的 chinaskill-k8s-error01 镜像创建一台云主机(云主机的登录用户名为 root,密码为 Abc@1234),该云主机中存在错误的容器服务,错误现象为无法正常使用 crictl ps -l 命令,请修复容器服务。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。
【题目 14】2.2.14 容器云平台排错:DNS 服务报错[1.5 分]
使用提供的 chinaskill-k8s-error01 镜像创建一台云主机(云主机的登录用户名为 root,密码为 Abc@1234),该云主机中存在错误的 DNS 服务,错误现象为 coredns 一直处于 CrashLoopBackOff 状态,请修复 CoreDNS 服务,并将并发上限更改为 5000。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。
【任务 6】容器云运维开发[10 分]
【适用平台】私有云
【题目 1】2.3.1 管理 service 资源[2 分]
Kubernetes Python 运维脚本开发,使用 Restful APIs 方式管理 service 服务。
使用已经部署完成的 Kubernetes 两节点云平台,在 Master 节点安装 Python 3.7.3 的运行环境与依赖库。
使用 python request 库和 Kubernetes Restful APIs ,在/root 目录下, 创建
api_manager_service.py 文件,要求编写 python 代码,代码实现以下任务:
- 首先查询查询服务 service,如果 service 名称“nginx-svc”已经存在,先删除。
- 如果不存在“nginx-svc”,则使用 service.yaml 文件创建服务。
- 创建完成后,查询该服务的信息,查询的 body 部分以 json 格式的文件输出到当前目录下的 service_api_dev.json 文件中。
- 然后使用 service_update.yaml 更新服务端口。
- 完成更新后,查询该服务的信息,信息通过控制台输出,并通过 json 格式追加到 service_api_dev.json 文件后。
编写完成后,提交该云主机的用户名、密码和 IP 地址到答题框。
【题目 2】2.3.2 管理 Pod 服务[3 分]
Kubernetes Python 运维脚本开发-使用 SDK 方式管理 Pod 服务。
使用已经部署完成的 Kubernetes 两节点云平台,在 Master 节点安装 Python 3.7.3 的运行环境与依赖库。
使用 Kubernetes python SDK 的“kubernetes”Python 库,在/root 目录下,创建
sdk_manager_deployment.py 文件,要求编写python 代码,代码实现以下任务:
- 首先使用 nginx-deployment.yaml 文件创建 deployment 资源。
- 创建完成后,查询该服务的信息,查询的 body 部分通过控制台输出,并以 json格式的文件输出到当前目录下的 deployment_sdk_dev.json 文件中。编写完成后,提交该云主机的用户名、密码和 IP 地址到答题框。
【题目 3】2.3.3 Kubernetes CRD 自定义资源的管理封装[3 分]
Kubernetes 容器云平台通过 CRD 机制进行自定义 APIs 资源拓展,将 chinaskill- cloud-*.yaml 共 5 个文件复制到 root 目录下。参考 chinaskill-cloud-11.yaml 文件,编写 CRD 文件“chinaskill-cloud-crd.yaml”,放在 root 目录下。
说明:Competition CRD 命名要求如下:
Kind 为 Competition
Plural 为 competitions
singular 为 competition
shortNames 为 cpt
session 含义是赛程
content 含义为竞内容。
使用已建好的 Kubernetes Python 运维开发环境,在/root 目录下创建 crd
_manager.py 脚本。crd_manager.py 编写基于 Kubernetes SDK 实现 Competition CRD 的创建、删除与事件变化监听。
crd_manager.py 内部实现 3 个方法:
crd_manager.py 内部实现 3 个方法:
- 实现方法 create_crd(),实现对 Competition CRD 的创建。
- 实现方法 delete_crd(),实现对 Competition CRD 的删除。
- 实现方法watch_crd_object(),实现对 CRD 资源的变化事件监听,将监听到Competition CRD 被删除,将 event 信息输出到控制台,并停止监听。
【题目 4】2.3.4 Kubernetes CRD 的自定义对象管理封装[2 分]
基于前一题目的 Competition CRD,使用已建好的 Kubernetes Python 运维开发环
境,在/root 目录下创建crd_object_manager.py 脚本。crd_object_manager.py 编写基于
Kubernetes SDK 实现 Competition CRD 的自定义对象的创建、删除与事件变化监听。
crd_manager.py 内部实现 3 个方法:
- 实现方法 create_crd_object(ymlfile:str),实现 CRD 的自定义对象的创建,yamlfile 为 CRD 的自定义对象 yaml 文件。
- 实现方法 delete_crd_object(crd_object_name:str),实现创建 CRD 功能,
crd_object_name 为 CRD 的自定义对象名称。
实现方法 watch_crd_object(crd_object_name:str),实现 CRD 的自定义对象变化事件监听,当监听到 CRD 的自定义对象的名称为crd_object_name 被删除时,将 event信息输出到控制台,并停止监听。