当前位置:   article > 正文

2023全国技能大赛云计算应用赛项 私有云 容器云 公有云_在 openstack 中,修改相关配置文件,修改调度器规则采用缓存调度器,缓存主机信息,

在 openstack 中,修改相关配置文件,修改调度器规则采用缓存调度器,缓存主机信息,

2023 年全国职业院校技能大赛(高职组

模块一 私有云

[任务 1] 私有云服务搭建[5 分]

【适用平台】私有云

【题目 1】1.1.1 基础环境配置[0.2 分]

1.控制节点主机名为 controller,设置计算节点主机名compute; 2.hosts 文件将 IP 地址映射为主机名。

使用提供的用户名密码,登录提供的 OpenStack 私有云平台,在当前租户下,使用CentOS7.9 镜像,创建两台云主机,云主机类型使用 4vCPU/12G/100G_50G 类型。当前租户下默认存在一张网卡,自行创建第二张网卡并连接至 controller 和 compute 节点(第二张网卡的网段为 10.10.X.0/24,X 为工位号,不需要创建路由)。自行检查安全组策略,以确保网络正常通信与 ssh 连接,然后按以下要求配置服务器: 

设置控制节点主机名为 controller,设置计算节点主机名为 compute; 

Controller:compute

hostnamectl set-hostname controller;bash

hostnamectl set-hostname compute;bash

Controller;compute

环境Centos7.9两块网卡,两块硬盘

修改 hosts 文件将 IP 地址映射为主机名; 

Controller;compute

cat >> /etc/hosts << EOF

1.1.1.10 controller

1.1.1.20 compute

EOF

【题目 2】1.1.2 Yum 源配置[0.2 分]

使用提供的 http 服务地址,在 http 服务下,存在 centos7.9 和 iaas 的网络 yum 源, 使用该 http 源作为安装 iaas 平台的网络源。分别设置 controller 节点和 compute 节点yum 源文件 http.repo。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

Controller:

开始配置yum服务器

mkdir /opt/{centos,openstack}

mount -o loop CentOS-7-x86_64-DVD-2009_2.iso /mnt/

cp -rvf /mnt/* /opt/centos/

umount /mnt/

mount -o loop chinaskills_cloud_iaas_v2.0.3_3.iso /mnt/

cp -rvf /mnt/* /opt/openstack/

umount /mnt

下载http服务,开启服务

systemctl start httpd

systemctl enable http

镜像转移转移到网页根目录

关闭防火墙沙河

systemctl stop firewalld

setenforce 

配置yum

[centos]

name=centos

baseurl=file:/var/www/html/centos

gpgcheck=0

enabled=1

[openstack]

name=openstack

baseurl=file:/var/www/html/openstack/iaas-repo

gpgcheck=0

enabled=

Compute

配置yum仓库

[centos]

name=centos

baseurl=http://1.1.1.10/centos

gpgcheck=0

enabled=1

[openstack]

name=openstack

baseurl=http://1.1.1.10/openstack/iaas-repo

gpgcheck=0

enabled=1

【题目 3】1.1.3 配置无秘钥 ssh[0.2 分]

配置 controller 节点可以无秘钥访问 compute 节点,配置完成后,尝试 ssh 连接compute 节点的 hostname 进行测试。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。 

controller/compute:

ssh-keygen

ssh-copy-id controller

ssh-copy-id compute

【题目 4】1.1.4 基础安装[0.2 分]

在控制节点和计算节点上分别安装 openstack-iaas 软件包。

在控制节点和计算节点上分别安装 openstack-iaas 软件包,根据表 2 配置两个节点脚本文件中的基本变量(配置脚本文件为/etc/openstack/openrc.sh)。 

表 2 云平台配置信息

服务名称

变量

参数/密码

Mysql

root

000000

Keystone

000000

Glance

000000

Nova

000000

Neutron

000000

Heat

000000

Zun

000000

Keystone

DOMAIN_NAME

demo

Admin

000000

Rabbit

000000

Glance

000000

Nova

000000

Neutron

000000

Heat

000000

Zun

000000

 

Neutron

Metadata

000000

External Network

eth1(以实际为准)

controller/compute:

yum -y install openstack-iaas

Compute:

Fdisk /dev/sdb

给sdb进行分区,后续跑脚本需要

分出两个20一个5还剩5G后续做题在进行分区

Controller:

编辑配置文件

vim /etc/openstack/openrc.sh

HOST_IP=1.1.1.10

HOST_PASS=root

HOST_NAME=controller

HOST_IP_NODE=1.1.1.20

HOST_PASS_NODE=root

HOST_NAME_NODE=compute

network_segment_IP=1.1.1.0/24

RABBIT_USER=openstack

RABBIT_PASS=000000

DB_PASS=000000

DOMAIN_NAME=demo

ADMIN_PASS=000000

DEMO_PASS=000000

KEYSTONE_DBPASS=000000

GLANCE_DBPASS=000000

GLANCE_PASS=000000

PLACEMENT_DBPASS=000000

PLACEMENT_PASS=000000

NOVA_DBPASS=000000

NOVA_PASS=000000

NEUTRON_DBPASS=000000

NEUTRON_PASS=000000

METADATA_SECRET=000000

INTERFACE_NAME=ens34

Physical_NAME=provider

minvlan=1

maxvlan=1000

CINDER_DBPASS=000000

CINDER_PASS=000000

BLOCK_DISK=sdb1

SWIFT_PASS=000000

OBJECT_DISK=sdb2

STORAGE_LOCAL_NET_IP=1.1.1.20

TROVE_DBPASS=000000

TROVE_PASS=000000

HEAT_DBPASS=000000

HEAT_PASS=000000

CEILOMETER_DBPASS=000000

CEILOMETER_PASS=000000

AODH_DBPASS=000000

AODH_PASS=000000

ZUN_DBPASS=000000

ZUN_PASS=000000

KURYR_PASS=000000

OCTAVIA_DBPASS=000000

OCTAVIA_PASS=000000

MANILA_DBPASS=000000

MANILA_PASS=000000

SHARE_DISK=sdb3

CLOUDKITTY_DBPASS=000000

CLOUDKITTY_PASS=000000

BARBICAN_DBPASS=000000

BARBICAN_PASS=000000

配置完成传送给compute​​​​​​​

controller/compute:

先给双方拍个快照

执行初始化文件

iaas-pre-host.sh#初始化 跑完会提示建议重启

reboot  

【题目 5】1.1.5 数据库安装与调优[0.5 分]

在 controller 节点上使用 iaas-install-mysql.sh 脚本安装 Mariadb、Memcached、RabbitMQ 等服务。安装服务完毕后,修改/etc/my.cnf 文件,完成下列要求:

1.设置数据库支持大小写;

2.设置数据库缓存 innodb 表的索引,数据,插入数据时的缓冲为 4G;

3.设置数据库的 log buffer 为 64MB;

4.设置数据库的 redo log 大小为 256MB;

5.设置数据库的 redo log 文件组为 2。

6.修改Memcached 的相关配置,将内存占用大小设置为 512MB,调整最大连接数参数为2048;

调整 Memcached 的数据摘要算法(hash)为 md5;

Controller;

iaas-install-mysql.sh

mysql -uroot -p000000

show variables like 'innodb_log%';  #可以快速定义参数

vim /etc/my.cnf

lower_case_table_names =1  #数据库支持大小写

innodb_buffer_pool_size = 4G  #数据库缓存

innodb_log_buffer_size = 64MB  #数据库的log buffer即redo日志缓冲

innodb_log_files_size = 256MB  #设置数据库的redo log即redo日志大小

innodb_log_file_in_group = 2  #数据库的redo log文件组即redo日志的个数配置

systemctl restart mariadb

vim /etc/sysconfig/memcached

MAXCONN="2048"    #修改最大连接参数2048

CACHESIZE="512"   #修改内存占用大小为512

hash_algorithm=md5 #添加一行调整Memcached算法为md5

systemctl restart memcached

 

【题目 6】1.1.6 Keystone 服务安装与使用[0.5 分]

在控制节点上安装 Keystone 服务并创建用户。

在 controller 节点上使用 iaas-install-keystone.sh 脚本安装 Keystone 服务。

然后创建 OpenStack 域 210Demo,其中包含 Engineering 与 Production 项目,在域

210Demo 中创建组 Devops,其中需包含以下用户:  

1.Robert 用户是 Engineering 项目的用户(member)与管理员(admin),email 地址为:Robert@lab.example.com。  

2.George 用 户 是 Engineering 项 目 的 用 户 ( member ), email 地址为:

George@lab.example.com。

3.William 用户是 Production 项目的用户(member)与管理员(admin),email 地址为:William@lab.example.com。

4.John 用户是 Production 项 目 的 用 户 ( member ), email 地 址 为 :

John@lab.example.com。

controller

iaas-install-keystone.sh

source /etc/keystone/admin-openrc.sh   #导入环境变量

openstack domain create 210Demo  #创建域210Demo

openstack group create devops --domain 210Demo  #在210Demo中创建devops用户组

openstack project create Engineering --domain 210Demo  #在210Demo中创键Engineering的项目

openstack project create Production --domain 210Demo    #在210Demo中创建Production的项目

openstack user create --domain 210Demo --project Engineering Robert --email Robert@lab.example.com  #在210Demo域中,将用户Robert分配到Engineering项目,并设置其电子邮件地址。

openstack user create --domain 210Demo --project Engineering George --email George@lab.example.com  #在210Demo域中,将用户George分配到Engineering项目,并设置其电子邮件地址。

openstack user create --domain 210Demo --project Production William --email William@lab.example.com #在210Demo域中,将用户William分配到Production项目,并设置其电子邮件地址。

openstack user create --domain 210Demo --project Production John --email John@lab.example.com    #在210Demo域中,将用户John分配到Production项目,并设置其电子邮件地址。

openstack role add --user Robert --project Engineering member #将用户Robert分配到Engineering项目的member角色。

openstack role add --user Robert --project Engineering admin  #将用户Robert分配到Engineering项目的admin角色。

openstack role add --user George --project Engineering member #将用户George分配到Engineering项目的member角色。

openstack role add --user William --project Production member #将用户William分配到Production项目的member角色。

openstack role add --user William --project Production admin  #将用户William分配到Production项目的admin角色。

openstack role add --user John --project Production member    #将用户John分配到Production项目的member角色。

【题目 7】1.1.7 Glance 安装与使用[0.5 分]

在控制节点上安装 Glance 服务。上传镜像至平台,并设置镜像启动的要求参数。

在 controller 节点上使用 iaas-install-glance.sh 脚本安装 glance 服务。然后使用提供的 coreos_production_pxe.vmlinuz 镜像(该镜像为 Ironic Deploy 镜像,是一个AWS 内核格式的镜像,在 OpenStack Ironic 裸金属服务时需要用到)上传到 OpenStack 平台中,命名为 deploy-vmlinuz。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

controller:

iaas-install-glance.sh

上传镜像

openstack image create deploy-vmlinuz --container-format aki < coreos_production_pxe.vmlinuz

【题目 8】1.1.8 Nova 安装与优化[0.5 分]

在控制节点和计算节点上分别安装 Nova 服务。安装完成后,完成 Nova 相关配置。 在 controller 节点和 compute 节点上分别使用 iaas-install-placement.sh 脚本、

iaas-install-nova -controller.sh 脚本、iaas-install-nova-compute.sh 脚本安装Nova 服务。在 OpenStack 中,修改相关配置文件,修改调度器规则采用缓存调度器,缓存主机信息,提升调度时间。配置完成后提交controller 点的用户名、密码和IP 地址到答题框。

controller:

iaas-install-placement.sh

iaas-install-nova-controller.sh

compute:

iaas-install-nova-compute.sh

controller:

vim /etc/nova/nova.conf

4501 driver=caching_scheduler

【题目 9】1.1.9 Neutron 安装[0.2 分]

在控制和计算节点上正确安装 Neutron 服务。

使用提供的脚本 iaas-install-neutron-controller.sh 和 iaas-install-neutron- compute.sh,在 controller 和 compute 节点上安装 neutron 服务。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

Controller

iaas-install-neutron-controller.sh

compute:

iaas-install-neutron-compute.sh

【题目 10】1.1.10 Dashboard 安装[0.5 分]

在控制节点上安装 Dashboard 服务。安装完成后,将 Dashboard 中的 Django 数据修改为存储在文件中。

在 controller 节点上使用 iaas-install-dashboad.sh 脚本安装 Dashboard 服务。

安装完成后,修改相关配置文件,完成下列两个操作:

1.使得登录 Dashboard 平台的时候不需要输入域名; 2.将 Dashboard 中的 Django 数据修改为存储在文件中。

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

Controller

iaas-install-dashboard.sh

vim /etc/openstack-dashboard/local_settings

【题目 11】1.1.11 Swift 安装[0.5 分]

在控制节点和计算节点上分别安装 Swift 服务。安装完成后,将 cirros 镜像进行分片存储。

在控制节点和计算节点上分别使用 iaas-install-swift-controller.sh 和 iaas- install-swift-compute.sh 脚本安装 Swift 服务。安装完成后,使用命令创建一个名叫examcontainer 的容器,将 cirros-0.3.4-x86_64-disk.img 镜像上传到 examcontainer 容器中,并设置分段存放,每一段大小为 10M。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

下面黄色字体如果你的yum没掉,就不用做了

在跑的脚本的时候我发现的compute的yum突然掉了,不知道为何,可能是做10题做完后掉, 然后我做了ftp服务配置了yum仓库

Controller

yum -y install vsftpd

vim /etc/vsftpd/vsftpd.conf

anon_root=/var/www/html #给http目录设置为共享

systemctl restart vsftpd

systemctl enable vsftpd

Compute #换成ftp

yum makecache

Controller

iaas-install-swift-controller.sh

compute:

iaas-install-swift-compute.sh

Controller

swift post examcontainer #通过命令行创建容器

openstack container list

上传镜像
 

swift upload -S 10M examcontainer cirros-0.3.4-x86_64-disk.img  #上传到容器中

【题目 12】1.1.12 Cinder 创建硬盘[0.5 分]

在控制节点和计算节点分别安装 Cinder 服务,请在计算节点,对块存储进行扩容操作。在控制节点和计算节点分别使用 iaas-install-cinder-controller.sh 、 iaas-

install-cinder-compute.sh 脚本安装 Cinder 服务,请在计算节点,对块存储进行扩容操作,即在计算节点再分出一个 5G 的分区,加入到 cinder 块存储的后端存储中去。完成后提交计算节点的用户名、密码和 IP 地址到答题框。

controller:

iaas-install-cinder-controller.sh

compute:

Fdisk  #给sdb在分5G

iaas-install-cinder-compute.sh

pvcreate /dev/sdb4

Vgs

vgextend cinder-volumes /dev/sdb4

vgs

【题目 13】1.1.13 配置主机禁 ping [0.5 分]

修改 controller 节点的相关配置文件,配置 controller 节点禁止其他节点可以ping它。

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

controller

vim /etc/sysctl.conf

添加一行

net.ipv4.icmp_echo_ignore_all = 1

执行

sysctl -p

任务 2 私有云服务运维[15 分]

【适用平台】私有云

【题目 1】1.2.1 Heat 编排-创建用户[1 分]

编写 Heat 模板 create_user.yaml,创建名为 heat-user 的用户。

使用自己搭建的OpenStack 私有云平台,使用heat 编写摸板(heat_template_version: 2016-04-08)创建名为”chinaskills”的 domain,在此 domain 下创建名为 beijing_group 的租户,在此租户下创建名为 cloud 的用户,将此文件命名及保存在

/root/user_create.yml,完成后提交 controller 点的用户名、密码和 IP 地址到答题框。

(竞赛系统会执行yaml 文件,请确保执行的环境)

Controller

iaas-install-heat.sh

heat resource-type-template OS::Keystone::Domain > /root/user_create.yml

heat resource-type-template OS::Keystone::Project >> /root/user_create.yml

heat resource-type-template OS::Keystone::User >> /root/user_create.yml

【题目 2】1.2.2 KVM 优化[1 分]

在 OpenStack 平台上修改相关配置文件,启用-device virtio-net-pci in kvm。在自行搭建的 OpenStack 私有云平台或赛项提供的 all-in-one 平台上,修改相关配置

文件,启用-device virtio-net-pci in kvm,配置完成后提交控制节点的用户名、密码和

IP 地址到答题框。

controller

vim /etc/nova/nova.conf

【题目 3】1.2.3 NFS 对接 Glance 后端存储[1 分]

使用 OpenStack 私有云平台,创建一台云主机,安装 NFS 服务,然后对接 Glance 后端存储。 

使用赛项提供的 OpenStack 私有云平台,创建一台云主机(镜像使用CentOS7.9, flavor 使用带临时磁盘 50G 的),配置该主机为 nfs 的 server 端,将该云主机中的 50G 磁盘通过/mnt/test 目录进行共享(目录不存在可自行创建)。然后配置 controller 节点为 nfs 的 client 端,要求将/mnt/test 目录作为 glance 后端存储的挂载目录。配置完成后提交 controller 控制节点的用户名、密码和 IP 地址到答题框。 

Node :1.1.1.30

yum install nfs-utils rpcbind -y

systemctl start rpcbind

systemctl start nfs

mkdir /mnt/test

cat /etc/exports

/mnt/test *(rw,no_root_squash,sync)

exportfs -r

systemctl restart nfs

Systemctl stop firewalld

Controller

mount -t nfs 1.1.1.30:/mnt/test /var/lib/glance/images/

chown glance:glance -R /var/lib/glance/images/

【题目 4】1.2.4 Redis 主从[1 分]

使用赛项提供的OpenStack 私有云平台,创建两台云主机,配置为redis 的主从架构。使用赛项提供的 OpenStack 私有云平台,申请两台CentOS7.9 系统的云主机,使用提

供的 http 源,在两个节点安装 redis 服务并启动,配置 redis 的访问需要密码,密码设置为 123456。然后将这两个 redis 节点配置为 redis 的主从架构。配置完成后提交 redis 主节点的用户名、密码和 IP 地址到答题框。

验证

【题目 5】1.2.5 Linux 系统调优-脏数据回写[1 分]

修改系统配置文件,要求将回写磁盘的时间临时调整为 60 秒。

Linux 系统内存中会存在脏数据,一般系统默认脏数据 30 秒后会回写磁盘,修改系统配置文件,要求将回写磁盘的时间临时调整为 60 秒。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。 

Controller

vim /etc/sysctl.conf

添加一行执行

vm.dirty_expire_centisecs = 6000

sysctl -p

【题目 6】1.2.6 Glance 调优[1 分]

在 OpenStack 平台中,修改相关配置文件,将子进程数量相应的配置修改成 2。

在 OpenStack 平台中,glance-api 处理请求的子进程数量默认是 0,只有一个主进程,请修改相关配置文件,将子进程数量相应的配置修改成 2,这样的话有一个主进程加 2 个子进程来并发处理请求。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

Controller

vim /etc/glance/glance-api.conf

【题目 7】1.2.7 Ceph 部署[1 分]

使用提供的 ceph.tar.gz 软件包,安装 ceph 服务并完成初始化操作。

使用提供的 ceph-14.2.22.tar.gz 软件包,在 OpenStack 平台上创建三台 CentOS7.9 系统的云主机,使用这三个节点安装 ceph 服务并完成初始化操作,第一个节点为 mon/osd 节点,第二、三个节点为 osd 节点,部署完 ceph 后,创建 vms、images、volumes 三个pool。完成后提交第一个节点的用户名、密码和 IP 地址到答题框。

没做出来

【题目 8】1.2.8 Glance 对接 Ceph 存储[1 分]

修改 OpenStack 平台中 Glance 服务的配置文件,将 Glance 后端存储改为 Ceph 存储。在自己搭建的 OpenStack 平台中修改 glance 服务的相关配置文件,将glance 后端存

储改为 ceph 存储。也就是所以的镜像会上传至 ceph 的 images pool 中。通过命令使用cirros-0.3.4-x86_64-disk.img 镜像文件上传至云平台中,镜像命名为 cirros。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。

Controller

vim /etc/glance/glance-api.conf

default_store = rbd  #参数改成RDB

rbd_store_pool = images  #是ceph存储池的名称

rbd_store_user = glance   #是ceph的用户名

rbd_store_ceph_conf = /etc/ceph/ceph.conf  #是ceph配置文件的路径

systemctl restart openstack-glance-api  #重启服务

上传镜像到云平台

openstack image create --min-disk 10 --min-ram 1024 --file cirros-0.3.4-x86_64-disk.img cirros  #命名为cirros,启动硬盘为 10G,最小启动内存为 1G。

【题目 9】1.2.9 Cinder 对接 Ceph 存储[1 分]

修改 OpenStack 平台中 cinder 服务的配置文件,将 cinder 后端存储改为 Ceph 存储。修改 OpenStack 平台中 cinder 服务的相关配置文件,将 cinder 后端存储改为 ceph 存

储。使创建的 cinder 块存储卷在 ceph 的 volumes pool 中。配置完成后,在 OpenStack 平台中使用创建卷 cinder-volume1,大小为 1G。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。

controller 

开头加入

vim /etc/cinder/cinder.conf

5 enabled_backends = ceph

6 default_volume_type = ceph

文件底部加入

[ceph]

volume_driver = cinder.volume.drivers.rbd.RBDDriver

rbd_pool = volumes

rbd_ceph_conf = /etc/ceph/ceph.conf

rbd_flatten_volume_from_snapshot = false

rbd_max_clone_depth = 5

rbd_store_chunk_size = 4

rados_connect_timeout = -1

rbd_user = cinder

rbd_secret_uuid = your-secret-uuid

重启服务

systemctl restart openstack-cinder-volume.service

创建卷

openstack volume create --size 1 cinder-volume1

【题目 10】1.2.10 Nova 对接 Ceph 存储[1 分]

修改 OpenStack 平台中 Nova 服务的配置文件,将 Nova 后端存储改为 Ceph 存储。修改 OpenStack 平台中 nova 服务的相关配置文件,将 nova 后端存储改为 ceph 存储。

使 nova 所创建的虚拟机都存储在 ceph 的 vms pool 中。配置完成后在 OpenStack 平台中使用命令创建云主机 server1。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。

controller

vim /etc/nova/nova.conf

images_type = rbd

images_rbd_pool = vms

images_rbd_ceph_conf = /etc/ceph/ceph.conf

rbd_user = ceph-user

rbd_secret_uuid = secret-uuid

创建云主机server1

先创建网络

要确定物理网络名称和vlanid的范围

vim /etc/neutron/plugins/ml2/ml2_conf.ini

创建网络

openstack network create --provider-network-type vlan --provider-physical-network provider --provider-segment 800 extnet

创建子网

openstack subnet create --network extnet --subnet-range 1.1.1.0/24 --allocation-pool start=1.1.1.30,end=1.1.1.50 --gateway 1.1.1.2 --dns-nameserver 8.8.8.8 extsubnet

准备好镜像规格和网络

创建云主机server1

openstack server create --image 7287380e-ebd0-4886-8273-2e38e12fe323 --flavor 2 --network 3dbb2b3a-0263-417e-9056-c0034b4a472b server1

【题目 11】1.2.11 私有云平台优化:系统网络优化[1 分]

使用自行创建的 OpenStack 云计算平台,配置控制节点的网络缓存,使得每个 UDP 连接(发送、接受)保证能有最小 358 KiB 最大 460 KiB 的 buffer,重启后仍然生效。配置完成后提交 controller 控制节点的用户名、密码和 IP 地址到答题框。

Controller

vim /etc/sysctl.conf

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.core.rmem_default = 358400

net.core.rmem_max = 460800

net.core.wmem_default = 358400

net.core.wmem_max = 460800

【题目 12】1.2.12 私有云平台排错:Neutron 网络组件排错[2 分]

使用赛项提供的 chinaskill-error01 镜像创建一台云主机(云主机的登录用户名为root,密码为 Abc@1234),该云主机中存在错误的网络服务,错误现象为 dashboard 不能查看网络相关的页面,请修复 neutron 服务。修复完成后提交该云主机的用户名、密码和IP 地址到答题框。

无环境

【题目 13】1.2.13 私有云平台排错:Cinder 卷组件报错[2 分]

使用赛项提供的 chinaskill-error01 镜像创建一台云主机(云主机的登录用户名为root,密码为 Abc@1234),该云主机中存在错误的卷服务,错误现象为无法正常使用cinder 命令,请修复卷服务,然后使用命令创建名为 chinaskill-cinder 的卷,大小为2G。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。

无环境

【任务 3】私有云运维开发[10 分]

【适用平台】私有云

【题目 1】1.3.1 编写 Shell 一键部署脚本[1.0 分] 编写一键部署 nfs 云网盘应用系统。

在 OpenStack 私有云平台,创建一台云主机,使用提供的软件包,在 root 目录下编写一键部署脚本install_owncloud.sh,要求可以一键部署 owncloud 云网盘应用系统。完成后提交节点的 IP 地址、用户名和密码到答题框。 

虚拟机信息

搭建OwnCloud网盘。

首先确保Linux能够正常上网(需要上网下载安装包)
1. 添加一个新的软件源

wget --no-check-certificate https://download.opensuse.org/repositories/isv:ownCloud:server:10/CentOS_7/isv:ownCloud:server:10.repo​编辑

  1. 安装OwnCloud-files

yum -y install https://labfileapp.oss-cn-hangzhou.aliyuncs.com/owncloud-complete-files-10.5.0-3.1.noarch.rpm

3. 安装验证Apache服务

如安装失败,清理缓存,生成缓存

关防火墙沙河

网页访问ip

 4. 配置Apache文件

在105加入

# owncloud config

Alias /owncloud "/var/www/html/owncloud/"

<Directory /var/www/html/owncloud/>

    Options +FollowSymlinks

    AllowOverride All

    <IfModule mod_dav.c>

        Dav off

    </IfModule>

    SetEnv HOME /var/www/html/owncloud

    SetEnv HTTP_HOME /var/www/html/owncloud

</Directory>

  1. 手动更新rpm源

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/epel-release-latest-7.noarch.rpm

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/webtatic-release.rpm

  1. 安装PHP 7.2版本   #安装较慢耐心等待

yum -y install php72w-cli php72w-common php72w-devel php72w-mysql php72w-xml php72w-odbc php72w-gd php72w-intl php72w-mbstring

  1. 将PHP配置到Apache中

编辑文件最后一行加入如下

然后重启httpd

8 .安装mysql

拖包,编写脚本,给权限,

执行脚本

更改数据库密码为root

再次进入mysql创建一个数据库,保存来自 OwnCloud 的数据。使用下面的命令创建数据库和数据库用户

create database owncloud;

GRANT ALL ON owncloud.* TO ocuser@localhost IDENTIFIED BY 'owncloud';

flush privileges;

在浏览器输入http://ip地址/owncloud 并访问,进入下面页面。

创建管理员账户,配置数据库

点击安装完成

登录即可

搭建完成

shell脚本搭建ownclould

#!/bin/bash

setenforce 0

systemctl stop firewalld

cd /etc/yum.repos.d/

yum -y install wget

wget --no-check-certificate https://download.opensuse.org/repositories/isv:ownCloud:server:10/CentOS_7/isv:ownCloud:server:10.repo

yum -y install https://labfileapp.oss-cn-hangzhou.aliyuncs.com/owncloud-complete-files-10.5.0-3.1.noarch.rpm

yum -y install httpd

systemctl start httpd

cat >> /etc/httpd/conf/httpd.conf << EOF

# owncloud config

Alias /owncloud "/var/www/html/owncloud/"

<Directory /var/www/html/owncloud/>

Options +FollowSymlinks

AllowOverride All

<IfModule mod_dav.c>

Dav off

</IfModule>

SetEnv HOME /var/www/html/owncloud

SetEnv HTTP_HOME /var/www/html/owncloud

</Directory>

EOF

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/epel-release-latest-7.noarch.rpm

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/webtatic-release.rpm

yum -y install php72w

yum -y install php72w-cli php72w-common php72w-devel php72w-mysql php72w-xml php72w-odbc php72w-gd php72w-intl php72w-mbstring

echo "PHPIniDir /etc/php.ini" >> /etc/httpd/conf/httpd.conf

systemctl restart httpd

给权限执,访问网站即可http://1.1.1.11/owncloud

备注:此脚本搭建没有搭建mysql,访问网站别选mysql,选择sqlite即可

也可自行加入数据库的一些步骤

【题目 2】1.3.2 Ansible 服务部署:部署 ELK 集群服务[2 分]

编写 Playbook,部署的 ELK。

使用赛项提供的 OpenStack 私有云平台,创建三台 CentOS7.9 系统的云主机分别命名为 elk-1、elk-2 和 elk-3,Ansible 主机可以使用上一题的环境。要求 Ansible 节点编写剧本,执行 Ansible 剧本可以在这三个节点部署 ELK 集群服务(在/root 目录下创建install_elk 目录作为 ansible 工作目录,部署的入口文件命名为 install_elk.yaml)。

具体要求为三个节点均安装 Elasticserach 服务并配置为 Elasticserach 集群;kibana 安

装在第一个节点;Logstash 安装在第二个节点。(需要用到的软件包在 HTTP 服务下)完成后提交 ansible 节点的用户名、密码和 IP 地址到答题框。(考试系统会连接到 ansible 节点,执行 ansible 脚本,准备好环境,以便考试系统访问)

Ansible 1.1.1.14

1/1.1.1.11

2/1.1.1.12

3/1.1.1.13

#####Ansibie#####

下载yum -y install ansible工具

需要先下载epel仓库才能下载

yum install epel-release

yum -y install ansible

#域名解析(all node) #全部节点

cat >> /etc/hosts <<EOF

10.10.10.71 ansible

10.10.10.72 elk-1

10.10.10.73 elk-2

10.10.10.74 elk-3

EOF

#####centos7.9 node#####  #进行改名

hostnamectl set-hostname elk-1

hostnamectl set-hostname elk-2

hostnamectl set-hostname elk-3

####Ansible node##### #创建需要的角色目录

mkdir /root/install_elk

touch /root/install_elk/install_elk.yaml

mkdir -p /root/install_elk/roles/{ela,kib,log}/{files,handlers,tasks,templates,vars}

#在ansible节点与三台节点建立免密钥通信  #拷贝公钥给elk1-3

ssh-keygen

ssh-copy-id elk-1

ssh-copy-id elk-2

ssh-copy-id elk-3

#ansible主机清单  编辑配置

cat >>  /etc/ansible/hosts <<EOF

[ela]

elk-1 node_name=elk-1

elk-2 node_name=elk-2

elk-3 node_name=elk-3

[kib]

elk-1

[log]

elk-2

EOF

下面开始写剧本

主入口文件

/root/install_elk/install_elk.yaml

cat > /root/install_elk/install_elk.yaml <<EOF

---

- hosts: ela

  gather_facts: no

  remote_user: root

  roles:

  - ela

- hosts: kib

  gather_facts: no

  remote_user: root

  roles:

  - kib

  

- hosts: log

  gather_facts: no

  remote_user: root

  roles:

  - log

EOF

部署ela集群

/root/install_elk/roles/ela/tasks/main.yaml入口文件

cat > /root/install_elk/roles/ela/tasks/main.yaml <<EOF

- name: 安装Java环境

  unarchive:

    src: jdk-8u144-linux-x64.tar.gz  

    dest: /opt

    list_files: yes

- name: 添加Java环境变量

  shell: echo 'export JAVA_HOME=/opt/jdk1.8.0_144' >> /etc/profile && echo 'export PATH=$PATH:/opt/jdk1.8.0_144/bin' >> /etc/profile

- name: 生效环境变量

  shell: source /etc/profile

- name: 创建用户

  user:

    name: ela

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: elasticsearch-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    owner: ela

    group: ela

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/elasticsearch

    state: link

- name: 传输配置文件

  template:

    src: elasticsearch.j2

    dest: /opt/elasticsearch/config/elasticsearch.yml

    owner: ela

    group: ela

    

- name: 传输系统配置文件

  copy:

    src: limits.conf

    dest: /etc/security/limits.conf

- name: 传输系统配置文件

  copy:

    src: sysctl.conf

    dest: /etc/sysctl.conf

- name: 加载 /etc/sysctl.conf文件,使内核参数生效

  shell: sysctl -p

- name: 启动服务

  # 使用ela用户执行此命令

  become: yes

  become_user: ela

  command:

    # argv 是一个列表,存放了需要执行的命令及其参数

    # 一行一个

    argv:

      - nohup

      - /opt/elasticsearch/bin/elasticsearch

      - -d

EOF

/root/install_elk/roles/ela/templates/elasticsearch.j2,elasticsearch的主配置文件模板

cat > /root/install_elk/roles/ela/templates/elasticsearch.j2 <<EOF

cluster.name: elk

node.name: {{ node_name }}

node.data: true

network.host: 0.0.0.0

http.port: 9200

discovery.seed_hosts:

   - 1.1.1.11

   - 1.1.1.12

   - 1.1.1.13

cluster.initial_master_nodes: ["elk-1","elk-2","elk-3"]

EOF

/root/install_elk/roles/ela/files/limits.conf,系统文件句柄数配置文件

cat > /root/install_elk/roles/ela/files/limits.conf <<EOF

* soft nofile 65535

* hard nofile 65535

* soft nproc  4096

* hard nproc 4096

EOF

/root/install_elk/roles/ela/files/sysctl.conf,系统的内核配置文件

cat > /root/install_elk/roles/ela/files/sysctl.conf <<EOF

vm.max_map_count=655360

EOF

/root/install_elk/roles/kib/tasks/main.yaml任务入口文件

cat > /root/install_elk/roles/kib/tasks/main.yaml <<EOF

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: kibana-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    owner: ela

    group: ela

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/kibana

    state: link

- name: 创建日志与PID存放目录

  shell: mkdir -p /var/log/kibana /run/kibana

- name: 给如上目录设置权限

  shell: chown -R ela:ela /var/log/kibana /run/kibana

- name: 传输配置文件

  copy:

    src: kibana.yml

    dest: /opt/kibana/config/kibana.yml

    

- name: 传输服务管理文件

  template:

    src: kibana.service.j2

    dest: /etc/systemd/system/kibana.service

- name: 启动服务

  systemd:

    name: kibana

    state: started

    daemon_reload: yes

EOF

/root/install_elk/roles/kib/files/kibana.ymlKibana 程序的配置文件

cat > /root/install_elk/roles/kib/files/kibana.yml <<EOF

server.port: 5601

server.host: "0.0.0.0"

elasticsearch.hosts: ["http://1.1.1.11:9200"]

i18n.locale: "zh-CN"

pid.file: /run/kibana/kibana.pid

logging.dest: /var/log/kibana/kibana.log

EOF

/root/install_elk/roles/kib/templates/kibana.service.j2 ,Kibana 程序管理模板文件

cat > /root/install_elk/roles/kib/templates/kibana.service.j2 <<EOF

[Unit]

Description=Kibana

Documentation=https://www.elastic.co

After=network-online.target

Wants=network-online.target

[Service]

Type=simple

User=ela

Group=ela

ExecStart=/opt/kibana/bin/kibana

ExecStop=/bin/pkill -F "/run/kibana/kibana.pid"

Restart=on-failure

RestartSec=3

StartLimitBurst=3

StartLimitInterval=60

WorkingDirectory=/opt/kibana

StandardOutput=journal

StandardError=inherit

[Install]

WantedBy=multi-user.target

EOF

/root/install_elk/roles/log/tasks/main.yaml任务入口文件

cat > /root/install_elk/roles/log/tasks/main.yaml <<EOF

- name: 创建日志目录

  file:

    path: /var/log/logstash

    state: directory

- name: 服务日志目录权限

  shell: chown -R ela:ela /var/log/logstash

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: logstash-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/logstash

    state: link

- name: 传输配置文件

  template:

    src: logstash.yml

    dest: /opt/logstash/config/logstash.yml

- name: 传输管道配置文件

  copy:

    src: logstash.conf

    dest: /opt/logstash/config/logstash-sample.conf

    

- name: 传输系统服务文件

  template:

    src: logstash.service.j2

    dest: /etc/systemd/system/logstash.service

- name: 启动 logstash

  systemd:

    name: logstash

    state: started

    daemon_reload: yes

- name: restart logstash

  systemd:

    name: logstash

    state: restarted

    daemon_reload: yes

#- name: 启动服务

#  become: yes

#  become_user: ela

#  shell: sh /opt/logstash/bin/logstash -f /opt/logstash/config/logstash-sample.conf

EOF

[root@ansible ~]# cat install_elk/roles/log/tasks/main.yaml

- name: 创建日志目录

  file:

    path: /var/log/logstash

    state: directory

- name: 服务日志目录权限

  shell: chown -R ela:ela /var/log/logstash

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: logstash-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/logstash

    state: link

- name: 传输配置文件

  template:

    src: logstash.yml

    dest: /opt/logstash/config/logstash.yml

- name: 传输管道配置文件

  copy:

    src: logstash.conf

    dest: /opt/logstash/config/logstash-sample.conf

- name: 传输系统服务文件

  template:

    src: logstash.service.j2

    dest: /etc/systemd/system/logstash.service

- name: 启动 logstash

  systemd:

    name: logstash

    state: started

    daemon_reload: yes

- name: restart logstash

  systemd:

    name: logstash

    state: restarted

    daemon_reload: yes

#- name: 启动服务

#  become: yes

#  become_user: ela

#  shell: sh /opt/logstash/bin/logstash -f /opt/logstash/config/logstash-sample.conf

/root/install_elk/roles/log/templates/logstash.yml,Logstash 程序主配置文件

cat > /root/install_elk/roles/log/templates/logstash.yml <<EOF

http.host: "0.0.0.0"

path.logs: /var/log/logstash/

EOF

/root/install_elk/roles/log/files/logstash.conf,Logstash 程序管道配置文件

cat > /root/install_elk/roles/log/files/logstash.conf <<EOF

#将本地的/var/log/yum.log内日志标准输入

input {

  file {

    path => "/var/log/yum.log"

    type => "yum_log"

    start_position => "beginning"

  }

}

#标准输出到elasticsearch中

output {

  elasticsearch {

    hosts =>  ["1.1.1.11:9200","1.1.1.12:9200","1.1.1.13:9200"]

    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"

    #user => "elastic"

    #password => "changeme"

  }

}

EOF

/root/install_elk/roles/log/templates/logstash.service.j2,Logstash 程序进程管理模板文件

cat > /root/install_elk/roles/log/templates/logstash.service.j2 <<EOF

Unit]

Description=logstash

[Service]

Type=simple

ExecStart=/opt/logstash/bin/logstash "-f" "/opt/logstash/config/*.conf"

Restart=always

WorkingDirectory=/

LimitNOFILE=65535

TimeoutStopSec=infinity

[Install]

WantedBy=multi-user.target

EOF

对应包放在对应目录下

项目目录结构

测试ping

检测语法

无报错执行即可

跑完进行验证

Elk1-3关闭防火墙沙河

输入1.1.1.11:5601

输入1.1.1.11:5601/status可以查看状态

验证:

​ 在任务栏中再到管理 -》堆栈管理。

​ 创建一个索引模式,选择所有的索引。

要先创建一个样例

测试安装一个软件来生成数据。

[root@elk-2 ~]#yum -y install httpd

​来到discover中检索数据。

到此配置完成

【题目 3】1.3.3 Ansible 部署 Kafka 服务[2.0 分]

编写 Playbook,部署的 ZooKeeper 和 Kafka。

使用提供的 OpenStack 私有云平台,创建 4 台系统为 centos7.5 的云主机,其中一台作为 Ansible 的母机并命名为 ansible,另外三台云主机命名为 node1、node2、node3,通过附件中的/ansible/ansible.tar.gz 软件包在 ansible 节点安装 Ansible 服务;使用这一台母机,编写 Ansible 脚本(在/root 目录下创建 example 目录作为 Ansible 工作目

录,部署的入口文件命名为 cscc_install.yaml),编写 Ansible 脚本使用 roles 的方式对其他三台云主机进行安装 kafka 集群的操作(zookeeper 和 kafka 的安装压缩包在gpmall-single.tar.gz 压缩包中,将 zookeeper 和 kafka 的压缩包解压到 node 节点的

/opt 目录下进行安装)。完成后提交 ansible 节点的用户名、密码和 IP 地址到答题框。

(考试系统会连接到你的 ansible 节点,去执行 ansible 脚本,请准备好环境,以便考试系统访问)

roles没做出来,没滤清思路,就做了普通的剧本

Ansile/1.1.1.14

Worker01/1.1.1.11

Worker02/1.1.1.12

Worker03/1.1.1.13

[root@ansible ~]# cat wkm.yaml

---

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 关闭防火墙

      systemd:

        name: firewalld

        state: stopped

    - name: 永久关闭防火墙

      systemd:

        name: firewalld

        enabled: no

    - name: 查看防火墙状态

      systemd:

        name: firewalld

    - name: 下载jdk

      yum:

        name: java-1.8.0-openjdk-devel.x86_64

        state: present

    - name: 查看jdk是否生效

      shell: java -version

      shell: jps

    - name: 创建目录

      command: mkdir -p /home/kafka-zookeeper

    - name: 转移包到新创建的目录下

      shell: mv apache-zookeeper-3.8.2-bin.tar.gz /home/kafka-zookeeper/

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/

    - name: 解压apache包

      command: tar -zxvf apache-zookeeper-3.8.2-bin.tar.gz

      args:

        chdir: /home/kafka-zookeeper/

    - name: 创建 data 目录

      file:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data

        state: directory

    - name: 创建 logs 目录

      file:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/logs

        state: directory

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/

    - name: 修改文件名

      command: mv /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo_sample.cfg /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo.cfg

    - name: 清空文件内容

      copy:

        content: ""

        dest: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo.cfg

    - name: 添加配置到 zoo.cfg 文件

      blockinfile:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo.cfg

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          tickTime=2000

          initLimit=10

          syncLimit=5

          dataDir=/home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/

          dataLogDir=/home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/logs/

          clientPort=2181

          server.1=1.1.1.11:2888:3888

          server.2=1.1.1.12:2888:3888

          server.3=1.1.1.13:2888:3888

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data

    - name: 创建 myid 文件

      command: touch /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

- hosts: worker01

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 输入1

      lineinfile:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

        line: '1'

        create: yes

- hosts: worker02

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

     - name: 输入2

       lineinfile:

         path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

         line: '2'

         create: yes

- hosts: worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

     - name: 输入3

       lineinfile:

         path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

         line: '3'

         create: yes

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 启动ZooKeeper

      command: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin//bin/zkServer.sh start

      args:

        chdir: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/

    - name: 查看集群状态

      command: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin//bin/zkServer.sh status

      args:

        chdir: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 进入root下

      shell: cd /root/

    - name: 转移包到kafka-zookeeper

      shell: mv kafka_2.13-3.4.1.tgz /home/kafka-zookeeper/

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/

    - name: 解压kafka包

      command: tar -zxvf kafka_2.13-3.4.1.tgz

      args:

        chdir: /home/kafka-zookeeper/

    - name: 创建 data 目录

      file:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/data

        state: directory

    - name: 创建 logs 目录

      file:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/logs

        state: directory

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/kafka_2.13-3.4.1/config/

    - name: 清空文件

      copy:

        content: ""

        dest: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

- hosts: worker01

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 编辑文件

      blockinfile:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          broker.id=1

          listeners=PLAINTEXT://1.1.1.11:9092

          num.network.threads=12

          num.io.threads=24

          socket.send.buffer.bytes=102400

          socket.receive.buffer.bytes=102400

          socket.request.max.bytes=104857600

          log.dirs=/home/kafka-zookeeper/kafka_2.13-3.4.1/logs

          num.partitions=3

          num.recovery.threads.per.data.dir=12

          offsets.topic.replication.factor=3

          transaction.state.log.replication.factor=3

          transaction.state.log.min.isr=3

          log.retention.hours=168

          log.segment.bytes=1073741824

          log.retention.check.interval.ms=300000

          zookeeper.connect=1.1.1.11:2181,1.1.1.12:2181,1.1.1.13:2181

          zookeeper.connection.timeout.ms=18000

          group.initial.rebalance.delay.ms=0

- hosts: worker02

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 编辑文件

      blockinfile:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          broker.id=2

          listeners=PLAINTEXT://1.1.1.11:9092

          log.dirs=/home/kafka-zookeeper/kafka_2.13-3.4.1/logs

          num.partitions=3

          zookeeper.connect=1.1.1.11:2181,1.1.1.12:2181,1.1.1.13:2181

- hosts: worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 编辑文件

      blockinfile:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          broker.id=3

          listeners=PLAINTEXT://1.1.1.13:9092

          log.dirs=/home/kafka-zookeeper/kafka_2.13-3.4.1/logs

          num.partitions=3

          zookeeper.connect=1.1.1.11:2181,1.1.1.12:2181,1.1.1.13:2181

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 启动kafk集群

      shell:

         nohup /home/kafka-zookeeper/kafka_2.13-3.4.1/bin/kafka-server-start.sh /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties >> /home/kafka-zookeeper/kafka_2.13-3.4.1/logs/kafka.log 2>&1 &

- hosts: worker01

  remote_user: root

- name: 执行Kafka命令

  hosts: worker01

  remote_user: root

  tasks:

    - name: 在指定目录下执行命令

      shell: |

        cd /home/kafka-zookeeper/kafka_2.13-3.4.1/bin/

        ./kafka-topics.sh --create --bootstrap-server 1.1.1.11:9092,1.1.1.12:9092,1.1.1.13:9092 --replication-factor 3 --partitions 3 --topic hkzs

        ./kafka-topics.sh --list --bootstrap-server 1.1.1.11:9092

        ./kafka-topics.sh --list --bootstrap-server 1.1.1.12:9092

        ./kafka-topics.sh --list --bootstrap-server 1.1.1.13:9092

      args:

        executable: /bin/bash

【题目 4】1.3.4 OpenStack 资源管理的客户端程序开发 [2 分]

使用已建好的 OpenStack Python 运维开发环境,在 root 目录下创建resource_manager.py 脚本,基于 OpenStack 资源配额管理服务封装客户端工具, resource_manager.py 程序支持命令行带参数执行,命令参数要求说明如下:

(1)位置参数“command”,表示操作类型。操作类型包括“list”:标识查看所有的对象;“get”:查询指定的对象。

(2)位置参数“resource”,表示资源信息类型:类型包括 “provider”:资源提供者;“inventory”:资源库存;“usage”:资源使用情况。

(3)参数“-p 或-- provider”,标识资源提供者的名称。功能要求如下:

(1)程序查询所有资源提供者,以 json 格式控制台输出。

执行实例如下: python3 resource_manager.py list provider

(2)查询指定资源提供者的资源信息,以 json 格式控制台输出。

执行实例如下: python3 resource_manager.py get provider -p “providername”

(3)查询指定资源提供者的资源库存信息,以 json 格式控制台输出。执行实例如下: python3 resource_manager.py get inventory -p

“providername”

(4)查询指定资源提供者的资源使用信息,以 json 格式控制台输出。

执行实例如下: python3 resource_manager.py get usage -p “providername”

【题目 5】1.3.5 OpenStack 数据库操作开发[3 分]

使用已建好的 OpenStack Python 运维开发环境,在/root 目录下创建mysql_db_manager.py 脚本,基于 python 的 sqlalchemy 库进行数据库的管理,实现对OpenStack 内指定服务的MariaDB 数据库管理功能,实现该数据库下表创建、删除、数据插入、更新等操作(为确保检测成功,OpenStack MariaDB 数据库的账户 root、密码000000 不要修改):

该表(table)用于描述 OpenStack 成员信息,表结构如下: 表名称"member",该表有 4 个字段:

id INTEGER 主键,自动递增; name VARCHAR(256);

level INTEGER; place varchar(256);

(1)mysql_db_manager 内部实现 DM_Manager 类,类初始化方法 def init (self, db_name),参数 db_name 是 OpenStack 内部指定的某一服务数据库名称。

(2)DM_Manager 类实现create_table(self)方法。实现创建表功能,表指 member

表。

(3)DM_Manager 类实现insert_table_data(self,**kwargs)方法。实现表中表数据插入功能,参数 kwargs 参数为要插入数据记录信息,key 与表字段名称一致。

(4)DM_Manager 类实现update_table_data(self,**kwargs)方法。实现表中数据记

录更新功能,参数kwargs 参数为要更新数据记录信息,key 与表字段名称一致。

(5)DM_Manager 类实现run_table_raw_sql(self, raw_sql:str): 方法,无参数。实现表中直接执行sql 语句功能,raw_sql 参数为sql 语句。

(6)DM_Manager 类实现delete_table(self)方法。实现删除表功能,表指 member

表。

【任务 4】容器云服务搭建[5 分]

【适用平台】私有云

【题目 1】2.1.1 部署容器云平台[5 分]

使用 OpenStack 私有云平台创建两台云主机,云主机类型使用 4vCPU/12G/100G 类型, 分别作为 Kubernetes 集群的 Master 节点和 node 节点,然后完成 Kubernetes 集群的部署, 并完成 Istio 服务网格、KubeVirt 虚拟化和 Harbor 镜像仓库的部署。

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

Master/1.1.1.31

Node/1.1.1.32

Kubernetes 集群的部署

master:

mount -o loop chinaskills_cloud_paas_v2.0.2.iso /mnt/

cp -rfv /mnt/* /opt/

umount /mnt/

mv /opt/kubeeasy /usr/bin/kubeeasy

##安装依赖

kubeeasy install depend \

--host 1.1.1.31,1.1.1.32 \

--user root \

--password root \

--offline-file /opt/dependencies/base-rpms.tar.gz

##配置ssh免密钥

kubeeasy create ssh-keygen \

--master 1.1.1.31 \

--worker 1.1.1.32 \

--user root --password 000000

##安装kubernetes集群

kubeeasy install kubernetes \

--master 1.1.1.31 \

--worker 1.1.1.32 \

--user root \

--password root \

--version 1.22.1 \

--offline-file /opt/kubernetes.tar.gz

部署 Istio 服务网格

kubeeasy add --istio istio   #通过kubeeast工具安装lstio服务网格

kubectl create namespace iamges  #创建空间为images,可以在这个空间使用lstion服务网格

kubectl label namespace exam istio-injection=enabled   #给iamges空间添加了一个标签是enabled。在这个命名空间下创建的所有新的Pod都将自动注入Envoy代理作为Sidecar,使它们能够成为Istio服务网格的一部分。

KubeVirt 虚拟化

kubeeasy add --virt kubevirt

Harbor 镜像仓库的部署

kubeeasy add --registry harbor

【任务 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)

因无资源用此包代替

上传包,解压

上传镜像

配置yum源

[hypref]

name=hypref

baseurl=file:///root/yum

gpgcheck=0

enabled=1

Mysql脚本

#!/bin/bash

mysql_install_db --user=root

mysqld_safe --user=root &

sleep 8

mysqladmin -u root password 'tshoperp'

mysql -uroot -ptshoperp -e "grant all on *.* to 'root'@'%' identified by 'tshoperp'; flush privileges;"

mysql -uroot -ptshoperp -e " create database jsh_erp;use jsh_erp;source /opt/hyperf_admin.sql;"

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER hoyeong

RUN rm -rf /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/

COPY yum /root/yum

ENV LC_ALL en_US.UTF-8

RUN yum -y install mariadb-server

COPY sql /opt/

COPY mysql_init.sh /opt/

RUN bash /opt/mysql_init.sh

EXPOSE 3306

CMD ["mysqld_safe","--user=root"]

执行

有点步骤和题目不符合,要求导入jsh_erp.sql我导入的是,hyperf_admin.sql

 

【题目 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)

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER hoyeong

RUN rm -rf /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/

COPY yum /root/yum

RUN yum -y install redis

RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf

RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf

EXPOSE 6379

CMD ["/usr/bin/redis-server","/etc/redis.conf"]

构建镜像

【题目 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)

没包做不全

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER Fish

RUN rm -rf /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/

COPY yum /root/yum

RUN yum -y install nginx

EXPOSE 80

CMD ["nginx","-g","daemon off;"]

构建镜像

【题目 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)

没包只能注释一行

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER hoyeong

#COPY app.jar /root

ADD yum /root/yum

RUN rm -rfv /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/local.repo

RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

EXPOSE 9999

CMD java -jar /root/app.jar

构建镜像

【题目 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 触发自动构建,具体要求如下:

  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)

【题目 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 地址到答题框。

添加五行

controlle

vim /etc/kubernetes/manifests/kube-apiserver.yaml

 - --audit-log-path=/etc/kubernetes/audit-logs/audit.log

    - --audit-log-maxage=10

    - --audit-log-maxbackup=10

    - --audit-log-maxsize=500

- --audit-policy-file=/etc/kubernetes/audit-policy/policy.yaml

echo 'apiVersion: audit.k8s.io/v1

> kind: Policy

> rules:

> - level: RequestResponse

>   resources:

>   - group: ""

>     resources: ["pods"]

> - level: Request

>   resources:

>   - group: ""

>     resources: ["configmaps"]

>     namespaces: ["kube-system"]' > /etc/kubernetes/audit-policy/policy.yaml

【题目 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 代码,代码实现以下任务:

  1. 首先查询查询服务 service,如果 service 名称“nginx-svc”已经存在,先删除。 
  2. 如果不存在“nginx-svc”,则使用 service.yaml 文件创建服务。 
  3. 创建完成后,查询该服务的信息,查询的 body 部分以 json 格式的文件输出到当前目录下的 service_api_dev.json 文件中。 
  4. 然后使用 service_update.yaml 更新服务端口。
  5. 完成更新后,查询该服务的信息,信息通过控制台输出,并通过 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 代码,代码实现以下任务:

  1. 首先使用 nginx-deployment.yaml 文件创建 deployment 资源。 
  2. 创建完成后,查询该服务的信息,查询的 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 个方法:

  1. 实现方法 create_crd(),实现对 Competition CRD 的创建。 
  2. 实现方法 delete_crd(),实现对 Competition CRD 的删除。 
  3. 实现方法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 个方法:

  1. 实现方法 create_crd_object(ymlfile:str),实现 CRD 的自定义对象的创建,
 

yamlfile 为 CRD 的自定义对象 yaml 文件。

  1. 实现方法 delete_crd_object(crd_object_name:str),实现创建 CRD 功能,

crd_object_name 为 CRD 的自定义对象名称。

  1. 实现方法 watch_crd_object(crd_object_name:str),实现 CRD 的自定义对象变化事件监听,当监听到 CRD 的自定义对象的名称为crd_object_name 被删除时,将 event 信息输出到控制台,并停止监听。 

【赛程名称】模块三 公有云 

【任务 1】公有云服务搭建[5 分]

【适用平台】华为云

【题目 1】3.1.1 私有网络管理[0.3 分]

在公有云中完成虚拟私有云的创建。具体要求如下:

  1. 在上海一区域进行创建操作; 
  2. 创建一个名为 intnetX 的内部网络:IP 地址为 172.16.0.0/16;
  3. 创建子网名称为 intnetX-server:IP 地址为 172.16.1.0/24;
  4. 创建子网名称为 intnetX-mysql:IP 地址为 172.16.2.0/24;

完成创建后,提交当前的 AK(SecretId)、SK(SecretKey)和 intnetX 网络的 ID 到答题框。 

【题目 2】3.1.2 云实例管理[0.5 分]

登录华为云平台,创建两台云实例。具体要求如下:

  1. 计费模式:按需计费;
  2. 地域:上海一; 
 
  1. CPU 架构:x86 计算;
  2. 规格:c7.xlarge.2;

(5)镜像:CentOS 7.5 64 位;

  1. 系统盘:高 IO 50G 硬盘; 
  2. 公网带宽:按带宽计费,5Mbps;
  3. 实例名称:ChinaSkill-node-1、ChinaSkill-node-2;
  4. 登录方式:使用密码登录,密码自定义。 

创建完成后,提交当前的AK(SecretId)、SK(SecretKey)和 ChinaSkill-node-1 的实例 ID 到答题框。 

【题目 3】3.1.3 数据库管理[0.2 分]

使用 intnetX-mysql 网络创建三台云服务器 chinaskill-sql-1、chinaskill-sql-2 和chinaskill-sql-3(系统使用 CentOS7.9),使用提供的压缩文件 mongodb-repo.tar.gz 中的软件包源,在这三台云服务器上部署 MongoDB 数据库服务。 

配置完成后提交连接chinaskill-sql-1 节点的用户名、密码和公网IP 地址到答题框。

【题目 4】3.1.4 主从数据库[0.5 分]

在 chinaskill-sql-1 、chinaskill-sql-2 和 chinaskill-sql-3 云服务器中配置MongoDB 一主二从数据库+副本集操作,chinaskill-sql-1 节点为主节点,其余节点为从节点,配置 MongoDB 集群名称为 cloud。

完成后提交连接 chinaskill-sql-1 节点的用户名、密码和公网 IP 地址到答题框。

【题目 5】3.1.5 node 环境管理[0.5 分]

使用提供的压缩文件,安装 Node.js 环境。

使用提供的压缩文件 rocketchat-cloud.tar.gz 中软件包源,在 ChinaSkill-node-1

部署 nodejs,根据所提供的 rocket.chat 所需要求安装 nodejs 对应版本。配置完成后提交

 

连接 ChinaSkill-node-1 节点的用户名、密码和公网 IP 地址到答题框。

【题目 6】3.1.6 安全组管理[0.5 分]

根据要求,创建一个安全组。具体要求如下:

(1)名称:intnetX-security;

(2)允许策略:只放行源地址为 172.16.1.0/24 访问 27017 端口;

  1. 允许策略:只放行源地址为 172.16.1.0/24 使用 ping 命令访问; 
  2. 关联实例:将 intnetX-security 安全组关联至所创建的数据库中;

创建完成后,提交当前的 AK(SecretId)、SK(SecretKey)和安全组 ID 到答题框。 

【题目 7】3.1.7 RocketChat 上云[0.5 分]

使用 http 服务器提供文件,将 Rocket.Chat 应用部署上云。

使用http 服务器提供的压缩文件rocketchat-cloud.tar.gz 中的RocketChat 软件包, 在 ChinaSkill-node-1 中部署RocketChat 的Web 服务。使用chinaskill-sql-1 的MongoDB 为后端数据库,设置 RocketChat 服务访问端口为 3000。完成 Rocketchat 系统上云后,将ChinaSkill-node-1 节点的用户名、密码和公网 IP 地址到答题框。 

【题目 8】3.1.8 NAT 网关[0.5 分]

根据要求创建一个公网 NAT 网关。具体配置如下:

  1. 名称为:kcloud-nat;
  2. 虚拟私有云:intnetX;
  3. 子网:intnetX-server;
  4. 规则:内部子网地址访问外网; 
  5. 设置 Chinaskill-node-1 云服务器 3000 端口转换为外部 3000 服务端口。
 

创建完成后提交当前的 AK(SecretId)、SK(SecretKey)和 NAT 网关的 ID 到答题框。

【题目 9】3.1.9 云备份[0.5 分]

创建一个云服务器备份存储库名为 server_backup,容量为 100G。将 ChinaSkill- node-1 云服务器制作镜像文件 chinaskill-image。

完成后,将当前的 AK(SecretId)、SK(SecretKey)和存储库 ID 到答题框。

【题目 10】3.1.10 负载均衡器[0.5 分]

根据要求创建一个负载均衡器 chinaskill-elb。

将 ChinaSkill-node-1 和 ChinaSkill-node-2 加入负载均衡的后端。设置一个可用的公网服务 IP,服务端口为 3000。配置监听器,监听 3000 端口。对浮动公共 IP 进行 Web 访问测试。完成后,提交当前的 AK(SecretId)、SK(SecretKey)和负载均衡器的 ID 到答题框。 

【题目 11】3.1.11 弹性伸缩管理[0.5 分]

根据要求新建一个弹性伸缩启动配置。具体要求如下:

  1. 启动配置名称:template-exam;
  2. 计费模式:按量计费;
  3. 地域:上海一; 
  4. 镜像:chinaskill-image;
  5. 登录方式:使用密码登录,密码自定义。创建一个伸缩组,具体要求如下: 
  1. 名称:as-exam; 
  2. 最小伸缩数:1;起始实例数:1;最大伸缩数:5;
  3. 启动配置:template-exam;
 
  1. 使用负载均衡:chinaskill-elb;
  2. 移出策略:移出最旧的实例。 

为伸缩组 as-exam 新建告警触发策略,具体要求如下:

  1. 如果实例的内存利用率在 5 分钟内的最大值小于 40%,且连续发生 3 次。则实例

数减少 1 台。冷却 60 秒;

  1. 如果实例的内存利用率在 5 分钟内的最大值大于 80%,且连续发生 3 次。则实例

数增加 1 台。冷却 60 秒;

  1. 如果实例的 CPU 利用率在 5 分钟内的最大值小于 40%,且连续发生 3 次。则实例数减少 1 台。冷却 60 秒; 
  2. 如果实例的 CPU 利用率在 5 分钟内的平均值大于等于 80%,且连续发生 3 次。则实例数增加 1 台。冷却 60 秒。 

创建完成后提交当前的 AK(SecretId)、SK(SecretKey)和伸缩组的实例 ID 到答题框。 

【任务 2】公有云服务运维[10 分]

【适用平台】华为云

【题目 1】3.2.1 云容器引擎[1 分]

在公有云上,按照要求创建一个 x86 架构的容器云集群。具体要求如下:

(1)集群名称:kcloud;

(2)集群版本:v1.25;

  1. 地域:上海一; 
  2. 集群管理规模:50 节点; 
  3. 节点使用子网:intnetX-server;
  4. 节点预留容器 IP 上限:64;

(7)容器网段:10.10.0.0/16。

创建一个集群节点,节点配置信息要求如下:

 
  1. 节点名称:kcloud-server;
  2. 节点规格:c6s.xlarge.2
  3. 节点:EulerOS 2.9
  4. 使用 docker 容器引擎

创建完成后提交当前的 AK(SecretId)、SK(SecretKey)和集群的 ID 到答题框。

【题目 2】3.2.2 云容器管理[1 分]

使用插件管理在 kcloud 容器集群中安装dashboard 可视化监控界面。完成后,提交 dashboard 访问地址到答题框。

【题目 3】3.2.3 使用 kubectl 操作集群[2 分]

在 kcloud 集群中安装 kubectl 命令,使用 kubectl 命令管理 kcloud 集群。完成后提交连接 kcloud 集群节点的用户名、密码和公网 IP 地址到答题框。 

【题目 4】3.2.4 安装 helm[2 分]

在 k8s 集群中创建 chartmuseum 命名空间,编写 yaml 文件部署 ChartMuseum 服务。 使用提供的 helm 软件包(软件包为 helm-v3.3.0-linux-amd64.tar.gz 在 http 服务

下),在 kcloud 集群中安装 helm 服务。

完成后提交连接 kcloud 集群节点的用户名、密码和公网 IP 地址到答题框。

【题目 5】3.2.5 chartmuseum 仓库部署[2 分]

在 k8s 集群中创建 chartmuseum 命名空间,编写 yaml 文件部署 ChartMuseum 服务。在 k8s 集群中创建chartmuseum 命名空间,编写 yaml 文件在 chartmuseum 命名空间中

使用 chartmuseum:latest 镜像创建本地私有 chart 仓库,设置其仓库存储目录为宿主机的

/data/charts 目录。编写 service.yaml 文件,为chart 私有仓库创建 Service 访问策略,

 

定义其为 ClusterIP 访问模式。编写完成后启动 chartmuseum 服务。提交连接 kcloud 集群

节点的用户名、密码和公网 IP 地址到答题框。

【题目 6】3.2.6 WordPress 应用部署[2 分]

根据提供的 chart 包 wordpress.tgz 部署 WordPress 服务。

根据提供的 chart 包 wordpress-13.0.23.tgz 部署 wordpress 服务,根据 chart 包中内容创建 wordpress 所需要的 pv,并修改其访问模式为 NodePort。使用修改后的 chart 包创建 wordpress 服务。完成后提交连接 kcloud 集群节点的用户名、密码和公网 IP 地址到答题框。 

【任务 3】公有云运维开发[10 分]

【适用平台】华为云

【题目 1】3.3.1 开发环境搭建[1 分]

创建一台云主机,并登录此云服务器,基于云服务器 Python3.6.8 运行环境,安装

SDK 依赖库。

通过华为云控制台,选择北京四区域,创建一台 x86 架构,“按需计费”的 2 核, 4G,系统盘 50G 的云实例,实例名为 chinaskill,选择镜像为 CentOS 7.9 64bit(40GB), 分配独立的公网 IP,带宽选择按使用流量计费 5M。登录此云服务器,在云服务器Python3.6.8 环境上,安装华为云最新版本 SDK 的依赖库,包括弹性云服务、虚拟私有

云、镜像服务、容器云引擎、云数据库的 python 库。

完成后提交“chinaskill”开发运行环境云主机的用户名、密码和 IP 地址到答题框。

【题目 2】3.3.2 密钥对管理[2 分]

编写 Python 代码,实现密钥对的创建。

在云服务器的/root/huawei/目录下编写 create_keypair.py 文件,使用 SDK 编写

 

Python 代码,创建华为云的秘钥对,具体要求为:

  1. 秘钥对名称:chinaskills_keypair;
  2. 如果秘钥对已经存在,代码中需要先删除; 
  3. 输出此秘钥对详细信息。 

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

【题目 3】3.3.3 云硬盘管理[2 分]

调用 SDK 云硬盘管理的方法,实现云主机的的增删查改。

在/root/huawei 目录下编写 create_block_store.py 文件,使用 SDK 编写 Python 代码,调用创建华为云的云硬盘,具体要求如下: 

  1. 云硬盘可用区域:cn-north-4a
  2. 云硬盘名称:chinaskills_volume
  3. 云硬盘规格和大小:超高 IO,100G
  4. 设置云硬盘共享 
  5. 设置云硬盘加密,加密秘钥为默认的 KMS 密钥 
  6. 如果云硬盘已经存在,代码中需要先删除 
  7. 输出此云硬盘的详细信息(状态要求为 available)

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

【题目 4】3.3.4 云主机管理[3 分]

调用 SDK 云主机管理的方法,实现云主机的的增删查改。

使用已建好的运维开发环境,在/root/huawei 目录下创建 ecs_manager.py 脚本,完成 ECS 云主机管理,ecs_manager.py 程序支持命令行参数执行。 

提示说明:华为云主机支持安装所需 Python 库。提交前答案前,需安装所开发程序所依赖的 Python 库。 

  1. 程序支持根据命令行参数,创建 1 个云主机。位置参数“create”,表示创建; 

参数“-i 或--input”,格式为 json 格式文本的云主机的名称、镜像名称 2 个信息。其他参数同上述开发环境云主机一致。 

创建待成功,再返回查询该云主机的信息,结果以 json 格式输出到控制台。

 

参考执行实例如下:

python3 /root/huawei/ecs_manager.py create --input '{ "name": " chinaskill001", " imagename": "imageid"} '

  1. 支持查询给定具体名称的 ECS 云主机查询。位置参数“get”,表示查询 ECS;

参数“-n 或 --name”支持指定名称 ECS 查询,类型为 string。

参数“-o 或 --output”支持查询该 ECS 信息输出到文件,格式为 json 格式。

  1. 程序支持查询目前区域账号下所有的 ECS 云主机。位置参数“getall”,表示查询所有 ECS 云主机; 

参数“-o 或--output”支持输出到文件,格式为 yaml 格式。

  1. 支持删除指定名称的云主机。 

位置参数“delete”,表示删除一个 ECS 云主机;返回 response,通过控制台输出。

参数“-n 或--name”支持指定名称查询,类型为 string。

完成后提交“chinaskill 开发运行环境云主机”的用户名、密码和 IP 地址到答题框。

【题目 5】3.3.5 基于 FastAPI 框架封装华为云 VPC 服务 Restful APIs 接口[2 分]

使用已建好的运维开发环境,可用区为华北-北京 4,在/root/huaweicloud_fastapi 目录下创建 main.py 文件,基于 FastAPI 框架,完成虚拟私有云 VPC 管理服务的封装,端口为 7045。 

提示说明:华为云主机支持安装所需 Python 库。提交前答案前,需安装所开发程序所依赖的 Python 库。 

  1. 封装创建接口,路径为/cloud_vpc/create_vpc,参数格式为{"name": "","cidr": ""},name 为VPC 名称,cidr 为虚拟私有云下可用子网的范围;方法为 POST, 返回数据类型为 JSON 类型。
  2. 封装单个 VPC 查询接口,路径为/cloud_vpc/vpc/{vpc_name},路径中

{vpc_name}为待查询 VPC;方法为 GET,返回数据类型为 JSON 类型。

  1. 封装服务查询接口,要求可以查询到所有 VPC,路径为/cloud_vpc/vpc;方法为GET,返回的数据类型 JSON 类型的列表类型。 
  2. 封装更新 VPN 名称接口,路径为/cloud_vpc/update_vpc,参数格式为
 

{"new_name": "","old_name": ""},new_name 为 VPC 新名称,old_name 为待删除的 VPN

名称;方法为PUT,返回 JSON 类型的更新后数据。

  1. 封装删除接口,接口名为/cloud_vpc/delete_vpc,参数格式为{"vpc_name": ""},vpc_name 为 VPC 新名称;方法为DELETE,返回 JSON 类型的删除后的数据。 

功能编写完成后,手工启动 Restful 服务,再提交检测。 

【任务 4】边缘计算系统运维[10 分]

【适用平台】私有云

【题目 1】4.1.1 KubeEdge cloudcore 云端模块部署与配置[3 分]

在本地 http 文件服务器中下载 k8s-allinone-v1.22.1.qcow2 镜像(该镜像启动后内置一个完整的kubernetes 服务)并完成下列操作: 

  1. 上传该镜像至公有云 OBS 存储桶中; 
  2. 使用该镜像文件创建为私有镜像; 
  3. 使用该镜像创建一台云主机,该云主机作为 KubeEdge 的云端节点。云主机申请完成之后,在提供的 OBS 访问域名中,下载软件包

kubernetes_kubeedge.tar 到云端节点并部署 KubeEdge1.11 边缘计算系统,在云端节点部署 KubeEdge cloudcore 云端模块、启动 cloudcore 服务并配置该服务可被systemd 管理。完成后提交云端节点的 IP 地址、用户名和密码到答题框。 

【题目 2】4.1.2 KubeEdge edgecore 边端模块部署与配置[4 分]

在本地 OpenStack 环境中申请两台CentOS7.9 虚拟机做为 KubeEdge 的边缘端节点。主机名分别为 edge-node1、edge-node2。在 http 文件服务器中下载kubernetes_kubeedge.tar 软件包,使用该软件包在该虚拟机部署 KubeEdge edgecore 边端模块,并启动 edgecore 服务。加入成功之后,启用 metrics 监控服务。 

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

【题目 3】4.1.3 KubeEdge 应用部署-部署计数器应用[3 分]

利用搭建好的边缘计算平台,在云端节点上使用提供的相关镜像(k8simage 目录下) 和 yaml 文件(kubeedge-counter-demo 目录下),自行编写 DeviceModel、Device 资源,

 

要求如下:

DeviceModel 名字为 counter-model;

属性为 status,类型为字符串,存储模式为读写模式,默认值为空; Device 名字为 counter;

引用 counter-model 设备模型;

将此设备通过节点选择器与 edge-node1 节点进行绑定;

在 status 字段中的 twins 字段定义属性名称为 status、理想值为“OFF”、真实值为“0”;

编写完成后,按照顺序分别部署好 DeviceModel、Device 以及云端计数应用控制器和计数应用。部署完成后,将计数器打开。 

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

【任务 5】边缘计算云应用开发[5.0 分]

【适用平台】私有云

【题目 1】5.1.1 开发环境构建与用户注册服务开发[1 分]

使用华为云已搭建好的 KubeEdge 环境,安装 Python 3.7.3 运行环境,并安装开发所需的依赖包,使用提供的 mongoRepo.tar.gz 软件包在边端安装 MongoDB 数据库,设置数据库为任何机器都可以连接登录。 

开发环境搭建好之后,将提供的代码包导入到 Linux 服务器 root 目录下,并打开fastapi_user 工程目录进行用户管理服务开发,服务端口为 8046,运行服务后,注册名为chinaskill 的用户,密码为 Abc@1234,手动启动代码运行服务。代码编写完成后提交该云主机的用户名、密码和 IP 地址到答题框。 

【题目 2】5.1.2 AI 检测服务与网关服务开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_ai_pcb 工程目录,基于 YOLO5 与已训练的模型实现 PCB 缺陷 AI 识别服务, fastapi 框架来定义 PCB 图片的缺陷检测接口,调用接口时,需要指定 device 实例名称和上传缺陷图片,当识别到缺陷图片后,返回图片 base64 编码后的数据、模型的名字、当前的上传时间、以及识别坐标的位置信息和实例名称。

然后打开 fastapi_gateway 工程目录,基于 fastapi-gateway 开源框架实现网关服

 

务,AI PCB 微服务端口为 8055,微服务网关端口 30850,通过这个网关来访问用户管理服

务和 AI PCB 识别服务,手动启动 AI PCB 和网关服务。

AI 接口接口路径为:/detect/pcb_detect,参数传递到路径接口上,参数名为

device_id。

识别图片在工程目录中的 runs 目录里。

代码编写完成后提交该云主机的用户名、密码和 IP 地址到答题框。 

【题目 3】5.1.3 设备与设备模型管理服务开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_cloud_edge 工程目录,基于 FastAPI 框架和 Kubernetes SDK 实现了一组 API,主要针对 KubeEdge 拓展的CRD 的资源进行访问封装,微服务端口为 8045。 

1、完善设备模型管理服务,要求如下:

  1. 定义获取 DeviceModel 资源接口,接口名为/devicemodel/devicemodel,方法为

GET;

  1. 定义获取单个 DeviceModel 接口,接口名为/devicemodel/{name},方法为

GET;

  1. 定义创建 DeviceModel 接口,接口名为/devicemodel/devicemodel,方法为POST, 参数格式为{"name": "", "properties": ""},name 为 DeviceModel 的名字, properties 为 DeviceModel 更新的属性内容,类型为列表类型; 
  2. 定义设备模型同步接口,接口名为/devicemodel/devicemodel,方法为 PUT,参数格式为{"name": "", "properties": ""},name 为 DeviceModel 的名字,properties 为DeviceModel 创建的属性内容,类型为列表类型;
  3. 定义删除 DeviceModel 资源接口,接口名为/device/devicemodel,可以删除指定 DeviceModel,参数格式为{"name": ""},name 为 DeviceModel 的名字,方法为DELETE。 

2、完善设备管理服务,要求如下:

  1. 定义获取所有的 device 资源,接口名为/device/device,方法为 GET;
  2. 定义获取单个 device,接口名为/device/{name},方法为 GET;
  3. 定义设备同步接口,接口名为/device/device,参数格式为{"name": "","desired": {}},name 为更新设备的名字,desired 为更新设备的内容,内容格式为
 

JSON 格式,方法为 PUT;

  1. 定义创建 device 接口,接口名为/device/device,参数格式为

{"name":"","dmName": "","nodeName": ""},name 为 device 的名字,dmName 为

DeviceModel 的名字,nodeName 为边缘节点名字,方法为 POST;

  1. 定义删除 device 接口,可以删除指定的 device 资源,接口名为

/device/device,参数格式为{"name": ""},名字为要删除的 device 名字,方法为

DELETE。

手动启动设备与设备模型管理服务。

代码编写完成后提交该云主机的用户名、密码和 IP 地址到答题框。

【题目 4】5.1.4 云边数据协同开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_cloud_edge 工程目录,在前面几道题的基础之上,对 pcb_data_manager.py 文件完善代码,要求如下: 

将数据模型上传到数据库中,并返回该模型在数据库中的 ID,若有相同模型则不上传;

定义接收边缘消息程序;

云端接收边端 MQTT 主题里所发送的数据,将数据进行解析,存储到 MongoDB 数据库中,并对云端pcb-device 设备信息进行更新。 

设备信息字段为 pcb_model(模型名字)、pcb_status(设备状态)、pcb_result

(模型在数据中的 ID)、upload_time(识别图片的时间)

手动启动该服务。

【题目 5】5.1.5 云端节点管理开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_cloud 工程目录,基于 FastAPI 框架和 Kubernetes SDK 实现了一组 API,来进行管理云端节点和边缘节点信息的后端服务,微服务端口为 8047,编码要求功能如下: 

定义获取云端节点信息的路由,接口为/cloud_edge_service/node/cloudnode,请求为 GET,返回的数据类型为列表类型。

定义获取单个节点信息的路由,接口为/cloud_edge_service/node/{node_name},请

 

求为 GET,返回数据类型为字典类型。

定义获取边缘节点信息的路由,接口为/cloud_edge_service/node/edgenode,请求为

GET,返回数据类型为列表类型。

定义节点资源使用情况路由,接口为

/cloud_edge_service/metrics/node/{node_name},请求为 GET,返回获取到的资源使用情况,将任意一台边缘节点的主机名存储到/root/name.txt 文件里。

手动启动云端节点管理服务。 

修改 hosts 文件将 IP 地址映射为主机名; 

Controller;compute

cat >> /etc/hosts << EOF

1.1.1.10 controller

1.1.1.20 compute

EOF

【题目 2】1.1.2 Yum 源配置[0.2 分]

使用提供的 http 服务地址,在 http 服务下,存在 centos7.9 和 iaas 的网络 yum 源, 使用该 http 源作为安装 iaas 平台的网络源。分别设置 controller 节点和 compute 节点yum 源文件 http.repo。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

Controller:

上传镜像

开始配置yum服务器

mkdir /opt/{centos,openstack}

mount -o loop CentOS-7-x86_64-DVD-2009_2.iso /mnt/

cp -rvf /mnt/* /opt/centos/

umount /mnt/

mount -o loop chinaskills_cloud_iaas_v2.0.3_3.iso /mnt/

cp -rvf /mnt/* /opt/openstack/

umount /mnt/

下载http服务,开启服务

systemctl start httpd

systemctl enable httpd

镜像转移转移到网页根目录

关闭防火墙沙河

systemctl stop firewalld

setenforce 0

配置yum源

[centos]

name=centos

baseurl=file:/var/www/html/centos

gpgcheck=0

enabled=1

[openstack]

name=openstack

baseurl=file:/var/www/html/openstack/iaas-repo

gpgcheck=0

enabled=1

Compute

配置yum仓库

[centos]

name=centos

baseurl=http://1.1.1.10/centos

gpgcheck=0

enabled=1

[openstack]

name=openstack

baseurl=http://1.1.1.10/openstack/iaas-repo

gpgcheck=0

enabled=1

【题目 3】1.1.3 配置无秘钥 ssh[0.2 分]

配置 controller 节点可以无秘钥访问 compute 节点,配置完成后,尝试 ssh 连接compute 节点的 hostname 进行测试。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。 

controller/compute:

ssh-keygen

ssh-copy-id controller

ssh-copy-id compute

【题目 4】1.1.4 基础安装[0.2 分]

在控制节点和计算节点上分别安装 openstack-iaas 软件包。

在控制节点和计算节点上分别安装 openstack-iaas 软件包,根据表 2 配置两个节点脚本文件中的基本变量(配置脚本文件为/etc/openstack/openrc.sh)。 

表 2 云平台配置信息

服务名称

变量

参数/密码

Mysql

root

000000

Keystone

000000

Glance

000000

Nova

000000

Neutron

000000

Heat

000000

Zun

000000

Keystone

DOMAIN_NAME

demo

Admin

000000

Rabbit

000000

Glance

000000

Nova

000000

Neutron

000000

Heat

000000

Zun

000000

Neutron

Metadata

000000

External Network

eth1(以实际为准)

controller/compute:

yum -y install openstack-iaas

Compute:

Fdisk /dev/sdb

给sdb进行分区,后续跑脚本需要

分出两个20一个5还剩5G后续做题在进行分区

Controller:

编辑配置文件

vim /etc/openstack/openrc.sh

HOST_IP=1.1.1.10

HOST_PASS=root

HOST_NAME=controller

HOST_IP_NODE=1.1.1.20

HOST_PASS_NODE=root

HOST_NAME_NODE=compute

network_segment_IP=1.1.1.0/24

RABBIT_USER=openstack

RABBIT_PASS=000000

DB_PASS=000000

DOMAIN_NAME=demo

ADMIN_PASS=000000

DEMO_PASS=000000

KEYSTONE_DBPASS=000000

GLANCE_DBPASS=000000

GLANCE_PASS=000000

PLACEMENT_DBPASS=000000

PLACEMENT_PASS=000000

NOVA_DBPASS=000000

NOVA_PASS=000000

NEUTRON_DBPASS=000000

NEUTRON_PASS=000000

METADATA_SECRET=000000

INTERFACE_NAME=ens34

Physical_NAME=provider

minvlan=1

maxvlan=1000

CINDER_DBPASS=000000

CINDER_PASS=000000

BLOCK_DISK=sdb1

SWIFT_PASS=000000

OBJECT_DISK=sdb2

STORAGE_LOCAL_NET_IP=1.1.1.20

TROVE_DBPASS=000000

TROVE_PASS=000000

HEAT_DBPASS=000000

HEAT_PASS=000000

CEILOMETER_DBPASS=000000

CEILOMETER_PASS=000000

AODH_DBPASS=000000

AODH_PASS=000000

ZUN_DBPASS=000000

ZUN_PASS=000000

KURYR_PASS=000000

OCTAVIA_DBPASS=000000

OCTAVIA_PASS=000000

MANILA_DBPASS=000000

MANILA_PASS=000000

SHARE_DISK=sdb3

CLOUDKITTY_DBPASS=000000

CLOUDKITTY_PASS=000000

BARBICAN_DBPASS=000000

BARBICAN_PASS=000000

配置完成传送给compute

controller/compute:

先给双方拍个快照

执行初始化文件

iaas-pre-host.sh#初始化 跑完会提示建议重启

reboot  

【题目 5】1.1.5 数据库安装与调优[0.5 分]

在 controller 节点上使用 iaas-install-mysql.sh 脚本安装 Mariadb、Memcached、RabbitMQ 等服务。安装服务完毕后,修改/etc/my.cnf 文件,完成下列要求:

1.设置数据库支持大小写;

2.设置数据库缓存 innodb 表的索引,数据,插入数据时的缓冲为 4G;

3.设置数据库的 log buffer 为 64MB;

4.设置数据库的 redo log 大小为 256MB;

5.设置数据库的 redo log 文件组为 2。

6.修改Memcached 的相关配置,将内存占用大小设置为 512MB,调整最大连接数参数为2048;

调整 Memcached 的数据摘要算法(hash)为 md5;

Controller;

iaas-install-mysql.sh

mysql -uroot -p000000

show variables like 'innodb_log%';  #可以快速定义参数

vim /etc/my.cnf

lower_case_table_names =1  #数据库支持大小写

innodb_buffer_pool_size = 4G  #数据库缓存

innodb_log_buffer_size = 64MB  #数据库的log buffer即redo日志缓冲

innodb_log_file_size = 256MB  #设置数据库的redo log即redo日志大小

innodb_log_files_in_group = 2  #数据库的redo log文件组即redo日志的个数配置

systemctl restart mariadb

vim /etc/sysconfig/memcached

MAXCONN="2048"    #修改最大连接参数2048

CACHESIZE="512"   #修改内存占用大小为512

hash_algorithm=md5 #添加一行调整Memcached算法为md5

systemctl restart memcached

【题目 6】1.1.6 Keystone 服务安装与使用[0.5 分]

在控制节点上安装 Keystone 服务并创建用户。

在 controller 节点上使用 iaas-install-keystone.sh 脚本安装 Keystone 服务。

然后创建 OpenStack 域 210Demo,其中包含 Engineering 与 Production 项目,在域

210Demo 中创建组 Devops,其中需包含以下用户:  

1.Robert 用户是 Engineering 项目的用户(member)与管理员(admin),email 地址为:Robert@lab.example.com。  

2.George 用 户 是 Engineering 项 目 的 用 户 ( member ), email 地址为:

George@lab.example.com。

3.William 用户是 Production 项目的用户(member)与管理员(admin),email 地址为:William@lab.example.com。

4.John 用户是 Production 项 目 的 用 户 ( member ), email 地 址 为 :

John@lab.example.com。

controller

iaas-install-keystone.sh

source /etc/keystone/admin-openrc.sh   #导入环境变量

openstack domain create 210Demo  #创建域210Demo

openstack group create devops --domain 210Demo  #在210Demo中创建devops用户组

openstack project create Engineering --domain 210Demo  #在210Demo中创键Engineering的项目

openstack project create Production --domain 210Demo    #在210Demo中创建Production的项目

openstack user create --domain 210Demo --project Engineering Robert --email Robert@lab.example.com  #在210Demo域中,将用户Robert分配到Engineering项目,并设置其电子邮件地址。

openstack user create --domain 210Demo --project Engineering George --email George@lab.example.com  #在210Demo域中,将用户George分配到Engineering项目,并设置其电子邮件地址。

openstack user create --domain 210Demo --project Production William --email William@lab.example.com #在210Demo域中,将用户William分配到Production项目,并设置其电子邮件地址。

openstack user create --domain 210Demo --project Production John --email John@lab.example.com    #在210Demo域中,将用户John分配到Production项目,并设置其电子邮件地址。

openstack role add --user Robert --project Engineering member #将用户Robert分配到Engineering项目的member角色。

openstack role add --user Robert --project Engineering admin  #将用户Robert分配到Engineering项目的admin角色。

openstack role add --user George --project Engineering member #将用户George分配到Engineering项目的member角色。

openstack role add --user William --project Production member #将用户William分配到Production项目的member角色。

openstack role add --user William --project Production admin  #将用户William分配到Production项目的admin角色。

openstack role add --user John --project Production member    #将用户John分配到Production项目的member角色。

【题目 7】1.1.7 Glance 安装与使用[0.5 分]

在控制节点上安装 Glance 服务。上传镜像至平台,并设置镜像启动的要求参数。

在 controller 节点上使用 iaas-install-glance.sh 脚本安装 glance 服务。然后使用提供的 coreos_production_pxe.vmlinuz 镜像(该镜像为 Ironic Deploy 镜像,是一个AWS 内核格式的镜像,在 OpenStack Ironic 裸金属服务时需要用到)上传到 OpenStack 平台中,命名为 deploy-vmlinuz。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

controller:

iaas-install-glance.sh

上传镜像

openstack image create deploy-vmlinuz --container-format aki < coreos_production_pxe.vmlinuz

【题目 8】1.1.8 Nova 安装与优化[0.5 分]

在控制节点和计算节点上分别安装 Nova 服务。安装完成后,完成 Nova 相关配置。 在 controller 节点和 compute 节点上分别使用 iaas-install-placement.sh 脚本、

iaas-install-nova -controller.sh 脚本、iaas-install-nova-compute.sh 脚本安装Nova 服务。在 OpenStack 中,修改相关配置文件,修改调度器规则采用缓存调度器,缓存主机信息,提升调度时间。配置完成后提交controller 点的用户名、密码和IP 地址到答题框。

controller:

iaas-install-placement.sh

iaas-install-nova-controller.sh

compute:

iaas-install-nova-compute.sh

controller:

vim /etc/nova/nova.conf

【题目 9】1.1.9 Neutron 安装[0.2 分]

在控制和计算节点上正确安装 Neutron 服务。

使用提供的脚本 iaas-install-neutron-controller.sh 和 iaas-install-neutron- compute.sh,在 controller 和 compute 节点上安装 neutron 服务。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

Controller

iaas-install-neutron-controller.sh

compute:

iaas-install-neutron-compute.sh

【题目 10】1.1.10 Dashboard 安装[0.5 分]

在控制节点上安装 Dashboard 服务。安装完成后,将 Dashboard 中的 Django 数据修改为存储在文件中。

在 controller 节点上使用 iaas-install-dashboad.sh 脚本安装 Dashboard 服务。

安装完成后,修改相关配置文件,完成下列两个操作:

1.使得登录 Dashboard 平台的时候不需要输入域名; 2.将 Dashboard 中的 Django 数据修改为存储在文件中。

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

Controller

iaas-install-dashboard.sh

vim /etc/openstack-dashboard/local_settings

【题目 11】1.1.11 Swift 安装[0.5 分]

在控制节点和计算节点上分别安装 Swift 服务。安装完成后,将 cirros 镜像进行分片存储。

在控制节点和计算节点上分别使用 iaas-install-swift-controller.sh 和 iaas- install-swift-compute.sh 脚本安装 Swift 服务。安装完成后,使用命令创建一个名叫examcontainer 的容器,将 cirros-0.3.4-x86_64-disk.img 镜像上传到 examcontainer 容器中,并设置分段存放,每一段大小为 10M。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

下面黄色字体如果你的yum没掉,就不用做了

在跑的脚本的时候我发现的compute的yum突然掉了,不知道为何,可能是做10题做完后掉, 然后我做了ftp服务配置了yum仓库

Controller

yum -y install vsftpd

vim /etc/vsftpd/vsftpd.conf

anon_root=/var/www/html #给http目录设置为共享

systemctl restart vsftpd

systemctl enable vsftpd

Compute #换成ftp

yum makecache

Controller

iaas-install-swift-controller.sh

compute:

iaas-install-swift-compute.sh

Controller

swift post examcontainer #通过命令行创建容器

openstack container list

上传镜像

swift upload -S 10M examcontainer cirros-0.3.4-x86_64-disk.img  #上传到容器中

【题目 12】1.1.12 Cinder 创建硬盘[0.5 分]

在控制节点和计算节点分别安装 Cinder 服务,请在计算节点,对块存储进行扩容操作。在控制节点和计算节点分别使用 iaas-install-cinder-controller.sh 、 iaas-

install-cinder-compute.sh 脚本安装 Cinder 服务,请在计算节点,对块存储进行扩容操作,即在计算节点再分出一个 5G 的分区,加入到 cinder 块存储的后端存储中去。完成后提交计算节点的用户名、密码和 IP 地址到答题框。

controller:

iaas-install-cinder-controller.sh

compute:

Fdisk  #给sdb在分5G

iaas-install-cinder-compute.sh

pvcreate /dev/sdb4

Vgs

vgextend cinder-volumes /dev/sdb4

vgs

【题目 13】1.1.13 配置主机禁 ping [0.5 分]

修改 controller 节点的相关配置文件,配置 controller 节点禁止其他节点可以ping它。

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

controller

vim /etc/sysctl.conf

添加一行

net.ipv4.icmp_echo_ignore_all = 1

执行

sysctl -p

任务 2 私有云服务运维[15 分]

【适用平台】私有云

【题目 1】1.2.1 Heat 编排-创建用户[1 分]

编写 Heat 模板 create_user.yaml,创建名为 heat-user 的用户。

使用自己搭建的OpenStack 私有云平台,使用heat 编写摸板(heat_template_version: 2016-04-08)创建名为”chinaskills”的 domain,在此 domain 下创建名为 beijing_group 的租户,在此租户下创建名为 cloud 的用户,将此文件命名及保存在

/root/user_create.yml,完成后提交 controller 点的用户名、密码和 IP 地址到答题框。

(竞赛系统会执行yaml 文件,请确保执行的环境)

Controller

iaas-install-heat.sh

heat resource-type-template OS::Keystone::Domain > /root/user_create.yml

heat resource-type-template OS::Keystone::Project >> /root/user_create.yml

heat resource-type-template OS::Keystone::User >> /root/user_create.yml

【题目 2】1.2.2 KVM 优化[1 分]

在 OpenStack 平台上修改相关配置文件,启用-device virtio-net-pci in kvm。在自行搭建的 OpenStack 私有云平台或赛项提供的 all-in-one 平台上,修改相关配置

文件,启用-device virtio-net-pci in kvm,配置完成后提交控制节点的用户名、密码和

IP 地址到答题框。

controller

vim /etc/nova/nova.conf

【题目 3】1.2.3 NFS 对接 Glance 后端存储[1 分]

使用 OpenStack 私有云平台,创建一台云主机,安装 NFS 服务,然后对接 Glance 后端存储。 

使用赛项提供的 OpenStack 私有云平台,创建一台云主机(镜像使用CentOS7.9, flavor 使用带临时磁盘 50G 的),配置该主机为 nfs 的 server 端,将该云主机中的 50G 磁盘通过/mnt/test 目录进行共享(目录不存在可自行创建)。然后配置 controller 节点为 nfs 的 client 端,要求将/mnt/test 目录作为 glance 后端存储的挂载目录。配置完成后提交 controller 控制节点的用户名、密码和 IP 地址到答题框。 

Node :1.1.1.30

yum install nfs-utils rpcbind -y

systemctl start rpcbind

systemctl start nfs

mkdir /mnt/test

cat /etc/exports

/mnt/test *(rw,no_root_squash,sync)

exportfs -r

systemctl restart nfs

Systemctl stop firewalld

Controller

mount -t nfs 1.1.1.30:/mnt/test /var/lib/glance/images/

chown glance:glance -R /var/lib/glance/images/

【题目 4】1.2.4 Redis 主从[1 分]

使用赛项提供的OpenStack 私有云平台,创建两台云主机,配置为redis 的主从架构。使用赛项提供的 OpenStack 私有云平台,申请两台CentOS7.9 系统的云主机,使用提

供的 http 源,在两个节点安装 redis 服务并启动,配置 redis 的访问需要密码,密码设置为 123456。然后将这两个 redis 节点配置为 redis 的主从架构。配置完成后提交 redis 主节点的用户名、密码和 IP 地址到答题框。

验证

【题目 5】1.2.5 Linux 系统调优-脏数据回写[1 分]

修改系统配置文件,要求将回写磁盘的时间临时调整为 60 秒。

Linux 系统内存中会存在脏数据,一般系统默认脏数据 30 秒后会回写磁盘,修改系统配置文件,要求将回写磁盘的时间临时调整为 60 秒。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。 

Controller

vim /etc/sysctl.conf

添加一行执行

vm.dirty_expire_centisecs = 6000

sysctl -p

【题目 6】1.2.6 Glance 调优[1 分]

在 OpenStack 平台中,修改相关配置文件,将子进程数量相应的配置修改成 2。

在 OpenStack 平台中,glance-api 处理请求的子进程数量默认是 0,只有一个主进程,请修改相关配置文件,将子进程数量相应的配置修改成 2,这样的话有一个主进程加 2 个子进程来并发处理请求。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

Controller

vim /etc/glance/glance-api.conf

【题目 7】1.2.7 Ceph 部署[1 分]

使用提供的 ceph.tar.gz 软件包,安装 ceph 服务并完成初始化操作。

使用提供的 ceph-14.2.22.tar.gz 软件包,在 OpenStack 平台上创建三台 CentOS7.9 系统的云主机,使用这三个节点安装 ceph 服务并完成初始化操作,第一个节点为 mon/osd 节点,第二、三个节点为 osd 节点,部署完 ceph 后,创建 vms、images、volumes 三个pool。完成后提交第一个节点的用户名、密码和 IP 地址到答题框。

没做出来

【题目 8】1.2.8 Glance 对接 Ceph 存储[1 分]

修改 OpenStack 平台中 Glance 服务的配置文件,将 Glance 后端存储改为 Ceph 存储。在自己搭建的 OpenStack 平台中修改 glance 服务的相关配置文件,将glance 后端存

储改为 ceph 存储。也就是所以的镜像会上传至 ceph 的 images pool 中。通过命令使用cirros-0.3.4-x86_64-disk.img 镜像文件上传至云平台中,镜像命名为 cirros。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。

Controller

vim /etc/glance/glance-api.conf

default_store = rbd  #参数改成RDB

rbd_store_pool = images  #是ceph存储池的名称

rbd_store_user = glance   #是ceph的用户名

rbd_store_ceph_conf = /etc/ceph/ceph.conf  #是ceph配置文件的路径

systemctl restart openstack-glance-api  #重启服务

上传镜像到云平台

openstack image create --min-disk 10 --min-ram 1024 --file cirros-0.3.4-x86_64-disk.img cirros  #命名为cirros,启动硬盘为 10G,最小启动内存为 1G。

【题目 9】1.2.9 Cinder 对接 Ceph 存储[1 分]

修改 OpenStack 平台中 cinder 服务的配置文件,将 cinder 后端存储改为 Ceph 存储。修改 OpenStack 平台中 cinder 服务的相关配置文件,将 cinder 后端存储改为 ceph 存

储。使创建的 cinder 块存储卷在 ceph 的 volumes pool 中。配置完成后,在 OpenStack 平台中使用创建卷 cinder-volume1,大小为 1G。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。

controller 

开头加入

vim /etc/cinder/cinder.conf

5 enabled_backends = ceph

6 default_volume_type = ceph

文件底部加入

[ceph]

volume_driver = cinder.volume.drivers.rbd.RBDDriver

rbd_pool = volumes

rbd_ceph_conf = /etc/ceph/ceph.conf

rbd_flatten_volume_from_snapshot = false

rbd_max_clone_depth = 5

rbd_store_chunk_size = 4

rados_connect_timeout = -1

rbd_user = cinder

rbd_secret_uuid = your-secret-uuid

重启服务

systemctl restart openstack-cinder-volume.service

创建卷

openstack volume create --size 1 cinder-volume1

【题目 10】1.2.10 Nova 对接 Ceph 存储[1 分]

修改 OpenStack 平台中 Nova 服务的配置文件,将 Nova 后端存储改为 Ceph 存储。修改 OpenStack 平台中 nova 服务的相关配置文件,将 nova 后端存储改为 ceph 存储。

使 nova 所创建的虚拟机都存储在 ceph 的 vms pool 中。配置完成后在 OpenStack 平台中使用命令创建云主机 server1。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。

controller

vim /etc/nova/nova.conf

images_type = rbd

images_rbd_pool = vms

images_rbd_ceph_conf = /etc/ceph/ceph.conf

rbd_user = ceph-user

rbd_secret_uuid = secret-uuid

创建云主机server1

先创建网络

要确定物理网络名称和vlanid的范围

vim /etc/neutron/plugins/ml2/ml2_conf.ini

创建网络

openstack network create --provider-network-type vlan --provider-physical-network provider --provider-segment 800 extnet

创建子网

openstack subnet create --network extnet --subnet-range 1.1.1.0/24 --allocation-pool start=1.1.1.30,end=1.1.1.50 --gateway 1.1.1.2 --dns-nameserver 8.8.8.8 extsubnet

准备好镜像规格和网络

创建云主机server1

openstack server create --image 7287380e-ebd0-4886-8273-2e38e12fe323 --flavor 2 --network 3dbb2b3a-0263-417e-9056-c0034b4a472b server1

【题目 11】1.2.11 私有云平台优化:系统网络优化[1 分]

使用自行创建的 OpenStack 云计算平台,配置控制节点的网络缓存,使得每个 UDP 连接(发送、接受)保证能有最小 358 KiB 最大 460 KiB 的 buffer,重启后仍然生效。配置完成后提交 controller 控制节点的用户名、密码和 IP 地址到答题框。

Controller

vim /etc/sysctl.conf

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.core.rmem_default = 358400

net.core.rmem_max = 460800

net.core.wmem_default = 358400

net.core.wmem_max = 460800

【题目 12】1.2.12 私有云平台排错:Neutron 网络组件排错[2 分]

使用赛项提供的 chinaskill-error01 镜像创建一台云主机(云主机的登录用户名为root,密码为 Abc@1234),该云主机中存在错误的网络服务,错误现象为 dashboard 不能查看网络相关的页面,请修复 neutron 服务。修复完成后提交该云主机的用户名、密码和IP 地址到答题框。

无环境

【题目 13】1.2.13 私有云平台排错:Cinder 卷组件报错[2 分]

使用赛项提供的 chinaskill-error01 镜像创建一台云主机(云主机的登录用户名为root,密码为 Abc@1234),该云主机中存在错误的卷服务,错误现象为无法正常使用cinder 命令,请修复卷服务,然后使用命令创建名为 chinaskill-cinder 的卷,大小为2G。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。

无环境

【任务 3】私有云运维开发[10 分]

【适用平台】私有云

【题目 1】1.3.1 编写 Shell 一键部署脚本[1.0 分] 编写一键部署 nfs 云网盘应用系统。

在 OpenStack 私有云平台,创建一台云主机,使用提供的软件包,在 root 目录下编写一键部署脚本install_owncloud.sh,要求可以一键部署 owncloud 云网盘应用系统。完成后提交节点的 IP 地址、用户名和密码到答题框。 

虚拟机信息

搭建OwnCloud网盘。

首先确保Linux能够正常上网(需要上网下载安装包)
1. 添加一个新的软件源

wget --no-check-certificate https://download.opensuse.org/repositories/isv:ownCloud:server:10/CentOS_7/isv:ownCloud:server:10.repo​编辑

  1. 安装OwnCloud-files

yum -y install https://labfileapp.oss-cn-hangzhou.aliyuncs.com/owncloud-complete-files-10.5.0-3.1.noarch.rpm

3. 安装验证Apache服务

如安装失败,清理缓存,生成缓存

关防火墙沙河

网页访问ip

4. 配置Apache文件

在105加入

# owncloud config

Alias /owncloud "/var/www/html/owncloud/"

<Directory /var/www/html/owncloud/>

    Options +FollowSymlinks

    AllowOverride All

    <IfModule mod_dav.c>

        Dav off

    </IfModule>

    SetEnv HOME /var/www/html/owncloud

    SetEnv HTTP_HOME /var/www/html/owncloud

</Directory>

  1. 手动更新rpm源

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/epel-release-latest-7.noarch.rpm

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/webtatic-release.rpm

  1. 安装PHP 7.2版本   #安装较慢耐心等待

yum -y install php72w-cli php72w-common php72w-devel php72w-mysql php72w-xml php72w-odbc php72w-gd php72w-intl php72w-mbstring

  1. 将PHP配置到Apache中

编辑文件最后一行加入如下

然后重启httpd

8 .安装mysql

拖包,编写脚本,给权限,

执行脚本

更改数据库密码为root

再次进入mysql创建一个数据库,保存来自 OwnCloud 的数据。使用下面的命令创建数据库和数据库用户

create database owncloud;

GRANT ALL ON owncloud.* TO ocuser@localhost IDENTIFIED BY 'owncloud';

flush privileges;

在浏览器输入http://ip地址/owncloud 并访问,进入下面页面。

创建管理员账户,配置数据库

点击安装完成

登录即可

搭建完成

shell脚本搭建ownclould

#!/bin/bash

setenforce 0

systemctl stop firewalld

cd /etc/yum.repos.d/

yum -y install wget

wget --no-check-certificate https://download.opensuse.org/repositories/isv:ownCloud:server:10/CentOS_7/isv:ownCloud:server:10.repo

yum -y install https://labfileapp.oss-cn-hangzhou.aliyuncs.com/owncloud-complete-files-10.5.0-3.1.noarch.rpm

yum -y install httpd

systemctl start httpd

cat >> /etc/httpd/conf/httpd.conf << EOF

# owncloud config

Alias /owncloud "/var/www/html/owncloud/"

<Directory /var/www/html/owncloud/>

Options +FollowSymlinks

AllowOverride All

<IfModule mod_dav.c>

Dav off

</IfModule>

SetEnv HOME /var/www/html/owncloud

SetEnv HTTP_HOME /var/www/html/owncloud

</Directory>

EOF

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/epel-release-latest-7.noarch.rpm

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/webtatic-release.rpm

yum -y install php72w

yum -y install php72w-cli php72w-common php72w-devel php72w-mysql php72w-xml php72w-odbc php72w-gd php72w-intl php72w-mbstring

echo "PHPIniDir /etc/php.ini" >> /etc/httpd/conf/httpd.conf

systemctl restart httpd

给权限执,访问网站即可http://1.1.1.11/owncloud

备注:此脚本搭建没有搭建mysql,访问网站别选mysql,选择sqlite即可

也可自行加入数据库的一些步骤

【题目 2】1.3.2 Ansible 服务部署:部署 ELK 集群服务[2 分]

编写 Playbook,部署的 ELK。

使用赛项提供的 OpenStack 私有云平台,创建三台 CentOS7.9 系统的云主机分别命名为 elk-1、elk-2 和 elk-3,Ansible 主机可以使用上一题的环境。要求 Ansible 节点编写剧本,执行 Ansible 剧本可以在这三个节点部署 ELK 集群服务(在/root 目录下创建install_elk 目录作为 ansible 工作目录,部署的入口文件命名为 install_elk.yaml)。

具体要求为三个节点均安装 Elasticserach 服务并配置为 Elasticserach 集群;kibana 安

装在第一个节点;Logstash 安装在第二个节点。(需要用到的软件包在 HTTP 服务下)完成后提交 ansible 节点的用户名、密码和 IP 地址到答题框。(考试系统会连接到 ansible 节点,执行 ansible 脚本,准备好环境,以便考试系统访问)

Ansible 1.1.1.14

1/1.1.1.11

2/1.1.1.12

3/1.1.1.13

#####Ansibie#####

下载yum -y install ansible工具

需要先下载epel仓库才能下载

yum install epel-release

yum -y install ansible

#域名解析(all node) #全部节点

cat >> /etc/hosts <<EOF

10.10.10.71 ansible

10.10.10.72 elk-1

10.10.10.73 elk-2

10.10.10.74 elk-3

EOF

#####centos7.9 node#####  #进行改名

hostnamectl set-hostname elk-1

hostnamectl set-hostname elk-2

hostnamectl set-hostname elk-3

####Ansible node##### #创建需要的角色目录

mkdir /root/install_elk

touch /root/install_elk/install_elk.yaml

mkdir -p /root/install_elk/roles/{ela,kib,log}/{files,handlers,tasks,templates,vars}

#在ansible节点与三台节点建立免密钥通信  #拷贝公钥给elk1-3

ssh-keygen

ssh-copy-id elk-1

ssh-copy-id elk-2

ssh-copy-id elk-3

#ansible主机清单  编辑配置

cat >>  /etc/ansible/hosts <<EOF

[ela]

elk-1 node_name=elk-1

elk-2 node_name=elk-2

elk-3 node_name=elk-3

[kib]

elk-1

[log]

elk-2

EOF

下面开始写剧本

主入口文件

/root/install_elk/install_elk.yaml

cat > /root/install_elk/install_elk.yaml <<EOF

---

- hosts: ela

  gather_facts: no

  remote_user: root

  roles:

  - ela

- hosts: kib

  gather_facts: no

  remote_user: root

  roles:

  - kib

  

- hosts: log

  gather_facts: no

  remote_user: root

  roles:

  - log

EOF

部署ela集群

/root/install_elk/roles/ela/tasks/main.yaml入口文件

cat > /root/install_elk/roles/ela/tasks/main.yaml <<EOF

- name: 安装Java环境

  unarchive:

    src: jdk-8u144-linux-x64.tar.gz  

    dest: /opt

    list_files: yes

- name: 添加Java环境变量

  shell: echo 'export JAVA_HOME=/opt/jdk1.8.0_144' >> /etc/profile && echo 'export PATH=$PATH:/opt/jdk1.8.0_144/bin' >> /etc/profile

- name: 生效环境变量

  shell: source /etc/profile

- name: 创建用户

  user:

    name: ela

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: elasticsearch-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    owner: ela

    group: ela

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/elasticsearch

    state: link

- name: 传输配置文件

  template:

    src: elasticsearch.j2

    dest: /opt/elasticsearch/config/elasticsearch.yml

    owner: ela

    group: ela

    

- name: 传输系统配置文件

  copy:

    src: limits.conf

    dest: /etc/security/limits.conf

- name: 传输系统配置文件

  copy:

    src: sysctl.conf

    dest: /etc/sysctl.conf

- name: 加载 /etc/sysctl.conf文件,使内核参数生效

  shell: sysctl -p

- name: 启动服务

  # 使用ela用户执行此命令

  become: yes

  become_user: ela

  command:

    # argv 是一个列表,存放了需要执行的命令及其参数

    # 一行一个

    argv:

      - nohup

      - /opt/elasticsearch/bin/elasticsearch

      - -d

EOF

/root/install_elk/roles/ela/templates/elasticsearch.j2,elasticsearch的主配置文件模板

cat > /root/install_elk/roles/ela/templates/elasticsearch.j2 <<EOF

cluster.name: elk

node.name: {{ node_name }}

node.data: true

network.host: 0.0.0.0

http.port: 9200

discovery.seed_hosts:

   - 1.1.1.11

   - 1.1.1.12

   - 1.1.1.13

cluster.initial_master_nodes: ["elk-1","elk-2","elk-3"]

EOF

/root/install_elk/roles/ela/files/limits.conf,系统文件句柄数配置文件

cat > /root/install_elk/roles/ela/files/limits.conf <<EOF

* soft nofile 65535

* hard nofile 65535

* soft nproc  4096

* hard nproc 4096

EOF

/root/install_elk/roles/ela/files/sysctl.conf,系统的内核配置文件

cat > /root/install_elk/roles/ela/files/sysctl.conf <<EOF

vm.max_map_count=655360

EOF

/root/install_elk/roles/kib/tasks/main.yaml任务入口文件

cat > /root/install_elk/roles/kib/tasks/main.yaml <<EOF

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: kibana-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    owner: ela

    group: ela

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/kibana

    state: link

- name: 创建日志与PID存放目录

  shell: mkdir -p /var/log/kibana /run/kibana

- name: 给如上目录设置权限

  shell: chown -R ela:ela /var/log/kibana /run/kibana

- name: 传输配置文件

  copy:

    src: kibana.yml

    dest: /opt/kibana/config/kibana.yml

    

- name: 传输服务管理文件

  template:

    src: kibana.service.j2

    dest: /etc/systemd/system/kibana.service

- name: 启动服务

  systemd:

    name: kibana

    state: started

    daemon_reload: yes

EOF

/root/install_elk/roles/kib/files/kibana.ymlKibana 程序的配置文件

cat > /root/install_elk/roles/kib/files/kibana.yml <<EOF

server.port: 5601

server.host: "0.0.0.0"

elasticsearch.hosts: ["http://1.1.1.11:9200"]

i18n.locale: "zh-CN"

pid.file: /run/kibana/kibana.pid

logging.dest: /var/log/kibana/kibana.log

EOF

/root/install_elk/roles/kib/templates/kibana.service.j2 ,Kibana 程序管理模板文件

cat > /root/install_elk/roles/kib/templates/kibana.service.j2 <<EOF

[Unit]

Description=Kibana

Documentation=https://www.elastic.co

After=network-online.target

Wants=network-online.target

[Service]

Type=simple

User=ela

Group=ela

ExecStart=/opt/kibana/bin/kibana

ExecStop=/bin/pkill -F "/run/kibana/kibana.pid"

Restart=on-failure

RestartSec=3

StartLimitBurst=3

StartLimitInterval=60

WorkingDirectory=/opt/kibana

StandardOutput=journal

StandardError=inherit

[Install]

WantedBy=multi-user.target

EOF

/root/install_elk/roles/log/tasks/main.yaml任务入口文件

cat > /root/install_elk/roles/log/tasks/main.yaml <<EOF

- name: 创建日志目录

  file:

    path: /var/log/logstash

    state: directory

- name: 服务日志目录权限

  shell: chown -R ela:ela /var/log/logstash

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: logstash-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/logstash

    state: link

- name: 传输配置文件

  template:

    src: logstash.yml

    dest: /opt/logstash/config/logstash.yml

- name: 传输管道配置文件

  copy:

    src: logstash.conf

    dest: /opt/logstash/config/logstash-sample.conf

    

- name: 传输系统服务文件

  template:

    src: logstash.service.j2

    dest: /etc/systemd/system/logstash.service

- name: 启动 logstash

  systemd:

    name: logstash

    state: started

    daemon_reload: yes

- name: restart logstash

  systemd:

    name: logstash

    state: restarted

    daemon_reload: yes

#- name: 启动服务

#  become: yes

#  become_user: ela

#  shell: sh /opt/logstash/bin/logstash -f /opt/logstash/config/logstash-sample.conf

EOF

[root@ansible ~]# cat install_elk/roles/log/tasks/main.yaml

- name: 创建日志目录

  file:

    path: /var/log/logstash

    state: directory

- name: 服务日志目录权限

  shell: chown -R ela:ela /var/log/logstash

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: logstash-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/logstash

    state: link

- name: 传输配置文件

  template:

    src: logstash.yml

    dest: /opt/logstash/config/logstash.yml

- name: 传输管道配置文件

  copy:

    src: logstash.conf

    dest: /opt/logstash/config/logstash-sample.conf

- name: 传输系统服务文件

  template:

    src: logstash.service.j2

    dest: /etc/systemd/system/logstash.service

- name: 启动 logstash

  systemd:

    name: logstash

    state: started

    daemon_reload: yes

- name: restart logstash

  systemd:

    name: logstash

    state: restarted

    daemon_reload: yes

#- name: 启动服务

#  become: yes

#  become_user: ela

#  shell: sh /opt/logstash/bin/logstash -f /opt/logstash/config/logstash-sample.conf

/root/install_elk/roles/log/templates/logstash.yml,Logstash 程序主配置文件

cat > /root/install_elk/roles/log/templates/logstash.yml <<EOF

http.host: "0.0.0.0"

path.logs: /var/log/logstash/

EOF

/root/install_elk/roles/log/files/logstash.conf,Logstash 程序管道配置文件

cat > /root/install_elk/roles/log/files/logstash.conf <<EOF

#将本地的/var/log/yum.log内日志标准输入

input {

  file {

    path => "/var/log/yum.log"

    type => "yum_log"

    start_position => "beginning"

  }

}

#标准输出到elasticsearch中

output {

  elasticsearch {

    hosts =>  ["1.1.1.11:9200","1.1.1.12:9200","1.1.1.13:9200"]

    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"

    #user => "elastic"

    #password => "changeme"

  }

}

EOF

/root/install_elk/roles/log/templates/logstash.service.j2,Logstash 程序进程管理模板文件

cat > /root/install_elk/roles/log/templates/logstash.service.j2 <<EOF

Unit]

Description=logstash

[Service]

Type=simple

ExecStart=/opt/logstash/bin/logstash "-f" "/opt/logstash/config/*.conf"

Restart=always

WorkingDirectory=/

LimitNOFILE=65535

TimeoutStopSec=infinity

[Install]

WantedBy=multi-user.target

EOF

对应包放在对应目录下

项目目录结构

测试ping

检测语法

无报错执行即可

跑完进行验证

Elk1-3关闭防火墙沙河

输入1.1.1.11:5601

输入1.1.1.11:5601/status可以查看状态

验证:

​ 在任务栏中再到管理 -》堆栈管理。

​ 创建一个索引模式,选择所有的索引。

要先创建一个样例

测试安装一个软件来生成数据。

[root@elk-2 ~]#yum -y install httpd

​来到discover中检索数据。

到此配置完成

【题目 3】1.3.3 Ansible 部署 Kafka 服务[2.0 分]

编写 Playbook,部署的 ZooKeeper 和 Kafka。

使用提供的 OpenStack 私有云平台,创建 4 台系统为 centos7.5 的云主机,其中一台作为 Ansible 的母机并命名为 ansible,另外三台云主机命名为 node1、node2、node3,通过附件中的/ansible/ansible.tar.gz 软件包在 ansible 节点安装 Ansible 服务;使用这一台母机,编写 Ansible 脚本(在/root 目录下创建 example 目录作为 Ansible 工作目

录,部署的入口文件命名为 cscc_install.yaml),编写 Ansible 脚本使用 roles 的方式对其他三台云主机进行安装 kafka 集群的操作(zookeeper 和 kafka 的安装压缩包在gpmall-single.tar.gz 压缩包中,将 zookeeper 和 kafka 的压缩包解压到 node 节点的

/opt 目录下进行安装)。完成后提交 ansible 节点的用户名、密码和 IP 地址到答题框。

(考试系统会连接到你的 ansible 节点,去执行 ansible 脚本,请准备好环境,以便考试系统访问)

roles没做出来,没滤清思路,就做了普通的剧本

Ansile/1.1.1.14

Worker01/1.1.1.11

Worker02/1.1.1.12

Worker03/1.1.1.13

[root@ansible ~]# cat wkm.yaml

---

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 关闭防火墙

      systemd:

        name: firewalld

        state: stopped

    - name: 永久关闭防火墙

      systemd:

        name: firewalld

        enabled: no

    - name: 查看防火墙状态

      systemd:

        name: firewalld

    - name: 下载jdk

      yum:

        name: java-1.8.0-openjdk-devel.x86_64

        state: present

    - name: 查看jdk是否生效

      shell: java -version

      shell: jps

    - name: 创建目录

      command: mkdir -p /home/kafka-zookeeper

    - name: 转移包到新创建的目录下

      shell: mv apache-zookeeper-3.8.2-bin.tar.gz /home/kafka-zookeeper/

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/

    - name: 解压apache包

      command: tar -zxvf apache-zookeeper-3.8.2-bin.tar.gz

      args:

        chdir: /home/kafka-zookeeper/

    - name: 创建 data 目录

      file:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data

        state: directory

    - name: 创建 logs 目录

      file:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/logs

        state: directory

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/

    - name: 修改文件名

      command: mv /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo_sample.cfg /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo.cfg

    - name: 清空文件内容

      copy:

        content: ""

        dest: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo.cfg

    - name: 添加配置到 zoo.cfg 文件

      blockinfile:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo.cfg

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          tickTime=2000

          initLimit=10

          syncLimit=5

          dataDir=/home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/

          dataLogDir=/home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/logs/

          clientPort=2181

          server.1=1.1.1.11:2888:3888

          server.2=1.1.1.12:2888:3888

          server.3=1.1.1.13:2888:3888

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data

    - name: 创建 myid 文件

      command: touch /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

- hosts: worker01

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 输入1

      lineinfile:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

        line: '1'

        create: yes

- hosts: worker02

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

     - name: 输入2

       lineinfile:

         path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

         line: '2'

         create: yes

- hosts: worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

     - name: 输入3

       lineinfile:

         path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

         line: '3'

         create: yes

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 启动ZooKeeper

      command: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin//bin/zkServer.sh start

      args:

        chdir: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/

    - name: 查看集群状态

      command: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin//bin/zkServer.sh status

      args:

        chdir: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 进入root下

      shell: cd /root/

    - name: 转移包到kafka-zookeeper

      shell: mv kafka_2.13-3.4.1.tgz /home/kafka-zookeeper/

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/

    - name: 解压kafka包

      command: tar -zxvf kafka_2.13-3.4.1.tgz

      args:

        chdir: /home/kafka-zookeeper/

    - name: 创建 data 目录

      file:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/data

        state: directory

    - name: 创建 logs 目录

      file:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/logs

        state: directory

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/kafka_2.13-3.4.1/config/

    - name: 清空文件

      copy:

        content: ""

        dest: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

- hosts: worker01

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 编辑文件

      blockinfile:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          broker.id=1

          listeners=PLAINTEXT://1.1.1.11:9092

          num.network.threads=12

          num.io.threads=24

          socket.send.buffer.bytes=102400

          socket.receive.buffer.bytes=102400

          socket.request.max.bytes=104857600

          log.dirs=/home/kafka-zookeeper/kafka_2.13-3.4.1/logs

          num.partitions=3

          num.recovery.threads.per.data.dir=12

          offsets.topic.replication.factor=3

          transaction.state.log.replication.factor=3

          transaction.state.log.min.isr=3

          log.retention.hours=168

          log.segment.bytes=1073741824

          log.retention.check.interval.ms=300000

          zookeeper.connect=1.1.1.11:2181,1.1.1.12:2181,1.1.1.13:2181

          zookeeper.connection.timeout.ms=18000

          group.initial.rebalance.delay.ms=0

- hosts: worker02

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 编辑文件

      blockinfile:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          broker.id=2

          listeners=PLAINTEXT://1.1.1.11:9092

          log.dirs=/home/kafka-zookeeper/kafka_2.13-3.4.1/logs

          num.partitions=3

          zookeeper.connect=1.1.1.11:2181,1.1.1.12:2181,1.1.1.13:2181

- hosts: worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 编辑文件

      blockinfile:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          broker.id=3

          listeners=PLAINTEXT://1.1.1.13:9092

          log.dirs=/home/kafka-zookeeper/kafka_2.13-3.4.1/logs

          num.partitions=3

          zookeeper.connect=1.1.1.11:2181,1.1.1.12:2181,1.1.1.13:2181

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 启动kafk集群

      shell:

         nohup /home/kafka-zookeeper/kafka_2.13-3.4.1/bin/kafka-server-start.sh /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties >> /home/kafka-zookeeper/kafka_2.13-3.4.1/logs/kafka.log 2>&1 &

- hosts: worker01

  remote_user: root

- name: 执行Kafka命令

  hosts: worker01

  remote_user: root

  tasks:

    - name: 在指定目录下执行命令

      shell: |

        cd /home/kafka-zookeeper/kafka_2.13-3.4.1/bin/

        ./kafka-topics.sh --create --bootstrap-server 1.1.1.11:9092,1.1.1.12:9092,1.1.1.13:9092 --replication-factor 3 --partitions 3 --topic hkzs

        ./kafka-topics.sh --list --bootstrap-server 1.1.1.11:9092

        ./kafka-topics.sh --list --bootstrap-server 1.1.1.12:9092

        ./kafka-topics.sh --list --bootstrap-server 1.1.1.13:9092

      args:

        executable: /bin/bash

【题目 4】1.3.4 OpenStack 资源管理的客户端程序开发 [2 分]

使用已建好的 OpenStack Python 运维开发环境,在 root 目录下创建resource_manager.py 脚本,基于 OpenStack 资源配额管理服务封装客户端工具, resource_manager.py 程序支持命令行带参数执行,命令参数要求说明如下:

(1)位置参数“command”,表示操作类型。操作类型包括“list”:标识查看所有的对象;“get”:查询指定的对象。

(2)位置参数“resource”,表示资源信息类型:类型包括 “provider”:资源提供者;“inventory”:资源库存;“usage”:资源使用情况。

(3)参数“-p 或-- provider”,标识资源提供者的名称。功能要求如下:

(1)程序查询所有资源提供者,以 json 格式控制台输出。

执行实例如下: python3 resource_manager.py list provider

(2)查询指定资源提供者的资源信息,以 json 格式控制台输出。

执行实例如下: python3 resource_manager.py get provider -p “providername”

(3)查询指定资源提供者的资源库存信息,以 json 格式控制台输出。执行实例如下: python3 resource_manager.py get inventory -p

“providername”

(4)查询指定资源提供者的资源使用信息,以 json 格式控制台输出。

执行实例如下: python3 resource_manager.py get usage -p “providername”

【题目 5】1.3.5 OpenStack 数据库操作开发[3 分]

使用已建好的 OpenStack Python 运维开发环境,在/root 目录下创建mysql_db_manager.py 脚本,基于 python 的 sqlalchemy 库进行数据库的管理,实现对OpenStack 内指定服务的MariaDB 数据库管理功能,实现该数据库下表创建、删除、数据插入、更新等操作(为确保检测成功,OpenStack MariaDB 数据库的账户 root、密码000000 不要修改):

该表(table)用于描述 OpenStack 成员信息,表结构如下: 表名称"member",该表有 4 个字段:

id INTEGER 主键,自动递增; name VARCHAR(256);

level INTEGER; place varchar(256);

(1)mysql_db_manager 内部实现 DM_Manager 类,类初始化方法 def init (self, db_name),参数 db_name 是 OpenStack 内部指定的某一服务数据库名称。

(2)DM_Manager 类实现create_table(self)方法。实现创建表功能,表指 member

表。

(3)DM_Manager 类实现insert_table_data(self,**kwargs)方法。实现表中表数据插入功能,参数 kwargs 参数为要插入数据记录信息,key 与表字段名称一致。

(4)DM_Manager 类实现update_table_data(self,**kwargs)方法。实现表中数据记

录更新功能,参数kwargs 参数为要更新数据记录信息,key 与表字段名称一致。

(5)DM_Manager 类实现run_table_raw_sql(self, raw_sql:str): 方法,无参数。实现表中直接执行sql 语句功能,raw_sql 参数为sql 语句。

(6)DM_Manager 类实现delete_table(self)方法。实现删除表功能,表指 member

表。

【任务 4】容器云服务搭建[5 分]

【适用平台】私有云

【题目 1】2.1.1 部署容器云平台[5 分]

使用 OpenStack 私有云平台创建两台云主机,云主机类型使用 4vCPU/12G/100G 类型, 分别作为 Kubernetes 集群的 Master 节点和 node 节点,然后完成 Kubernetes 集群的部署, 并完成 Istio 服务网格、KubeVirt 虚拟化和 Harbor 镜像仓库的部署。

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

Master/1.1.1.31

Node/1.1.1.32

Kubernetes 集群的部署

master:

mount -o loop chinaskills_cloud_paas_v2.0.2.iso /mnt/

cp -rfv /mnt/* /opt/

umount /mnt/

mv /opt/kubeeasy /usr/bin/kubeeasy

##安装依赖

kubeeasy install depend \

--host 1.1.1.31,1.1.1.32 \

--user root \

--password root \

--offline-file /opt/dependencies/base-rpms.tar.gz

##配置ssh免密钥

kubeeasy create ssh-keygen \

--master 1.1.1.31 \

--worker 1.1.1.32 \

--user root --password 000000

##安装kubernetes集群

kubeeasy install kubernetes \

--master 1.1.1.31 \

--worker 1.1.1.32 \

--user root \

--password root \

--version 1.22.1 \

--offline-file /opt/kubernetes.tar.gz

部署 Istio 服务网格

kubeeasy add --istio istio   #通过kubeeast工具安装lstio服务网格

kubectl create namespace iamges  #创建空间为images,可以在这个空间使用lstion服务网格

kubectl label namespace exam istio-injection=enabled   #给iamges空间添加了一个标签是enabled。在这个命名空间下创建的所有新的Pod都将自动注入Envoy代理作为Sidecar,使它们能够成为Istio服务网格的一部分。

KubeVirt 虚拟化

kubeeasy add --virt kubevirt

Harbor 镜像仓库的部署

kubeeasy add --registry harbor

【任务 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)

因无资源用此包代替

上传包,解压

上传镜像

配置yum源

[hypref]

name=hypref

baseurl=file:///root/yum

gpgcheck=0

enabled=1

Mysql脚本

#!/bin/bash

mysql_install_db --user=root

mysqld_safe --user=root &

sleep 8

mysqladmin -u root password 'tshoperp'

mysql -uroot -ptshoperp -e "grant all on *.* to 'root'@'%' identified by 'tshoperp'; flush privileges;"

mysql -uroot -ptshoperp -e " create database jsh_erp;use jsh_erp;source /opt/hyperf_admin.sql;"

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER hoyeong

RUN rm -rf /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/

COPY yum /root/yum

ENV LC_ALL en_US.UTF-8

RUN yum -y install mariadb-server

COPY sql /opt/

COPY mysql_init.sh /opt/

RUN bash /opt/mysql_init.sh

EXPOSE 3306

CMD ["mysqld_safe","--user=root"]

执行

有点步骤和题目不符合,要求导入jsh_erp.sql我导入的是,hyperf_admin.sql

【题目 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)

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER hoyeong

RUN rm -rf /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/

COPY yum /root/yum

RUN yum -y install redis

RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf

RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf

EXPOSE 6379

CMD ["/usr/bin/redis-server","/etc/redis.conf"]

构建镜像

【题目 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)

没包做不全

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER Fish

RUN rm -rf /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/

COPY yum /root/yum

RUN yum -y install nginx

EXPOSE 80

CMD ["nginx","-g","daemon off;"]

构建镜像

【题目 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)

没包只能注释一行

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER hoyeong

#COPY app.jar /root

ADD yum /root/yum

RUN rm -rfv /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/local.repo

RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

EXPOSE 9999

CMD java -jar /root/app.jar

构建镜像

【题目 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 触发自动构建,具体要求如下:

  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)

【题目 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 地址到答题框。

添加五行

controlle

vim /etc/kubernetes/manifests/kube-apiserver.yaml

 - --audit-log-path=/etc/kubernetes/audit-logs/audit.log

    - --audit-log-maxage=10

    - --audit-log-maxbackup=10

    - --audit-log-maxsize=500

- --audit-policy-file=/etc/kubernetes/audit-policy/policy.yaml

echo 'apiVersion: audit.k8s.io/v1

> kind: Policy

> rules:

> - level: RequestResponse

>   resources:

>   - group: ""

>     resources: ["pods"]

> - level: Request

>   resources:

>   - group: ""

>     resources: ["configmaps"]

>     namespaces: ["kube-system"]' > /etc/kubernetes/audit-policy/policy.yaml

【题目 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 代码,代码实现以下任务:

  1. 首先查询查询服务 service,如果 service 名称“nginx-svc”已经存在,先删除。 
  2. 如果不存在“nginx-svc”,则使用 service.yaml 文件创建服务。 
  3. 创建完成后,查询该服务的信息,查询的 body 部分以 json 格式的文件输出到当前目录下的 service_api_dev.json 文件中。 
  4. 然后使用 service_update.yaml 更新服务端口。
  5. 完成更新后,查询该服务的信息,信息通过控制台输出,并通过 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 代码,代码实现以下任务:

  1. 首先使用 nginx-deployment.yaml 文件创建 deployment 资源。 
  2. 创建完成后,查询该服务的信息,查询的 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 个方法:

  1. 实现方法 create_crd(),实现对 Competition CRD 的创建。 
  2. 实现方法 delete_crd(),实现对 Competition CRD 的删除。 
  3. 实现方法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 个方法:

  1. 实现方法 create_crd_object(ymlfile:str),实现 CRD 的自定义对象的创建,

yamlfile 为 CRD 的自定义对象 yaml 文件。

  1. 实现方法 delete_crd_object(crd_object_name:str),实现创建 CRD 功能,

crd_object_name 为 CRD 的自定义对象名称。

  1. 实现方法 watch_crd_object(crd_object_name:str),实现 CRD 的自定义对象变化事件监听,当监听到 CRD 的自定义对象的名称为crd_object_name 被删除时,将 event 信息输出到控制台,并停止监听。 

【赛程名称】模块三 公有云 

【任务 1】公有云服务搭建[5 分]

【适用平台】华为云

【题目 1】3.1.1 私有网络管理[0.3 分]

在公有云中完成虚拟私有云的创建。具体要求如下:

  1. 在上海一区域进行创建操作; 
  2. 创建一个名为 intnetX 的内部网络:IP 地址为 172.16.0.0/16;
  3. 创建子网名称为 intnetX-server:IP 地址为 172.16.1.0/24;
  4. 创建子网名称为 intnetX-mysql:IP 地址为 172.16.2.0/24;

完成创建后,提交当前的 AK(SecretId)、SK(SecretKey)和 intnetX 网络的 ID 到答题框。 

【题目 2】3.1.2 云实例管理[0.5 分]

登录华为云平台,创建两台云实例。具体要求如下:

  1. 计费模式:按需计费;
  2. 地域:上海一; 

  1. CPU 架构:x86 计算;
  2. 规格:c7.xlarge.2;

(5)镜像:CentOS 7.5 64 位;

  1. 系统盘:高 IO 50G 硬盘; 
  2. 公网带宽:按带宽计费,5Mbps;
  3. 实例名称:ChinaSkill-node-1、ChinaSkill-node-2;
  4. 登录方式:使用密码登录,密码自定义。 

创建完成后,提交当前的AK(SecretId)、SK(SecretKey)和 ChinaSkill-node-1 的实例 ID 到答题框。 

【题目 3】3.1.3 数据库管理[0.2 分]

使用 intnetX-mysql 网络创建三台云服务器 chinaskill-sql-1、chinaskill-sql-2 和chinaskill-sql-3(系统使用 CentOS7.9),使用提供的压缩文件 mongodb-repo.tar.gz 中的软件包源,在这三台云服务器上部署 MongoDB 数据库服务。 

配置完成后提交连接chinaskill-sql-1 节点的用户名、密码和公网IP 地址到答题框。

【题目 4】3.1.4 主从数据库[0.5 分]

在 chinaskill-sql-1 、chinaskill-sql-2 和 chinaskill-sql-3 云服务器中配置MongoDB 一主二从数据库+副本集操作,chinaskill-sql-1 节点为主节点,其余节点为从节点,配置 MongoDB 集群名称为 cloud。

完成后提交连接 chinaskill-sql-1 节点的用户名、密码和公网 IP 地址到答题框。

【题目 5】3.1.5 node 环境管理[0.5 分]

使用提供的压缩文件,安装 Node.js 环境。

使用提供的压缩文件 rocketchat-cloud.tar.gz 中软件包源,在 ChinaSkill-node-1

部署 nodejs,根据所提供的 rocket.chat 所需要求安装 nodejs 对应版本。配置完成后提交

连接 ChinaSkill-node-1 节点的用户名、密码和公网 IP 地址到答题框。

【题目 6】3.1.6 安全组管理[0.5 分]

根据要求,创建一个安全组。具体要求如下:

(1)名称:intnetX-security;

(2)允许策略:只放行源地址为 172.16.1.0/24 访问 27017 端口;

  1. 允许策略:只放行源地址为 172.16.1.0/24 使用 ping 命令访问; 
  2. 关联实例:将 intnetX-security 安全组关联至所创建的数据库中;

创建完成后,提交当前的 AK(SecretId)、SK(SecretKey)和安全组 ID 到答题框。 

【题目 7】3.1.7 RocketChat 上云[0.5 分]

使用 http 服务器提供文件,将 Rocket.Chat 应用部署上云。

使用http 服务器提供的压缩文件rocketchat-cloud.tar.gz 中的RocketChat 软件包, 在 ChinaSkill-node-1 中部署RocketChat 的Web 服务。使用chinaskill-sql-1 的MongoDB 为后端数据库,设置 RocketChat 服务访问端口为 3000。完成 Rocketchat 系统上云后,将ChinaSkill-node-1 节点的用户名、密码和公网 IP 地址到答题框。 

【题目 8】3.1.8 NAT 网关[0.5 分]

根据要求创建一个公网 NAT 网关。具体配置如下:

  1. 名称为:kcloud-nat;
  2. 虚拟私有云:intnetX;
  3. 子网:intnetX-server;
  4. 规则:内部子网地址访问外网; 
  5. 设置 Chinaskill-node-1 云服务器 3000 端口转换为外部 3000 服务端口。

创建完成后提交当前的 AK(SecretId)、SK(SecretKey)和 NAT 网关的 ID 到答题框。

【题目 9】3.1.9 云备份[0.5 分]

创建一个云服务器备份存储库名为 server_backup,容量为 100G。将 ChinaSkill- node-1 云服务器制作镜像文件 chinaskill-image。

完成后,将当前的 AK(SecretId)、SK(SecretKey)和存储库 ID 到答题框。

【题目 10】3.1.10 负载均衡器[0.5 分]

根据要求创建一个负载均衡器 chinaskill-elb。

将 ChinaSkill-node-1 和 ChinaSkill-node-2 加入负载均衡的后端。设置一个可用的公网服务 IP,服务端口为 3000。配置监听器,监听 3000 端口。对浮动公共 IP 进行 Web 访问测试。完成后,提交当前的 AK(SecretId)、SK(SecretKey)和负载均衡器的 ID 到答题框。 

【题目 11】3.1.11 弹性伸缩管理[0.5 分]

根据要求新建一个弹性伸缩启动配置。具体要求如下:

  1. 启动配置名称:template-exam;
  2. 计费模式:按量计费;
  3. 地域:上海一; 
  4. 镜像:chinaskill-image;
  5. 登录方式:使用密码登录,密码自定义。创建一个伸缩组,具体要求如下: 
  1. 名称:as-exam; 
  2. 最小伸缩数:1;起始实例数:1;最大伸缩数:5;
  3. 启动配置:template-exam;

  1. 使用负载均衡:chinaskill-elb;
  2. 移出策略:移出最旧的实例。 

为伸缩组 as-exam 新建告警触发策略,具体要求如下:

  1. 如果实例的内存利用率在 5 分钟内的最大值小于 40%,且连续发生 3 次。则实例

数减少 1 台。冷却 60 秒;

  1. 如果实例的内存利用率在 5 分钟内的最大值大于 80%,且连续发生 3 次。则实例

数增加 1 台。冷却 60 秒;

  1. 如果实例的 CPU 利用率在 5 分钟内的最大值小于 40%,且连续发生 3 次。则实例数减少 1 台。冷却 60 秒; 
  2. 如果实例的 CPU 利用率在 5 分钟内的平均值大于等于 80%,且连续发生 3 次。则实例数增加 1 台。冷却 60 秒。 

创建完成后提交当前的 AK(SecretId)、SK(SecretKey)和伸缩组的实例 ID 到答题框。 

【任务 2】公有云服务运维[10 分]

【适用平台】华为云

【题目 1】3.2.1 云容器引擎[1 分]

在公有云上,按照要求创建一个 x86 架构的容器云集群。具体要求如下:

(1)集群名称:kcloud;

(2)集群版本:v1.25;

  1. 地域:上海一; 
  2. 集群管理规模:50 节点; 
  3. 节点使用子网:intnetX-server;
  4. 节点预留容器 IP 上限:64;

(7)容器网段:10.10.0.0/16。

创建一个集群节点,节点配置信息要求如下:

  1. 节点名称:kcloud-server;
  2. 节点规格:c6s.xlarge.2
  3. 节点:EulerOS 2.9
  4. 使用 docker 容器引擎

创建完成后提交当前的 AK(SecretId)、SK(SecretKey)和集群的 ID 到答题框。

【题目 2】3.2.2 云容器管理[1 分]

使用插件管理在 kcloud 容器集群中安装dashboard 可视化监控界面。完成后,提交 dashboard 访问地址到答题框。

【题目 3】3.2.3 使用 kubectl 操作集群[2 分]

在 kcloud 集群中安装 kubectl 命令,使用 kubectl 命令管理 kcloud 集群。完成后提交连接 kcloud 集群节点的用户名、密码和公网 IP 地址到答题框。 

【题目 4】3.2.4 安装 helm[2 分]

在 k8s 集群中创建 chartmuseum 命名空间,编写 yaml 文件部署 ChartMuseum 服务。 使用提供的 helm 软件包(软件包为 helm-v3.3.0-linux-amd64.tar.gz 在 http 服务

下),在 kcloud 集群中安装 helm 服务。

完成后提交连接 kcloud 集群节点的用户名、密码和公网 IP 地址到答题框。

【题目 5】3.2.5 chartmuseum 仓库部署[2 分]

在 k8s 集群中创建 chartmuseum 命名空间,编写 yaml 文件部署 ChartMuseum 服务。在 k8s 集群中创建chartmuseum 命名空间,编写 yaml 文件在 chartmuseum 命名空间中

使用 chartmuseum:latest 镜像创建本地私有 chart 仓库,设置其仓库存储目录为宿主机的

/data/charts 目录。编写 service.yaml 文件,为chart 私有仓库创建 Service 访问策略,

定义其为 ClusterIP 访问模式。编写完成后启动 chartmuseum 服务。提交连接 kcloud 集群

节点的用户名、密码和公网 IP 地址到答题框。

【题目 6】3.2.6 WordPress 应用部署[2 分]

根据提供的 chart 包 wordpress.tgz 部署 WordPress 服务。

根据提供的 chart 包 wordpress-13.0.23.tgz 部署 wordpress 服务,根据 chart 包中内容创建 wordpress 所需要的 pv,并修改其访问模式为 NodePort。使用修改后的 chart 包创建 wordpress 服务。完成后提交连接 kcloud 集群节点的用户名、密码和公网 IP 地址到答题框。 

【任务 3】公有云运维开发[10 分]

【适用平台】华为云

【题目 1】3.3.1 开发环境搭建[1 分]

创建一台云主机,并登录此云服务器,基于云服务器 Python3.6.8 运行环境,安装

SDK 依赖库。

通过华为云控制台,选择北京四区域,创建一台 x86 架构,“按需计费”的 2 核, 4G,系统盘 50G 的云实例,实例名为 chinaskill,选择镜像为 CentOS 7.9 64bit(40GB), 分配独立的公网 IP,带宽选择按使用流量计费 5M。登录此云服务器,在云服务器Python3.6.8 环境上,安装华为云最新版本 SDK 的依赖库,包括弹性云服务、虚拟私有

云、镜像服务、容器云引擎、云数据库的 python 库。

完成后提交“chinaskill”开发运行环境云主机的用户名、密码和 IP 地址到答题框。

【题目 2】3.3.2 密钥对管理[2 分]

编写 Python 代码,实现密钥对的创建。

在云服务器的/root/huawei/目录下编写 create_keypair.py 文件,使用 SDK 编写

Python 代码,创建华为云的秘钥对,具体要求为:

  1. 秘钥对名称:chinaskills_keypair;
  2. 如果秘钥对已经存在,代码中需要先删除; 
  3. 输出此秘钥对详细信息。 

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

【题目 3】3.3.3 云硬盘管理[2 分]

调用 SDK 云硬盘管理的方法,实现云主机的的增删查改。

在/root/huawei 目录下编写 create_block_store.py 文件,使用 SDK 编写 Python 代码,调用创建华为云的云硬盘,具体要求如下: 

  1. 云硬盘可用区域:cn-north-4a
  2. 云硬盘名称:chinaskills_volume
  3. 云硬盘规格和大小:超高 IO,100G
  4. 设置云硬盘共享 
  5. 设置云硬盘加密,加密秘钥为默认的 KMS 密钥 
  6. 如果云硬盘已经存在,代码中需要先删除 
  7. 输出此云硬盘的详细信息(状态要求为 available)

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

【题目 4】3.3.4 云主机管理[3 分]

调用 SDK 云主机管理的方法,实现云主机的的增删查改。

使用已建好的运维开发环境,在/root/huawei 目录下创建 ecs_manager.py 脚本,完成 ECS 云主机管理,ecs_manager.py 程序支持命令行参数执行。 

提示说明:华为云主机支持安装所需 Python 库。提交前答案前,需安装所开发程序所依赖的 Python 库。 

  1. 程序支持根据命令行参数,创建 1 个云主机。位置参数“create”,表示创建; 

参数“-i 或--input”,格式为 json 格式文本的云主机的名称、镜像名称 2 个信息。其他参数同上述开发环境云主机一致。 

创建待成功,再返回查询该云主机的信息,结果以 json 格式输出到控制台。

参考执行实例如下:

python3 /root/huawei/ecs_manager.py create --input '{ "name": " chinaskill001", " imagename": "imageid"} '

  1. 支持查询给定具体名称的 ECS 云主机查询。位置参数“get”,表示查询 ECS;

参数“-n 或 --name”支持指定名称 ECS 查询,类型为 string。

参数“-o 或 --output”支持查询该 ECS 信息输出到文件,格式为 json 格式。

  1. 程序支持查询目前区域账号下所有的 ECS 云主机。位置参数“getall”,表示查询所有 ECS 云主机; 

参数“-o 或--output”支持输出到文件,格式为 yaml 格式。

  1. 支持删除指定名称的云主机。 

位置参数“delete”,表示删除一个 ECS 云主机;返回 response,通过控制台输出。

参数“-n 或--name”支持指定名称查询,类型为 string。

完成后提交“chinaskill 开发运行环境云主机”的用户名、密码和 IP 地址到答题框。

【题目 5】3.3.5 基于 FastAPI 框架封装华为云 VPC 服务 Restful APIs 接口[2 分]

使用已建好的运维开发环境,可用区为华北-北京 4,在/root/huaweicloud_fastapi 目录下创建 main.py 文件,基于 FastAPI 框架,完成虚拟私有云 VPC 管理服务的封装,端口为 7045。 

提示说明:华为云主机支持安装所需 Python 库。提交前答案前,需安装所开发程序所依赖的 Python 库。 

  1. 封装创建接口,路径为/cloud_vpc/create_vpc,参数格式为{"name": "","cidr": ""},name 为VPC 名称,cidr 为虚拟私有云下可用子网的范围;方法为 POST, 返回数据类型为 JSON 类型。
  2. 封装单个 VPC 查询接口,路径为/cloud_vpc/vpc/{vpc_name},路径中

{vpc_name}为待查询 VPC;方法为 GET,返回数据类型为 JSON 类型。

  1. 封装服务查询接口,要求可以查询到所有 VPC,路径为/cloud_vpc/vpc;方法为GET,返回的数据类型 JSON 类型的列表类型。 
  2. 封装更新 VPN 名称接口,路径为/cloud_vpc/update_vpc,参数格式为

{"new_name": "","old_name": ""},new_name 为 VPC 新名称,old_name 为待删除的 VPN

名称;方法为PUT,返回 JSON 类型的更新后数据。

  1. 封装删除接口,接口名为/cloud_vpc/delete_vpc,参数格式为{"vpc_name": ""},vpc_name 为 VPC 新名称;方法为DELETE,返回 JSON 类型的删除后的数据。 

功能编写完成后,手工启动 Restful 服务,再提交检测。 

【任务 4】边缘计算系统运维[10 分]

【适用平台】私有云

【题目 1】4.1.1 KubeEdge cloudcore 云端模块部署与配置[3 分]

在本地 http 文件服务器中下载 k8s-allinone-v1.22.1.qcow2 镜像(该镜像启动后内置一个完整的kubernetes 服务)并完成下列操作: 

  1. 上传该镜像至公有云 OBS 存储桶中; 
  2. 使用该镜像文件创建为私有镜像; 
  3. 使用该镜像创建一台云主机,该云主机作为 KubeEdge 的云端节点。云主机申请完成之后,在提供的 OBS 访问域名中,下载软件包

kubernetes_kubeedge.tar 到云端节点并部署 KubeEdge1.11 边缘计算系统,在云端节点部署 KubeEdge cloudcore 云端模块、启动 cloudcore 服务并配置该服务可被systemd 管理。完成后提交云端节点的 IP 地址、用户名和密码到答题框。 

【题目 2】4.1.2 KubeEdge edgecore 边端模块部署与配置[4 分]

在本地 OpenStack 环境中申请两台CentOS7.9 虚拟机做为 KubeEdge 的边缘端节点。主机名分别为 edge-node1、edge-node2。在 http 文件服务器中下载kubernetes_kubeedge.tar 软件包,使用该软件包在该虚拟机部署 KubeEdge edgecore 边端模块,并启动 edgecore 服务。加入成功之后,启用 metrics 监控服务。 

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

【题目 3】4.1.3 KubeEdge 应用部署-部署计数器应用[3 分]

利用搭建好的边缘计算平台,在云端节点上使用提供的相关镜像(k8simage 目录下) 和 yaml 文件(kubeedge-counter-demo 目录下),自行编写 DeviceModel、Device 资源,

要求如下:

DeviceModel 名字为 counter-model;

属性为 status,类型为字符串,存储模式为读写模式,默认值为空; Device 名字为 counter;

引用 counter-model 设备模型;

将此设备通过节点选择器与 edge-node1 节点进行绑定;

在 status 字段中的 twins 字段定义属性名称为 status、理想值为“OFF”、真实值为“0”;

编写完成后,按照顺序分别部署好 DeviceModel、Device 以及云端计数应用控制器和计数应用。部署完成后,将计数器打开。 

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

【任务 5】边缘计算云应用开发[5.0 分]

【适用平台】私有云

【题目 1】5.1.1 开发环境构建与用户注册服务开发[1 分]

使用华为云已搭建好的 KubeEdge 环境,安装 Python 3.7.3 运行环境,并安装开发所需的依赖包,使用提供的 mongoRepo.tar.gz 软件包在边端安装 MongoDB 数据库,设置数据库为任何机器都可以连接登录。 

开发环境搭建好之后,将提供的代码包导入到 Linux 服务器 root 目录下,并打开fastapi_user 工程目录进行用户管理服务开发,服务端口为 8046,运行服务后,注册名为chinaskill 的用户,密码为 Abc@1234,手动启动代码运行服务。代码编写完成后提交该云主机的用户名、密码和 IP 地址到答题框。 

【题目 2】5.1.2 AI 检测服务与网关服务开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_ai_pcb 工程目录,基于 YOLO5 与已训练的模型实现 PCB 缺陷 AI 识别服务, fastapi 框架来定义 PCB 图片的缺陷检测接口,调用接口时,需要指定 device 实例名称和上传缺陷图片,当识别到缺陷图片后,返回图片 base64 编码后的数据、模型的名字、当前的上传时间、以及识别坐标的位置信息和实例名称。

然后打开 fastapi_gateway 工程目录,基于 fastapi-gateway 开源框架实现网关服

务,AI PCB 微服务端口为 8055,微服务网关端口 30850,通过这个网关来访问用户管理服

务和 AI PCB 识别服务,手动启动 AI PCB 和网关服务。

AI 接口接口路径为:/detect/pcb_detect,参数传递到路径接口上,参数名为

device_id。

识别图片在工程目录中的 runs 目录里。

代码编写完成后提交该云主机的用户名、密码和 IP 地址到答题框。 

【题目 3】5.1.3 设备与设备模型管理服务开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_cloud_edge 工程目录,基于 FastAPI 框架和 Kubernetes SDK 实现了一组 API,主要针对 KubeEdge 拓展的CRD 的资源进行访问封装,微服务端口为 8045。 

1、完善设备模型管理服务,要求如下:

  1. 定义获取 DeviceModel 资源接口,接口名为/devicemodel/devicemodel,方法为

GET;

  1. 定义获取单个 DeviceModel 接口,接口名为/devicemodel/{name},方法为

GET;

  1. 定义创建 DeviceModel 接口,接口名为/devicemodel/devicemodel,方法为POST, 参数格式为{"name": "", "properties": ""},name 为 DeviceModel 的名字, properties 为 DeviceModel 更新的属性内容,类型为列表类型; 
  2. 定义设备模型同步接口,接口名为/devicemodel/devicemodel,方法为 PUT,参数格式为{"name": "", "properties": ""},name 为 DeviceModel 的名字,properties 为DeviceModel 创建的属性内容,类型为列表类型;
  3. 定义删除 DeviceModel 资源接口,接口名为/device/devicemodel,可以删除指定 DeviceModel,参数格式为{"name": ""},name 为 DeviceModel 的名字,方法为DELETE。 

2、完善设备管理服务,要求如下:

  1. 定义获取所有的 device 资源,接口名为/device/device,方法为 GET;
  2. 定义获取单个 device,接口名为/device/{name},方法为 GET;
  3. 定义设备同步接口,接口名为/device/device,参数格式为{"name": "","desired": {}},name 为更新设备的名字,desired 为更新设备的内容,内容格式为

JSON 格式,方法为 PUT;

  1. 定义创建 device 接口,接口名为/device/device,参数格式为

{"name":"","dmName": "","nodeName": ""},name 为 device 的名字,dmName 为

DeviceModel 的名字,nodeName 为边缘节点名字,方法为 POST;

  1. 定义删除 device 接口,可以删除指定的 device 资源,接口名为

/device/device,参数格式为{"name": ""},名字为要删除的 device 名字,方法为

DELETE。

手动启动设备与设备模型管理服务。

代码编写完成后提交该云主机的用户名、密码和 IP 地址到答题框。

【题目 4】5.1.4 云边数据协同开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_cloud_edge 工程目录,在前面几道题的基础之上,对 pcb_data_manager.py 文件完善代码,要求如下: 

将数据模型上传到数据库中,并返回该模型在数据库中的 ID,若有相同模型则不上传;

定义接收边缘消息程序;

云端接收边端 MQTT 主题里所发送的数据,将数据进行解析,存储到 MongoDB 数据库中,并对云端pcb-device 设备信息进行更新。 

设备信息字段为 pcb_model(模型名字)、pcb_status(设备状态)、pcb_result

(模型在数据中的 ID)、upload_time(识别图片的时间)

手动启动该服务。

【题目 5】5.1.5 云端节点管理开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_cloud 工程目录,基于 FastAPI 框架和 Kubernetes SDK 实现了一组 API,来进行管理云端节点和边缘节点信息的后端服务,微服务端口为 8047,编码要求功能如下: 

定义获取云端节点信息的路由,接口为/cloud_edge_service/node/cloudnode,请求为 GET,返回的数据类型为列表类型。

定义获取单个节点信息的路由,接口为/cloud_edge_service/node/{node_name},请

求为 GET,返回数据类型为字典类型。

定义获取边缘节是是撒大声地

2023 年全国职业院校技能大赛(高职组)

模块一 私有云

  

[任务 1] 私有云服务搭建[5 分]

【适用平台】私有云

【题目 1】1.1.1 基础环境配置[0.2 分]

1.控制节点主机名为 controller,设置计算节点主机名compute; 2.hosts 文件将 IP 地址映射为主机名。

使用提供的用户名密码,登录提供的 OpenStack 私有云平台,在当前租户下,使用CentOS7.9 镜像,创建两台云主机,云主机类型使用 4vCPU/12G/100G_50G 类型。当前租户下默认存在一张网卡,自行创建第二张网卡并连接至 controller 和 compute 节点(第二张网卡的网段为 10.10.X.0/24,X 为工位号,不需要创建路由)。自行检查安全组策略,以确保网络正常通信与 ssh 连接,然后按以下要求配置服务器: 

设置控制节点主机名为 controller,设置计算节点主机名为 compute; 

Controller:compute

hostnamectl set-hostname controller;bash

hostnamectl set-hostname compute;bash

Controller;compute

环境

  

Centos7.9两块网卡,两块硬盘

  

修改 hosts 文件将 IP 地址映射为主机名; 

Controller;compute

cat >> /etc/hosts << EOF

1.1.1.10 controller

1.1.1.20 compute

EOF

  

【题目 2】1.1.2 Yum 源配置[0.2 分]

使用提供的 http 服务地址,在 http 服务下,存在 centos7.9 和 iaas 的网络 yum 源, 使用该 http 源作为安装 iaas 平台的网络源。分别设置 controller 节点和 compute 节点yum 源文件 http.repo。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

Controller:

上传镜像

  

开始配置yum服务器

mkdir /opt/{centos,openstack}

mount -o loop CentOS-7-x86_64-DVD-2009_2.iso /mnt/

cp -rvf /mnt/* /opt/centos/

umount /mnt/

mount -o loop chinaskills_cloud_iaas_v2.0.3_3.iso /mnt/

cp -rvf /mnt/* /opt/openstack/

umount /mnt/

  

  

下载http服务,开启服务

systemctl start httpd

systemctl enable httpd

  

镜像转移转移到网页根目录

  

关闭防火墙沙河

systemctl stop firewalld

setenforce 0

  

  

配置yum源

  

[centos]

name=centos

baseurl=file:/var/www/html/centos

gpgcheck=0

enabled=1

[openstack]

name=openstack

baseurl=file:/var/www/html/openstack/iaas-repo

gpgcheck=0

enabled=1

  

Compute

配置yum仓库

[centos]

name=centos

baseurl=http://1.1.1.10/centos

gpgcheck=0

enabled=1

[openstack]

name=openstack

baseurl=http://1.1.1.10/openstack/iaas-repo

gpgcheck=0

enabled=1

  

【题目 3】1.1.3 配置无秘钥 ssh[0.2 分]

配置 controller 节点可以无秘钥访问 compute 节点,配置完成后,尝试 ssh 连接compute 节点的 hostname 进行测试。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。 

controller/compute:

ssh-keygen

ssh-copy-id controller

ssh-copy-id compute

  

  

【题目 4】1.1.4 基础安装[0.2 分]

在控制节点和计算节点上分别安装 openstack-iaas 软件包。

在控制节点和计算节点上分别安装 openstack-iaas 软件包,根据表 2 配置两个节点脚本文件中的基本变量(配置脚本文件为/etc/openstack/openrc.sh)。 

表 2 云平台配置信息

服务名称

变量

参数/密码

Mysql

root

000000

Keystone

000000

Glance

000000

Nova

000000

Neutron

000000

Heat

000000

Zun

000000

Keystone

DOMAIN_NAME

demo

Admin

000000

Rabbit

000000

Glance

000000

Nova

000000

Neutron

000000

Heat

000000

Zun

000000

Neutron

Metadata

000000

External Network

eth1(以实际为准)

controller/compute:

yum -y install openstack-iaas

Compute:

Fdisk /dev/sdb

给sdb进行分区,后续跑脚本需要

分出两个20一个5还剩5G后续做题在进行分区

  

Controller:

编辑配置文件

vim /etc/openstack/openrc.sh

HOST_IP=1.1.1.10

HOST_PASS=root

HOST_NAME=controller

HOST_IP_NODE=1.1.1.20

HOST_PASS_NODE=root

HOST_NAME_NODE=compute

network_segment_IP=1.1.1.0/24

RABBIT_USER=openstack

RABBIT_PASS=000000

DB_PASS=000000

DOMAIN_NAME=demo

ADMIN_PASS=000000

DEMO_PASS=000000

KEYSTONE_DBPASS=000000

GLANCE_DBPASS=000000

GLANCE_PASS=000000

PLACEMENT_DBPASS=000000

PLACEMENT_PASS=000000

NOVA_DBPASS=000000

NOVA_PASS=000000

NEUTRON_DBPASS=000000

NEUTRON_PASS=000000

METADATA_SECRET=000000

INTERFACE_NAME=ens34

Physical_NAME=provider

minvlan=1

maxvlan=1000

CINDER_DBPASS=000000

CINDER_PASS=000000

BLOCK_DISK=sdb1

SWIFT_PASS=000000

OBJECT_DISK=sdb2

STORAGE_LOCAL_NET_IP=1.1.1.20

TROVE_DBPASS=000000

TROVE_PASS=000000

HEAT_DBPASS=000000

HEAT_PASS=000000

CEILOMETER_DBPASS=000000

CEILOMETER_PASS=000000

AODH_DBPASS=000000

AODH_PASS=000000

ZUN_DBPASS=000000

ZUN_PASS=000000

KURYR_PASS=000000

OCTAVIA_DBPASS=000000

OCTAVIA_PASS=000000

MANILA_DBPASS=000000

MANILA_PASS=000000

SHARE_DISK=sdb3

CLOUDKITTY_DBPASS=000000

CLOUDKITTY_PASS=000000

BARBICAN_DBPASS=000000

BARBICAN_PASS=000000

配置完成传送给compute

  

controller/compute:

先给双方拍个快照

执行初始化文件

iaas-pre-host.sh#初始化 跑完会提示建议重启

reboot  

【题目 5】1.1.5 数据库安装与调优[0.5 分]

在 controller 节点上使用 iaas-install-mysql.sh 脚本安装 Mariadb、Memcached、RabbitMQ 等服务。安装服务完毕后,修改/etc/my.cnf 文件,完成下列要求:

1.设置数据库支持大小写;

2.设置数据库缓存 innodb 表的索引,数据,插入数据时的缓冲为 4G;

3.设置数据库的 log buffer 为 64MB;

4.设置数据库的 redo log 大小为 256MB;

5.设置数据库的 redo log 文件组为 2。

6.修改Memcached 的相关配置,将内存占用大小设置为 512MB,调整最大连接数参数为2048;

调整 Memcached 的数据摘要算法(hash)为 md5;

Controller;

iaas-install-mysql.sh

mysql -uroot -p000000

show variables like 'innodb_log%';  #可以快速定义参数

vim /etc/my.cnf

lower_case_table_names =1  #数据库支持大小写

innodb_buffer_pool_size = 4G  #数据库缓存

innodb_log_buffer_size = 64MB  #数据库的log buffer即redo日志缓冲

innodb_log_file_size = 256MB  #设置数据库的redo log即redo日志大小

innodb_log_files_in_group = 2  #数据库的redo log文件组即redo日志的个数配置

systemctl restart mariadb

  

vim /etc/sysconfig/memcached

MAXCONN="2048"    #修改最大连接参数2048

CACHESIZE="512"   #修改内存占用大小为512

hash_algorithm=md5 #添加一行调整Memcached算法为md5

systemctl restart memcached

  

【题目 6】1.1.6 Keystone 服务安装与使用[0.5 分]

在控制节点上安装 Keystone 服务并创建用户。

在 controller 节点上使用 iaas-install-keystone.sh 脚本安装 Keystone 服务。

然后创建 OpenStack 域 210Demo,其中包含 Engineering 与 Production 项目,在域

210Demo 中创建组 Devops,其中需包含以下用户:  

1.Robert 用户是 Engineering 项目的用户(member)与管理员(admin),email 地址为:Robert@lab.example.com。  

2.George 用 户 是 Engineering 项 目 的 用 户 ( member ), email 地址为:

George@lab.example.com。

3.William 用户是 Production 项目的用户(member)与管理员(admin),email 地址为:William@lab.example.com。

4.John 用户是 Production 项 目 的 用 户 ( member ), email 地 址 为 :

John@lab.example.com。

controller

iaas-install-keystone.sh

source /etc/keystone/admin-openrc.sh   #导入环境变量

openstack domain create 210Demo  #创建域210Demo

openstack group create devops --domain 210Demo  #在210Demo中创建devops用户组

openstack project create Engineering --domain 210Demo  #在210Demo中创键Engineering的项目

openstack project create Production --domain 210Demo    #在210Demo中创建Production的项目

openstack user create --domain 210Demo --project Engineering Robert --email Robert@lab.example.com  #在210Demo域中,将用户Robert分配到Engineering项目,并设置其电子邮件地址。

openstack user create --domain 210Demo --project Engineering George --email George@lab.example.com  #在210Demo域中,将用户George分配到Engineering项目,并设置其电子邮件地址。

openstack user create --domain 210Demo --project Production William --email William@lab.example.com #在210Demo域中,将用户William分配到Production项目,并设置其电子邮件地址。

openstack user create --domain 210Demo --project Production John --email John@lab.example.com    #在210Demo域中,将用户John分配到Production项目,并设置其电子邮件地址。

openstack role add --user Robert --project Engineering member #将用户Robert分配到Engineering项目的member角色。

openstack role add --user Robert --project Engineering admin  #将用户Robert分配到Engineering项目的admin角色。

openstack role add --user George --project Engineering member #将用户George分配到Engineering项目的member角色。

openstack role add --user William --project Production member #将用户William分配到Production项目的member角色。

openstack role add --user William --project Production admin  #将用户William分配到Production项目的admin角色。

openstack role add --user John --project Production member    #将用户John分配到Production项目的member角色。

【题目 7】1.1.7 Glance 安装与使用[0.5 分]

在控制节点上安装 Glance 服务。上传镜像至平台,并设置镜像启动的要求参数。

在 controller 节点上使用 iaas-install-glance.sh 脚本安装 glance 服务。然后使用提供的 coreos_production_pxe.vmlinuz 镜像(该镜像为 Ironic Deploy 镜像,是一个AWS 内核格式的镜像,在 OpenStack Ironic 裸金属服务时需要用到)上传到 OpenStack 平台中,命名为 deploy-vmlinuz。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

controller:

iaas-install-glance.sh

上传镜像

  

openstack image create deploy-vmlinuz --container-format aki < coreos_production_pxe.vmlinuz

  

【题目 8】1.1.8 Nova 安装与优化[0.5 分]

在控制节点和计算节点上分别安装 Nova 服务。安装完成后,完成 Nova 相关配置。 在 controller 节点和 compute 节点上分别使用 iaas-install-placement.sh 脚本、

iaas-install-nova -controller.sh 脚本、iaas-install-nova-compute.sh 脚本安装Nova 服务。在 OpenStack 中,修改相关配置文件,修改调度器规则采用缓存调度器,缓存主机信息,提升调度时间。配置完成后提交controller 点的用户名、密码和IP 地址到答题框。

controller:

iaas-install-placement.sh

iaas-install-nova-controller.sh

compute:

iaas-install-nova-compute.sh

controller:

vim /etc/nova/nova.conf

  

【题目 9】1.1.9 Neutron 安装[0.2 分]

在控制和计算节点上正确安装 Neutron 服务。

使用提供的脚本 iaas-install-neutron-controller.sh 和 iaas-install-neutron- compute.sh,在 controller 和 compute 节点上安装 neutron 服务。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

Controller

iaas-install-neutron-controller.sh

compute:

iaas-install-neutron-compute.sh

【题目 10】1.1.10 Dashboard 安装[0.5 分]

在控制节点上安装 Dashboard 服务。安装完成后,将 Dashboard 中的 Django 数据修改为存储在文件中。

在 controller 节点上使用 iaas-install-dashboad.sh 脚本安装 Dashboard 服务。

安装完成后,修改相关配置文件,完成下列两个操作:

1.使得登录 Dashboard 平台的时候不需要输入域名; 2.将 Dashboard 中的 Django 数据修改为存储在文件中。

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

Controller

iaas-install-dashboard.sh

vim /etc/openstack-dashboard/local_settings

  

  

【题目 11】1.1.11 Swift 安装[0.5 分]

在控制节点和计算节点上分别安装 Swift 服务。安装完成后,将 cirros 镜像进行分片存储。

在控制节点和计算节点上分别使用 iaas-install-swift-controller.sh 和 iaas- install-swift-compute.sh 脚本安装 Swift 服务。安装完成后,使用命令创建一个名叫examcontainer 的容器,将 cirros-0.3.4-x86_64-disk.img 镜像上传到 examcontainer 容器中,并设置分段存放,每一段大小为 10M。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

下面黄色字体如果你的yum没掉,就不用做了

在跑的脚本的时候我发现的compute的yum突然掉了,不知道为何,可能是做10题做完后掉, 然后我做了ftp服务配置了yum仓库

Controller

yum -y install vsftpd

vim /etc/vsftpd/vsftpd.conf

anon_root=/var/www/html #给http目录设置为共享

systemctl restart vsftpd

systemctl enable vsftpd

Compute #换成ftp

  

yum makecache

Controller

iaas-install-swift-controller.sh

compute:

iaas-install-swift-compute.sh

Controller

swift post examcontainer #通过命令行创建容器

openstack container list

上传镜像
  

swift upload -S 10M examcontainer cirros-0.3.4-x86_64-disk.img  #上传到容器中

  

【题目 12】1.1.12 Cinder 创建硬盘[0.5 分]

在控制节点和计算节点分别安装 Cinder 服务,请在计算节点,对块存储进行扩容操作。在控制节点和计算节点分别使用 iaas-install-cinder-controller.sh 、 iaas-

install-cinder-compute.sh 脚本安装 Cinder 服务,请在计算节点,对块存储进行扩容操作,即在计算节点再分出一个 5G 的分区,加入到 cinder 块存储的后端存储中去。完成后提交计算节点的用户名、密码和 IP 地址到答题框。

controller:

iaas-install-cinder-controller.sh

compute:

Fdisk  #给sdb在分5G

iaas-install-cinder-compute.sh

  

pvcreate /dev/sdb4

Vgs

vgextend cinder-volumes /dev/sdb4

vgs

  

【题目 13】1.1.13 配置主机禁 ping [0.5 分]

修改 controller 节点的相关配置文件,配置 controller 节点禁止其他节点可以ping它。

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

controller

vim /etc/sysctl.conf

添加一行

net.ipv4.icmp_echo_ignore_all = 1

执行

sysctl -p

  

  

任务 2 私有云服务运维[15 分]

【适用平台】私有云

【题目 1】1.2.1 Heat 编排-创建用户[1 分]

编写 Heat 模板 create_user.yaml,创建名为 heat-user 的用户。

使用自己搭建的OpenStack 私有云平台,使用heat 编写摸板(heat_template_version: 2016-04-08)创建名为”chinaskills”的 domain,在此 domain 下创建名为 beijing_group 的租户,在此租户下创建名为 cloud 的用户,将此文件命名及保存在

/root/user_create.yml,完成后提交 controller 点的用户名、密码和 IP 地址到答题框。

(竞赛系统会执行yaml 文件,请确保执行的环境)

Controller

iaas-install-heat.sh

heat resource-type-template OS::Keystone::Domain > /root/user_create.yml

heat resource-type-template OS::Keystone::Project >> /root/user_create.yml

heat resource-type-template OS::Keystone::User >> /root/user_create.yml

  

【题目 2】1.2.2 KVM 优化[1 分]

在 OpenStack 平台上修改相关配置文件,启用-device virtio-net-pci in kvm。在自行搭建的 OpenStack 私有云平台或赛项提供的 all-in-one 平台上,修改相关配置

文件,启用-device virtio-net-pci in kvm,配置完成后提交控制节点的用户名、密码和

IP 地址到答题框。

controller

vim /etc/nova/nova.conf

  

【题目 3】1.2.3 NFS 对接 Glance 后端存储[1 分]

使用 OpenStack 私有云平台,创建一台云主机,安装 NFS 服务,然后对接 Glance 后端存储。 

使用赛项提供的 OpenStack 私有云平台,创建一台云主机(镜像使用CentOS7.9, flavor 使用带临时磁盘 50G 的),配置该主机为 nfs 的 server 端,将该云主机中的 50G 磁盘通过/mnt/test 目录进行共享(目录不存在可自行创建)。然后配置 controller 节点为 nfs 的 client 端,要求将/mnt/test 目录作为 glance 后端存储的挂载目录。配置完成后提交 controller 控制节点的用户名、密码和 IP 地址到答题框。 

Node :1.1.1.30

yum install nfs-utils rpcbind -y

systemctl start rpcbind

systemctl start nfs

mkdir /mnt/test

cat /etc/exports

/mnt/test *(rw,no_root_squash,sync)

exportfs -r

systemctl restart nfs

Systemctl stop firewalld

Controller

mount -t nfs 1.1.1.30:/mnt/test /var/lib/glance/images/

chown glance:glance -R /var/lib/glance/images/

  

【题目 4】1.2.4 Redis 主从[1 分]

使用赛项提供的OpenStack 私有云平台,创建两台云主机,配置为redis 的主从架构。使用赛项提供的 OpenStack 私有云平台,申请两台CentOS7.9 系统的云主机,使用提

供的 http 源,在两个节点安装 redis 服务并启动,配置 redis 的访问需要密码,密码设置为 123456。然后将这两个 redis 节点配置为 redis 的主从架构。配置完成后提交 redis 主节点的用户名、密码和 IP 地址到答题框。

  

  

验证

  

  

【题目 5】1.2.5 Linux 系统调优-脏数据回写[1 分]

修改系统配置文件,要求将回写磁盘的时间临时调整为 60 秒。

Linux 系统内存中会存在脏数据,一般系统默认脏数据 30 秒后会回写磁盘,修改系统配置文件,要求将回写磁盘的时间临时调整为 60 秒。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。 

Controller

vim /etc/sysctl.conf

添加一行执行

vm.dirty_expire_centisecs = 6000

sysctl -p

  

【题目 6】1.2.6 Glance 调优[1 分]

在 OpenStack 平台中,修改相关配置文件,将子进程数量相应的配置修改成 2。

在 OpenStack 平台中,glance-api 处理请求的子进程数量默认是 0,只有一个主进程,请修改相关配置文件,将子进程数量相应的配置修改成 2,这样的话有一个主进程加 2 个子进程来并发处理请求。完成后提交控制节点的用户名、密码和 IP 地址到答题框。

Controller

vim /etc/glance/glance-api.conf

  

【题目 7】1.2.7 Ceph 部署[1 分]

使用提供的 ceph.tar.gz 软件包,安装 ceph 服务并完成初始化操作。

使用提供的 ceph-14.2.22.tar.gz 软件包,在 OpenStack 平台上创建三台 CentOS7.9 系统的云主机,使用这三个节点安装 ceph 服务并完成初始化操作,第一个节点为 mon/osd 节点,第二、三个节点为 osd 节点,部署完 ceph 后,创建 vms、images、volumes 三个pool。完成后提交第一个节点的用户名、密码和 IP 地址到答题框。

没做出来

【题目 8】1.2.8 Glance 对接 Ceph 存储[1 分]

修改 OpenStack 平台中 Glance 服务的配置文件,将 Glance 后端存储改为 Ceph 存储。在自己搭建的 OpenStack 平台中修改 glance 服务的相关配置文件,将glance 后端存

储改为 ceph 存储。也就是所以的镜像会上传至 ceph 的 images pool 中。通过命令使用cirros-0.3.4-x86_64-disk.img 镜像文件上传至云平台中,镜像命名为 cirros。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。

Controller

vim /etc/glance/glance-api.conf

  

default_store = rbd  #参数改成RDB

rbd_store_pool = images  #是ceph存储池的名称

rbd_store_user = glance   #是ceph的用户名

rbd_store_ceph_conf = /etc/ceph/ceph.conf  #是ceph配置文件的路径

systemctl restart openstack-glance-api  #重启服务

上传镜像到云平台

openstack image create --min-disk 10 --min-ram 1024 --file cirros-0.3.4-x86_64-disk.img cirros  #命名为cirros,启动硬盘为 10G,最小启动内存为 1G。

  

【题目 9】1.2.9 Cinder 对接 Ceph 存储[1 分]

修改 OpenStack 平台中 cinder 服务的配置文件,将 cinder 后端存储改为 Ceph 存储。修改 OpenStack 平台中 cinder 服务的相关配置文件,将 cinder 后端存储改为 ceph 存

储。使创建的 cinder 块存储卷在 ceph 的 volumes pool 中。配置完成后,在 OpenStack 平台中使用创建卷 cinder-volume1,大小为 1G。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。

controller 

开头加入

vim /etc/cinder/cinder.conf

5 enabled_backends = ceph

6 default_volume_type = ceph

  

文件底部加入

  

[ceph]

volume_driver = cinder.volume.drivers.rbd.RBDDriver

rbd_pool = volumes

rbd_ceph_conf = /etc/ceph/ceph.conf

rbd_flatten_volume_from_snapshot = false

rbd_max_clone_depth = 5

rbd_store_chunk_size = 4

rados_connect_timeout = -1

rbd_user = cinder

rbd_secret_uuid = your-secret-uuid

重启服务

systemctl restart openstack-cinder-volume.service

创建卷

openstack volume create --size 1 cinder-volume1

  

【题目 10】1.2.10 Nova 对接 Ceph 存储[1 分]

修改 OpenStack 平台中 Nova 服务的配置文件,将 Nova 后端存储改为 Ceph 存储。修改 OpenStack 平台中 nova 服务的相关配置文件,将 nova 后端存储改为 ceph 存储。

使 nova 所创建的虚拟机都存储在 ceph 的 vms pool 中。配置完成后在 OpenStack 平台中使用命令创建云主机 server1。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。

controller

vim /etc/nova/nova.conf

  

images_type = rbd

images_rbd_pool = vms

images_rbd_ceph_conf = /etc/ceph/ceph.conf

rbd_user = ceph-user

rbd_secret_uuid = secret-uuid

创建云主机server1

先创建网络

要确定物理网络名称和vlanid的范围

vim /etc/neutron/plugins/ml2/ml2_conf.ini

  

创建网络

openstack network create --provider-network-type vlan --provider-physical-network provider --provider-segment 800 extnet

  

创建子网

openstack subnet create --network extnet --subnet-range 1.1.1.0/24 --allocation-pool start=1.1.1.30,end=1.1.1.50 --gateway 1.1.1.2 --dns-nameserver 8.8.8.8 extsubnet

  

准备好镜像规格和网络

  

创建云主机server1

openstack server create --image 7287380e-ebd0-4886-8273-2e38e12fe323 --flavor 2 --network 3dbb2b3a-0263-417e-9056-c0034b4a472b server1

  

  

【题目 11】1.2.11 私有云平台优化:系统网络优化[1 分]

使用自行创建的 OpenStack 云计算平台,配置控制节点的网络缓存,使得每个 UDP 连接(发送、接受)保证能有最小 358 KiB 最大 460 KiB 的 buffer,重启后仍然生效。配置完成后提交 controller 控制节点的用户名、密码和 IP 地址到答题框。

Controller

vim /etc/sysctl.conf

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.core.rmem_default = 358400

net.core.rmem_max = 460800

net.core.wmem_default = 358400

net.core.wmem_max = 460800

  

【题目 12】1.2.12 私有云平台排错:Neutron 网络组件排错[2 分]

使用赛项提供的 chinaskill-error01 镜像创建一台云主机(云主机的登录用户名为root,密码为 Abc@1234),该云主机中存在错误的网络服务,错误现象为 dashboard 不能查看网络相关的页面,请修复 neutron 服务。修复完成后提交该云主机的用户名、密码和IP 地址到答题框。

无环境

【题目 13】1.2.13 私有云平台排错:Cinder 卷组件报错[2 分]

使用赛项提供的 chinaskill-error01 镜像创建一台云主机(云主机的登录用户名为root,密码为 Abc@1234),该云主机中存在错误的卷服务,错误现象为无法正常使用cinder 命令,请修复卷服务,然后使用命令创建名为 chinaskill-cinder 的卷,大小为2G。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。

无环境

【任务 3】私有云运维开发[10 分]

【适用平台】私有云

【题目 1】1.3.1 编写 Shell 一键部署脚本[1.0 分] 编写一键部署 nfs 云网盘应用系统。

在 OpenStack 私有云平台,创建一台云主机,使用提供的软件包,在 root 目录下编写一键部署脚本install_owncloud.sh,要求可以一键部署 owncloud 云网盘应用系统。完成后提交节点的 IP 地址、用户名和密码到答题框。 

虚拟机信息

  

搭建OwnCloud网盘。

首先确保Linux能够正常上网(需要上网下载安装包)
1. 添加一个新的软件源

  

wget --no-check-certificate https://download.opensuse.org/repositories/isv:ownCloud:server:10/CentOS_7/isv:ownCloud:server:10.repo​编辑

  1. 安装OwnCloud-files

yum -y install https://labfileapp.oss-cn-hangzhou.aliyuncs.com/owncloud-complete-files-10.5.0-3.1.noarch.rpm

  

  

3. 安装验证Apache服务

  

  

如安装失败,清理缓存,生成缓存

关防火墙沙河

  

网页访问ip

  4. 配置Apache文件

  

在105加入

# owncloud config

Alias /owncloud "/var/www/html/owncloud/"

<Directory /var/www/html/owncloud/>

    Options +FollowSymlinks

    AllowOverride All

    <IfModule mod_dav.c>

        Dav off

    </IfModule>

    SetEnv HOME /var/www/html/owncloud

    SetEnv HTTP_HOME /var/www/html/owncloud

</Directory>

  

  1. 手动更新rpm源

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/epel-release-latest-7.noarch.rpm

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/webtatic-release.rpm

  

  1. 安装PHP 7.2版本   #安装较慢耐心等待

  

yum -y install php72w-cli php72w-common php72w-devel php72w-mysql php72w-xml php72w-odbc php72w-gd php72w-intl php72w-mbstring

  

  1. 将PHP配置到Apache中

编辑文件最后一行加入如下

然后重启httpd

  

8 .安装mysql

拖包,编写脚本,给权限,

  

执行脚本

  

更改数据库密码为root

  

再次进入mysql创建一个数据库,保存来自 OwnCloud 的数据。使用下面的命令创建数据库和数据库用户

create database owncloud;

GRANT ALL ON owncloud.* TO ocuser@localhost IDENTIFIED BY 'owncloud';

flush privileges;

  

  

在浏览器输入http://ip地址/owncloud 并访问,进入下面页面。

创建管理员账户,配置数据库

  

点击安装完成

登录即可

  

  

搭建完成

shell脚本搭建ownclould

#!/bin/bash

setenforce 0

systemctl stop firewalld

cd /etc/yum.repos.d/

yum -y install wget

wget --no-check-certificate https://download.opensuse.org/repositories/isv:ownCloud:server:10/CentOS_7/isv:ownCloud:server:10.repo

yum -y install https://labfileapp.oss-cn-hangzhou.aliyuncs.com/owncloud-complete-files-10.5.0-3.1.noarch.rpm

yum -y install httpd

systemctl start httpd

cat >> /etc/httpd/conf/httpd.conf << EOF

# owncloud config

Alias /owncloud "/var/www/html/owncloud/"

<Directory /var/www/html/owncloud/>

Options +FollowSymlinks

AllowOverride All

<IfModule mod_dav.c>

Dav off

</IfModule>

SetEnv HOME /var/www/html/owncloud

SetEnv HTTP_HOME /var/www/html/owncloud

</Directory>

EOF

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/epel-release-latest-7.noarch.rpm

rpm -Uvh https://labfileapp.oss-cn-hangzhou.aliyuncs.com/webtatic-release.rpm

yum -y install php72w

yum -y install php72w-cli php72w-common php72w-devel php72w-mysql php72w-xml php72w-odbc php72w-gd php72w-intl php72w-mbstring

echo "PHPIniDir /etc/php.ini" >> /etc/httpd/conf/httpd.conf

systemctl restart httpd

给权限执,访问网站即可http://1.1.1.11/owncloud

备注:此脚本搭建没有搭建mysql,访问网站别选mysql,选择sqlite即可

也可自行加入数据库的一些步骤

【题目 2】1.3.2 Ansible 服务部署:部署 ELK 集群服务[2 分]

编写 Playbook,部署的 ELK。

使用赛项提供的 OpenStack 私有云平台,创建三台 CentOS7.9 系统的云主机分别命名为 elk-1、elk-2 和 elk-3,Ansible 主机可以使用上一题的环境。要求 Ansible 节点编写剧本,执行 Ansible 剧本可以在这三个节点部署 ELK 集群服务(在/root 目录下创建install_elk 目录作为 ansible 工作目录,部署的入口文件命名为 install_elk.yaml)。

具体要求为三个节点均安装 Elasticserach 服务并配置为 Elasticserach 集群;kibana 安

装在第一个节点;Logstash 安装在第二个节点。(需要用到的软件包在 HTTP 服务下)完成后提交 ansible 节点的用户名、密码和 IP 地址到答题框。(考试系统会连接到 ansible 节点,执行 ansible 脚本,准备好环境,以便考试系统访问)

Ansible 1.1.1.14

1/1.1.1.11

2/1.1.1.12

3/1.1.1.13

#####Ansibie#####

下载yum -y install ansible工具

需要先下载epel仓库才能下载

yum install epel-release

yum -y install ansible

#域名解析(all node) #全部节点

cat >> /etc/hosts <<EOF

10.10.10.71 ansible

10.10.10.72 elk-1

10.10.10.73 elk-2

10.10.10.74 elk-3

EOF

#####centos7.9 node#####  #进行改名

hostnamectl set-hostname elk-1

hostnamectl set-hostname elk-2

hostnamectl set-hostname elk-3

####Ansible node##### #创建需要的角色目录

mkdir /root/install_elk

touch /root/install_elk/install_elk.yaml

mkdir -p /root/install_elk/roles/{ela,kib,log}/{files,handlers,tasks,templates,vars}

#在ansible节点与三台节点建立免密钥通信  #拷贝公钥给elk1-3

ssh-keygen

ssh-copy-id elk-1

ssh-copy-id elk-2

ssh-copy-id elk-3

#ansible主机清单  编辑配置

cat >>  /etc/ansible/hosts <<EOF

[ela]

elk-1 node_name=elk-1

elk-2 node_name=elk-2

elk-3 node_name=elk-3

[kib]

elk-1

[log]

elk-2

EOF

下面开始写剧本

主入口文件

/root/install_elk/install_elk.yaml

cat > /root/install_elk/install_elk.yaml <<EOF

---

- hosts: ela

  gather_facts: no

  remote_user: root

  roles:

  - ela

- hosts: kib

  gather_facts: no

  remote_user: root

  roles:

  - kib

  

- hosts: log

  gather_facts: no

  remote_user: root

  roles:

  - log

EOF

  

部署ela集群

/root/install_elk/roles/ela/tasks/main.yaml入口文件

cat > /root/install_elk/roles/ela/tasks/main.yaml <<EOF

- name: 安装Java环境

  unarchive:

    src: jdk-8u144-linux-x64.tar.gz  

    dest: /opt

    list_files: yes

- name: 添加Java环境变量

  shell: echo 'export JAVA_HOME=/opt/jdk1.8.0_144' >> /etc/profile && echo 'export PATH=$PATH:/opt/jdk1.8.0_144/bin' >> /etc/profile

- name: 生效环境变量

  shell: source /etc/profile

- name: 创建用户

  user:

    name: ela

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: elasticsearch-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    owner: ela

    group: ela

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/elasticsearch

    state: link

- name: 传输配置文件

  template:

    src: elasticsearch.j2

    dest: /opt/elasticsearch/config/elasticsearch.yml

    owner: ela

    group: ela

    

- name: 传输系统配置文件

  copy:

    src: limits.conf

    dest: /etc/security/limits.conf

- name: 传输系统配置文件

  copy:

    src: sysctl.conf

    dest: /etc/sysctl.conf

- name: 加载 /etc/sysctl.conf文件,使内核参数生效

  shell: sysctl -p

- name: 启动服务

  # 使用ela用户执行此命令

  become: yes

  become_user: ela

  command:

    # argv 是一个列表,存放了需要执行的命令及其参数

    # 一行一个

    argv:

      - nohup

      - /opt/elasticsearch/bin/elasticsearch

      - -d

EOF

  

/root/install_elk/roles/ela/templates/elasticsearch.j2,elasticsearch的主配置文件模板

cat > /root/install_elk/roles/ela/templates/elasticsearch.j2 <<EOF

cluster.name: elk

node.name: {{ node_name }}

node.data: true

network.host: 0.0.0.0

http.port: 9200

discovery.seed_hosts:

   - 1.1.1.11

   - 1.1.1.12

   - 1.1.1.13

cluster.initial_master_nodes: ["elk-1","elk-2","elk-3"]

EOF

  

/root/install_elk/roles/ela/files/limits.conf,系统文件句柄数配置文件

cat > /root/install_elk/roles/ela/files/limits.conf <<EOF

* soft nofile 65535

* hard nofile 65535

* soft nproc  4096

* hard nproc 4096

EOF

  

/root/install_elk/roles/ela/files/sysctl.conf,系统的内核配置文件

cat > /root/install_elk/roles/ela/files/sysctl.conf <<EOF

vm.max_map_count=655360

EOF

  

/root/install_elk/roles/kib/tasks/main.yaml任务入口文件

cat > /root/install_elk/roles/kib/tasks/main.yaml <<EOF

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: kibana-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    owner: ela

    group: ela

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/kibana

    state: link

- name: 创建日志与PID存放目录

  shell: mkdir -p /var/log/kibana /run/kibana

- name: 给如上目录设置权限

  shell: chown -R ela:ela /var/log/kibana /run/kibana

- name: 传输配置文件

  copy:

    src: kibana.yml

    dest: /opt/kibana/config/kibana.yml

    

- name: 传输服务管理文件

  template:

    src: kibana.service.j2

    dest: /etc/systemd/system/kibana.service

- name: 启动服务

  systemd:

    name: kibana

    state: started

    daemon_reload: yes

EOF

  

/root/install_elk/roles/kib/files/kibana.ymlKibana 程序的配置文件

cat > /root/install_elk/roles/kib/files/kibana.yml <<EOF

server.port: 5601

server.host: "0.0.0.0"

elasticsearch.hosts: ["http://1.1.1.11:9200"]

i18n.locale: "zh-CN"

pid.file: /run/kibana/kibana.pid

logging.dest: /var/log/kibana/kibana.log

EOF

  

/root/install_elk/roles/kib/templates/kibana.service.j2 ,Kibana 程序管理模板文件

cat > /root/install_elk/roles/kib/templates/kibana.service.j2 <<EOF

[Unit]

Description=Kibana

Documentation=https://www.elastic.co

After=network-online.target

Wants=network-online.target

[Service]

Type=simple

User=ela

Group=ela

ExecStart=/opt/kibana/bin/kibana

ExecStop=/bin/pkill -F "/run/kibana/kibana.pid"

Restart=on-failure

RestartSec=3

StartLimitBurst=3

StartLimitInterval=60

WorkingDirectory=/opt/kibana

StandardOutput=journal

StandardError=inherit

[Install]

WantedBy=multi-user.target

EOF

  

/root/install_elk/roles/log/tasks/main.yaml任务入口文件

cat > /root/install_elk/roles/log/tasks/main.yaml <<EOF

- name: 创建日志目录

  file:

    path: /var/log/logstash

    state: directory

- name: 服务日志目录权限

  shell: chown -R ela:ela /var/log/logstash

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: logstash-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/logstash

    state: link

- name: 传输配置文件

  template:

    src: logstash.yml

    dest: /opt/logstash/config/logstash.yml

- name: 传输管道配置文件

  copy:

    src: logstash.conf

    dest: /opt/logstash/config/logstash-sample.conf

    

- name: 传输系统服务文件

  template:

    src: logstash.service.j2

    dest: /etc/systemd/system/logstash.service

- name: 启动 logstash

  systemd:

    name: logstash

    state: started

    daemon_reload: yes

- name: restart logstash

  systemd:

    name: logstash

    state: restarted

    daemon_reload: yes

#- name: 启动服务

#  become: yes

#  become_user: ela

#  shell: sh /opt/logstash/bin/logstash -f /opt/logstash/config/logstash-sample.conf

EOF

[root@ansible ~]# cat install_elk/roles/log/tasks/main.yaml

- name: 创建日志目录

  file:

    path: /var/log/logstash

    state: directory

- name: 服务日志目录权限

  shell: chown -R ela:ela /var/log/logstash

- name: 传输本地软件包到远程主机并且解压到指定目录

  unarchive:

    src: logstash-7.17.0-linux-x86_64.tar.gz

    dest: /opt

    list_files: yes

  register: ret

- name: 创建软链接

  file:

    src: /opt/{{ ret.files.0 | regex_replace('/.*') }}

    dest: /opt/logstash

    state: link

- name: 传输配置文件

  template:

    src: logstash.yml

    dest: /opt/logstash/config/logstash.yml

- name: 传输管道配置文件

  copy:

    src: logstash.conf

    dest: /opt/logstash/config/logstash-sample.conf

- name: 传输系统服务文件

  template:

    src: logstash.service.j2

    dest: /etc/systemd/system/logstash.service

- name: 启动 logstash

  systemd:

    name: logstash

    state: started

    daemon_reload: yes

- name: restart logstash

  systemd:

    name: logstash

    state: restarted

    daemon_reload: yes

#- name: 启动服务

#  become: yes

#  become_user: ela

#  shell: sh /opt/logstash/bin/logstash -f /opt/logstash/config/logstash-sample.conf

/root/install_elk/roles/log/templates/logstash.yml,Logstash 程序主配置文件

cat > /root/install_elk/roles/log/templates/logstash.yml <<EOF

http.host: "0.0.0.0"

path.logs: /var/log/logstash/

EOF

  

/root/install_elk/roles/log/files/logstash.conf,Logstash 程序管道配置文件

cat > /root/install_elk/roles/log/files/logstash.conf <<EOF

#将本地的/var/log/yum.log内日志标准输入

input {

  file {

    path => "/var/log/yum.log"

    type => "yum_log"

    start_position => "beginning"

  }

}

#标准输出到elasticsearch中

output {

  elasticsearch {

    hosts =>  ["1.1.1.11:9200","1.1.1.12:9200","1.1.1.13:9200"]

    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"

    #user => "elastic"

    #password => "changeme"

  }

}

EOF

  

/root/install_elk/roles/log/templates/logstash.service.j2,Logstash 程序进程管理模板文件

cat > /root/install_elk/roles/log/templates/logstash.service.j2 <<EOF

Unit]

Description=logstash

[Service]

Type=simple

ExecStart=/opt/logstash/bin/logstash "-f" "/opt/logstash/config/*.conf"

Restart=always

WorkingDirectory=/

LimitNOFILE=65535

TimeoutStopSec=infinity

[Install]

WantedBy=multi-user.target

EOF

  

对应包放在对应目录下

  

项目目录结构

测试ping

检测语法

无报错执行即可

跑完进行验证

Elk1-3关闭防火墙沙河

输入1.1.1.11:5601

输入1.1.1.11:5601/status可以查看状态

验证:

​ 在任务栏中再到管理 -》堆栈管理。

​ 创建一个索引模式,选择所有的索引。

要先创建一个样例

测试安装一个软件来生成数据。

[root@elk-2 ~]#yum -y install httpd

​来到discover中检索数据。

到此配置完成

【题目 3】1.3.3 Ansible 部署 Kafka 服务[2.0 分]

编写 Playbook,部署的 ZooKeeper 和 Kafka。

使用提供的 OpenStack 私有云平台,创建 4 台系统为 centos7.5 的云主机,其中一台作为 Ansible 的母机并命名为 ansible,另外三台云主机命名为 node1、node2、node3,通过附件中的/ansible/ansible.tar.gz 软件包在 ansible 节点安装 Ansible 服务;使用这一台母机,编写 Ansible 脚本(在/root 目录下创建 example 目录作为 Ansible 工作目

录,部署的入口文件命名为 cscc_install.yaml),编写 Ansible 脚本使用 roles 的方式对其他三台云主机进行安装 kafka 集群的操作(zookeeper 和 kafka 的安装压缩包在gpmall-single.tar.gz 压缩包中,将 zookeeper 和 kafka 的压缩包解压到 node 节点的

/opt 目录下进行安装)。完成后提交 ansible 节点的用户名、密码和 IP 地址到答题框。

(考试系统会连接到你的 ansible 节点,去执行 ansible 脚本,请准备好环境,以便考试系统访问)

roles没做出来,没滤清思路,就做了普通的剧本

Ansile/1.1.1.14

Worker01/1.1.1.11

Worker02/1.1.1.12

Worker03/1.1.1.13

[root@ansible ~]# cat wkm.yaml

---

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 关闭防火墙

      systemd:

        name: firewalld

        state: stopped

    - name: 永久关闭防火墙

      systemd:

        name: firewalld

        enabled: no

    - name: 查看防火墙状态

      systemd:

        name: firewalld

    - name: 下载jdk

      yum:

        name: java-1.8.0-openjdk-devel.x86_64

        state: present

    - name: 查看jdk是否生效

      shell: java -version

      shell: jps

    - name: 创建目录

      command: mkdir -p /home/kafka-zookeeper

    - name: 转移包到新创建的目录下

      shell: mv apache-zookeeper-3.8.2-bin.tar.gz /home/kafka-zookeeper/

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/

    - name: 解压apache包

      command: tar -zxvf apache-zookeeper-3.8.2-bin.tar.gz

      args:

        chdir: /home/kafka-zookeeper/

    - name: 创建 data 目录

      file:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data

        state: directory

    - name: 创建 logs 目录

      file:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/logs

        state: directory

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/

    - name: 修改文件名

      command: mv /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo_sample.cfg /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo.cfg

    - name: 清空文件内容

      copy:

        content: ""

        dest: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo.cfg

    - name: 添加配置到 zoo.cfg 文件

      blockinfile:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/conf/zoo.cfg

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          tickTime=2000

          initLimit=10

          syncLimit=5

          dataDir=/home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/

          dataLogDir=/home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/logs/

          clientPort=2181

          server.1=1.1.1.11:2888:3888

          server.2=1.1.1.12:2888:3888

          server.3=1.1.1.13:2888:3888

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data

    - name: 创建 myid 文件

      command: touch /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

- hosts: worker01

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 输入1

      lineinfile:

        path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

        line: '1'

        create: yes

- hosts: worker02

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

     - name: 输入2

       lineinfile:

         path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

         line: '2'

         create: yes

- hosts: worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

     - name: 输入3

       lineinfile:

         path: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/data/myid

         line: '3'

         create: yes

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 启动ZooKeeper

      command: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin//bin/zkServer.sh start

      args:

        chdir: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/

    - name: 查看集群状态

      command: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin//bin/zkServer.sh status

      args:

        chdir: /home/kafka-zookeeper/apache-zookeeper-3.8.2-bin/

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 进入root下

      shell: cd /root/

    - name: 转移包到kafka-zookeeper

      shell: mv kafka_2.13-3.4.1.tgz /home/kafka-zookeeper/

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/

    - name: 解压kafka包

      command: tar -zxvf kafka_2.13-3.4.1.tgz

      args:

        chdir: /home/kafka-zookeeper/

    - name: 创建 data 目录

      file:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/data

        state: directory

    - name: 创建 logs 目录

      file:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/logs

        state: directory

    - name: 进入目录

      shell: cd /home/kafka-zookeeper/kafka_2.13-3.4.1/config/

    - name: 清空文件

      copy:

        content: ""

        dest: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

- hosts: worker01

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 编辑文件

      blockinfile:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          broker.id=1

          listeners=PLAINTEXT://1.1.1.11:9092

          num.network.threads=12

          num.io.threads=24

          socket.send.buffer.bytes=102400

          socket.receive.buffer.bytes=102400

          socket.request.max.bytes=104857600

          log.dirs=/home/kafka-zookeeper/kafka_2.13-3.4.1/logs

          num.partitions=3

          num.recovery.threads.per.data.dir=12

          offsets.topic.replication.factor=3

          transaction.state.log.replication.factor=3

          transaction.state.log.min.isr=3

          log.retention.hours=168

          log.segment.bytes=1073741824

          log.retention.check.interval.ms=300000

          zookeeper.connect=1.1.1.11:2181,1.1.1.12:2181,1.1.1.13:2181

          zookeeper.connection.timeout.ms=18000

          group.initial.rebalance.delay.ms=0

- hosts: worker02

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 编辑文件

      blockinfile:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          broker.id=2

          listeners=PLAINTEXT://1.1.1.11:9092

          log.dirs=/home/kafka-zookeeper/kafka_2.13-3.4.1/logs

          num.partitions=3

          zookeeper.connect=1.1.1.11:2181,1.1.1.12:2181,1.1.1.13:2181

- hosts: worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 编辑文件

      blockinfile:

        path: /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties

        marker: "# {mark} ANSIBLE MANAGED BLOCK"

        block: |

          broker.id=3

          listeners=PLAINTEXT://1.1.1.13:9092

          log.dirs=/home/kafka-zookeeper/kafka_2.13-3.4.1/logs

          num.partitions=3

          zookeeper.connect=1.1.1.11:2181,1.1.1.12:2181,1.1.1.13:2181

- hosts: worker01 worker02 worker03

  remote_user: root

  become: true  # Run commands with elevated privileges

  tasks:

    - name: 启动kafk集群

      shell:

         nohup /home/kafka-zookeeper/kafka_2.13-3.4.1/bin/kafka-server-start.sh /home/kafka-zookeeper/kafka_2.13-3.4.1/config/server.properties >> /home/kafka-zookeeper/kafka_2.13-3.4.1/logs/kafka.log 2>&1 &

- hosts: worker01

  remote_user: root

- name: 执行Kafka命令

  hosts: worker01

  remote_user: root

  tasks:

    - name: 在指定目录下执行命令

      shell: |

        cd /home/kafka-zookeeper/kafka_2.13-3.4.1/bin/

        ./kafka-topics.sh --create --bootstrap-server 1.1.1.11:9092,1.1.1.12:9092,1.1.1.13:9092 --replication-factor 3 --partitions 3 --topic hkzs

        ./kafka-topics.sh --list --bootstrap-server 1.1.1.11:9092

        ./kafka-topics.sh --list --bootstrap-server 1.1.1.12:9092

        ./kafka-topics.sh --list --bootstrap-server 1.1.1.13:9092

      args:

        executable: /bin/bash

【题目 4】1.3.4 OpenStack 资源管理的客户端程序开发 [2 分]

使用已建好的 OpenStack Python 运维开发环境,在 root 目录下创建resource_manager.py 脚本,基于 OpenStack 资源配额管理服务封装客户端工具, resource_manager.py 程序支持命令行带参数执行,命令参数要求说明如下:

(1)位置参数“command”,表示操作类型。操作类型包括“list”:标识查看所有的对象;“get”:查询指定的对象。

(2)位置参数“resource”,表示资源信息类型:类型包括 “provider”:资源提供者;“inventory”:资源库存;“usage”:资源使用情况。

(3)参数“-p 或-- provider”,标识资源提供者的名称。功能要求如下:

(1)程序查询所有资源提供者,以 json 格式控制台输出。

执行实例如下: python3 resource_manager.py list provider

(2)查询指定资源提供者的资源信息,以 json 格式控制台输出。

执行实例如下: python3 resource_manager.py get provider -p “providername”

(3)查询指定资源提供者的资源库存信息,以 json 格式控制台输出。执行实例如下: python3 resource_manager.py get inventory -p

“providername”

(4)查询指定资源提供者的资源使用信息,以 json 格式控制台输出。

执行实例如下: python3 resource_manager.py get usage -p “providername”

【题目 5】1.3.5 OpenStack 数据库操作开发[3 分]

使用已建好的 OpenStack Python 运维开发环境,在/root 目录下创建mysql_db_manager.py 脚本,基于 python 的 sqlalchemy 库进行数据库的管理,实现对OpenStack 内指定服务的MariaDB 数据库管理功能,实现该数据库下表创建、删除、数据插入、更新等操作(为确保检测成功,OpenStack MariaDB 数据库的账户 root、密码000000 不要修改):

该表(table)用于描述 OpenStack 成员信息,表结构如下: 表名称"member",该表有 4 个字段:

id INTEGER 主键,自动递增; name VARCHAR(256);

level INTEGER; place varchar(256);

(1)mysql_db_manager 内部实现 DM_Manager 类,类初始化方法 def init (self, db_name),参数 db_name 是 OpenStack 内部指定的某一服务数据库名称。

(2)DM_Manager 类实现create_table(self)方法。实现创建表功能,表指 member

表。

(3)DM_Manager 类实现insert_table_data(self,**kwargs)方法。实现表中表数据插入功能,参数 kwargs 参数为要插入数据记录信息,key 与表字段名称一致。

(4)DM_Manager 类实现update_table_data(self,**kwargs)方法。实现表中数据记

录更新功能,参数kwargs 参数为要更新数据记录信息,key 与表字段名称一致。

(5)DM_Manager 类实现run_table_raw_sql(self, raw_sql:str): 方法,无参数。实现表中直接执行sql 语句功能,raw_sql 参数为sql 语句。

(6)DM_Manager 类实现delete_table(self)方法。实现删除表功能,表指 member

表。

【任务 4】容器云服务搭建[5 分]

【适用平台】私有云

【题目 1】2.1.1 部署容器云平台[5 分]

使用 OpenStack 私有云平台创建两台云主机,云主机类型使用 4vCPU/12G/100G 类型, 分别作为 Kubernetes 集群的 Master 节点和 node 节点,然后完成 Kubernetes 集群的部署, 并完成 Istio 服务网格、KubeVirt 虚拟化和 Harbor 镜像仓库的部署。

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

Master/1.1.1.31

Node/1.1.1.32

Kubernetes 集群的部署

master:

mount -o loop chinaskills_cloud_paas_v2.0.2.iso /mnt/

cp -rfv /mnt/* /opt/

umount /mnt/

mv /opt/kubeeasy /usr/bin/kubeeasy

##安装依赖

kubeeasy install depend \

--host 1.1.1.31,1.1.1.32 \

--user root \

--password root \

--offline-file /opt/dependencies/base-rpms.tar.gz

##配置ssh免密钥

kubeeasy create ssh-keygen \

--master 1.1.1.31 \

--worker 1.1.1.32 \

--user root --password 000000

##安装kubernetes集群

kubeeasy install kubernetes \

--master 1.1.1.31 \

--worker 1.1.1.32 \

--user root \

--password root \

--version 1.22.1 \

--offline-file /opt/kubernetes.tar.gz

部署 Istio 服务网格

kubeeasy add --istio istio   #通过kubeeast工具安装lstio服务网格

kubectl create namespace iamges  #创建空间为images,可以在这个空间使用lstion服务网格

kubectl label namespace exam istio-injection=enabled   #给iamges空间添加了一个标签是enabled。在这个命名空间下创建的所有新的Pod都将自动注入Envoy代理作为Sidecar,使它们能够成为Istio服务网格的一部分。

KubeVirt 虚拟化

kubeeasy add --virt kubevirt

Harbor 镜像仓库的部署

kubeeasy add --registry harbor

【任务 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)

因无资源用此包代替

上传包,解压

上传镜像

配置yum源

[hypref]

name=hypref

baseurl=file:///root/yum

gpgcheck=0

enabled=1

Mysql脚本

#!/bin/bash

mysql_install_db --user=root

mysqld_safe --user=root &

sleep 8

mysqladmin -u root password 'tshoperp'

mysql -uroot -ptshoperp -e "grant all on *.* to 'root'@'%' identified by 'tshoperp'; flush privileges;"

mysql -uroot -ptshoperp -e " create database jsh_erp;use jsh_erp;source /opt/hyperf_admin.sql;"

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER hoyeong

RUN rm -rf /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/

COPY yum /root/yum

ENV LC_ALL en_US.UTF-8

RUN yum -y install mariadb-server

COPY sql /opt/

COPY mysql_init.sh /opt/

RUN bash /opt/mysql_init.sh

EXPOSE 3306

CMD ["mysqld_safe","--user=root"]

执行

有点步骤和题目不符合,要求导入jsh_erp.sql我导入的是,hyperf_admin.sql

【题目 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)

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER hoyeong

RUN rm -rf /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/

COPY yum /root/yum

RUN yum -y install redis

RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf

RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf

EXPOSE 6379

CMD ["/usr/bin/redis-server","/etc/redis.conf"]

构建镜像

【题目 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)

没包做不全

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER Fish

RUN rm -rf /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/

COPY yum /root/yum

RUN yum -y install nginx

EXPOSE 80

CMD ["nginx","-g","daemon off;"]

构建镜像

【题目 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)

没包只能注释一行

构建镜像脚本

FROM centos:centos7.9.2009

MAINTAINER hoyeong

#COPY app.jar /root

ADD yum /root/yum

RUN rm -rfv /etc/yum.repos.d/*

COPY local.repo /etc/yum.repos.d/local.repo

RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

EXPOSE 9999

CMD java -jar /root/app.jar

构建镜像

【题目 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 触发自动构建,具体要求如下:

  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)

【题目 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 地址到答题框。

添加五行

controlle

vim /etc/kubernetes/manifests/kube-apiserver.yaml

 - --audit-log-path=/etc/kubernetes/audit-logs/audit.log

    - --audit-log-maxage=10

    - --audit-log-maxbackup=10

    - --audit-log-maxsize=500

- --audit-policy-file=/etc/kubernetes/audit-policy/policy.yaml

echo 'apiVersion: audit.k8s.io/v1

> kind: Policy

> rules:

> - level: RequestResponse

>   resources:

>   - group: ""

>     resources: ["pods"]

> - level: Request

>   resources:

>   - group: ""

>     resources: ["configmaps"]

>     namespaces: ["kube-system"]' > /etc/kubernetes/audit-policy/policy.yaml

  

【题目 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 代码,代码实现以下任务:

  1. 首先查询查询服务 service,如果 service 名称“nginx-svc”已经存在,先删除。 
  2. 如果不存在“nginx-svc”,则使用 service.yaml 文件创建服务。 
  3. 创建完成后,查询该服务的信息,查询的 body 部分以 json 格式的文件输出到当前目录下的 service_api_dev.json 文件中。 
  4. 然后使用 service_update.yaml 更新服务端口。
  5. 完成更新后,查询该服务的信息,信息通过控制台输出,并通过 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 代码,代码实现以下任务:

  1. 首先使用 nginx-deployment.yaml 文件创建 deployment 资源。 
  2. 创建完成后,查询该服务的信息,查询的 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 个方法:

  1. 实现方法 create_crd(),实现对 Competition CRD 的创建。 
  2. 实现方法 delete_crd(),实现对 Competition CRD 的删除。 
  3. 实现方法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 个方法:

  1. 实现方法 create_crd_object(ymlfile:str),实现 CRD 的自定义对象的创建,

yamlfile 为 CRD 的自定义对象 yaml 文件。

  1. 实现方法 delete_crd_object(crd_object_name:str),实现创建 CRD 功能,

crd_object_name 为 CRD 的自定义对象名称。

  1. 实现方法 watch_crd_object(crd_object_name:str),实现 CRD 的自定义对象变化事件监听,当监听到 CRD 的自定义对象的名称为crd_object_name 被删除时,将 event 信息输出到控制台,并停止监听。 

【赛程名称】模块三 公有云 

【任务 1】公有云服务搭建[5 分]

【适用平台】华为云

【题目 1】3.1.1 私有网络管理[0.3 分]

在公有云中完成虚拟私有云的创建。具体要求如下:

  1. 在上海一区域进行创建操作; 
  2. 创建一个名为 intnetX 的内部网络:IP 地址为 172.16.0.0/16;
  3. 创建子网名称为 intnetX-server:IP 地址为 172.16.1.0/24;
  4. 创建子网名称为 intnetX-mysql:IP 地址为 172.16.2.0/24;

完成创建后,提交当前的 AK(SecretId)、SK(SecretKey)和 intnetX 网络的 ID 到答题框。 

【题目 2】3.1.2 云实例管理[0.5 分]

登录华为云平台,创建两台云实例。具体要求如下:

  1. 计费模式:按需计费;
  2. 地域:上海一; 

  1. CPU 架构:x86 计算;
  2. 规格:c7.xlarge.2;

(5)镜像:CentOS 7.5 64 位;

  1. 系统盘:高 IO 50G 硬盘; 
  2. 公网带宽:按带宽计费,5Mbps;
  3. 实例名称:ChinaSkill-node-1、ChinaSkill-node-2;
  4. 登录方式:使用密码登录,密码自定义。 

创建完成后,提交当前的AK(SecretId)、SK(SecretKey)和 ChinaSkill-node-1 的实例 ID 到答题框。 

【题目 3】3.1.3 数据库管理[0.2 分]

使用 intnetX-mysql 网络创建三台云服务器 chinaskill-sql-1、chinaskill-sql-2 和chinaskill-sql-3(系统使用 CentOS7.9),使用提供的压缩文件 mongodb-repo.tar.gz 中的软件包源,在这三台云服务器上部署 MongoDB 数据库服务。 

配置完成后提交连接chinaskill-sql-1 节点的用户名、密码和公网IP 地址到答题框。

【题目 4】3.1.4 主从数据库[0.5 分]

在 chinaskill-sql-1 、chinaskill-sql-2 和 chinaskill-sql-3 云服务器中配置MongoDB 一主二从数据库+副本集操作,chinaskill-sql-1 节点为主节点,其余节点为从节点,配置 MongoDB 集群名称为 cloud。

完成后提交连接 chinaskill-sql-1 节点的用户名、密码和公网 IP 地址到答题框。

【题目 5】3.1.5 node 环境管理[0.5 分]

使用提供的压缩文件,安装 Node.js 环境。

使用提供的压缩文件 rocketchat-cloud.tar.gz 中软件包源,在 ChinaSkill-node-1

部署 nodejs,根据所提供的 rocket.chat 所需要求安装 nodejs 对应版本。配置完成后提交

连接 ChinaSkill-node-1 节点的用户名、密码和公网 IP 地址到答题框。

【题目 6】3.1.6 安全组管理[0.5 分]

根据要求,创建一个安全组。具体要求如下:

(1)名称:intnetX-security;

(2)允许策略:只放行源地址为 172.16.1.0/24 访问 27017 端口;

  1. 允许策略:只放行源地址为 172.16.1.0/24 使用 ping 命令访问; 
  2. 关联实例:将 intnetX-security 安全组关联至所创建的数据库中;

创建完成后,提交当前的 AK(SecretId)、SK(SecretKey)和安全组 ID 到答题框。 

【题目 7】3.1.7 RocketChat 上云[0.5 分]

使用 http 服务器提供文件,将 Rocket.Chat 应用部署上云。

使用http 服务器提供的压缩文件rocketchat-cloud.tar.gz 中的RocketChat 软件包, 在 ChinaSkill-node-1 中部署RocketChat 的Web 服务。使用chinaskill-sql-1 的MongoDB 为后端数据库,设置 RocketChat 服务访问端口为 3000。完成 Rocketchat 系统上云后,将ChinaSkill-node-1 节点的用户名、密码和公网 IP 地址到答题框。 

【题目 8】3.1.8 NAT 网关[0.5 分]

根据要求创建一个公网 NAT 网关。具体配置如下:

  1. 名称为:kcloud-nat;
  2. 虚拟私有云:intnetX;
  3. 子网:intnetX-server;
  4. 规则:内部子网地址访问外网; 
  5. 设置 Chinaskill-node-1 云服务器 3000 端口转换为外部 3000 服务端口。

创建完成后提交当前的 AK(SecretId)、SK(SecretKey)和 NAT 网关的 ID 到答题框。

【题目 9】3.1.9 云备份[0.5 分]

创建一个云服务器备份存储库名为 server_backup,容量为 100G。将 ChinaSkill- node-1 云服务器制作镜像文件 chinaskill-image。

完成后,将当前的 AK(SecretId)、SK(SecretKey)和存储库 ID 到答题框。

【题目 10】3.1.10 负载均衡器[0.5 分]

根据要求创建一个负载均衡器 chinaskill-elb。

将 ChinaSkill-node-1 和 ChinaSkill-node-2 加入负载均衡的后端。设置一个可用的公网服务 IP,服务端口为 3000。配置监听器,监听 3000 端口。对浮动公共 IP 进行 Web 访问测试。完成后,提交当前的 AK(SecretId)、SK(SecretKey)和负载均衡器的 ID 到答题框。 

【题目 11】3.1.11 弹性伸缩管理[0.5 分]

根据要求新建一个弹性伸缩启动配置。具体要求如下:

  1. 启动配置名称:template-exam;
  2. 计费模式:按量计费;
  3. 地域:上海一; 
  4. 镜像:chinaskill-image;
  5. 登录方式:使用密码登录,密码自定义。创建一个伸缩组,具体要求如下: 
  1. 名称:as-exam; 
  2. 最小伸缩数:1;起始实例数:1;最大伸缩数:5;
  3. 启动配置:template-exam;

  1. 使用负载均衡:chinaskill-elb;
  2. 移出策略:移出最旧的实例。 

为伸缩组 as-exam 新建告警触发策略,具体要求如下:

  1. 如果实例的内存利用率在 5 分钟内的最大值小于 40%,且连续发生 3 次。则实例

数减少 1 台。冷却 60 秒;

  1. 如果实例的内存利用率在 5 分钟内的最大值大于 80%,且连续发生 3 次。则实例

数增加 1 台。冷却 60 秒;

  1. 如果实例的 CPU 利用率在 5 分钟内的最大值小于 40%,且连续发生 3 次。则实例数减少 1 台。冷却 60 秒; 
  2. 如果实例的 CPU 利用率在 5 分钟内的平均值大于等于 80%,且连续发生 3 次。则实例数增加 1 台。冷却 60 秒。 

创建完成后提交当前的 AK(SecretId)、SK(SecretKey)和伸缩组的实例 ID 到答题框。 

【任务 2】公有云服务运维[10 分]

【适用平台】华为云

【题目 1】3.2.1 云容器引擎[1 分]

在公有云上,按照要求创建一个 x86 架构的容器云集群。具体要求如下:

(1)集群名称:kcloud;

(2)集群版本:v1.25;

  1. 地域:上海一; 
  2. 集群管理规模:50 节点; 
  3. 节点使用子网:intnetX-server;
  4. 节点预留容器 IP 上限:64;

(7)容器网段:10.10.0.0/16。

创建一个集群节点,节点配置信息要求如下:

  1. 节点名称:kcloud-server;
  2. 节点规格:c6s.xlarge.2
  3. 节点:EulerOS 2.9
  4. 使用 docker 容器引擎

创建完成后提交当前的 AK(SecretId)、SK(SecretKey)和集群的 ID 到答题框。

【题目 2】3.2.2 云容器管理[1 分]

使用插件管理在 kcloud 容器集群中安装dashboard 可视化监控界面。完成后,提交 dashboard 访问地址到答题框。

【题目 3】3.2.3 使用 kubectl 操作集群[2 分]

在 kcloud 集群中安装 kubectl 命令,使用 kubectl 命令管理 kcloud 集群。完成后提交连接 kcloud 集群节点的用户名、密码和公网 IP 地址到答题框。 

【题目 4】3.2.4 安装 helm[2 分]

在 k8s 集群中创建 chartmuseum 命名空间,编写 yaml 文件部署 ChartMuseum 服务。 使用提供的 helm 软件包(软件包为 helm-v3.3.0-linux-amd64.tar.gz 在 http 服务

下),在 kcloud 集群中安装 helm 服务。

完成后提交连接 kcloud 集群节点的用户名、密码和公网 IP 地址到答题框。

【题目 5】3.2.5 chartmuseum 仓库部署[2 分]

在 k8s 集群中创建 chartmuseum 命名空间,编写 yaml 文件部署 ChartMuseum 服务。在 k8s 集群中创建chartmuseum 命名空间,编写 yaml 文件在 chartmuseum 命名空间中

使用 chartmuseum:latest 镜像创建本地私有 chart 仓库,设置其仓库存储目录为宿主机的

/data/charts 目录。编写 service.yaml 文件,为chart 私有仓库创建 Service 访问策略,

定义其为 ClusterIP 访问模式。编写完成后启动 chartmuseum 服务。提交连接 kcloud 集群

节点的用户名、密码和公网 IP 地址到答题框。

【题目 6】3.2.6 WordPress 应用部署[2 分]

根据提供的 chart 包 wordpress.tgz 部署 WordPress 服务。

根据提供的 chart 包 wordpress-13.0.23.tgz 部署 wordpress 服务,根据 chart 包中内容创建 wordpress 所需要的 pv,并修改其访问模式为 NodePort。使用修改后的 chart 包创建 wordpress 服务。完成后提交连接 kcloud 集群节点的用户名、密码和公网 IP 地址到答题框。 

【任务 3】公有云运维开发[10 分]

【适用平台】华为云

【题目 1】3.3.1 开发环境搭建[1 分]

创建一台云主机,并登录此云服务器,基于云服务器 Python3.6.8 运行环境,安装

SDK 依赖库。

通过华为云控制台,选择北京四区域,创建一台 x86 架构,“按需计费”的 2 核, 4G,系统盘 50G 的云实例,实例名为 chinaskill,选择镜像为 CentOS 7.9 64bit(40GB), 分配独立的公网 IP,带宽选择按使用流量计费 5M。登录此云服务器,在云服务器Python3.6.8 环境上,安装华为云最新版本 SDK 的依赖库,包括弹性云服务、虚拟私有

云、镜像服务、容器云引擎、云数据库的 python 库。

完成后提交“chinaskill”开发运行环境云主机的用户名、密码和 IP 地址到答题框。

【题目 2】3.3.2 密钥对管理[2 分]

编写 Python 代码,实现密钥对的创建。

在云服务器的/root/huawei/目录下编写 create_keypair.py 文件,使用 SDK 编写

Python 代码,创建华为云的秘钥对,具体要求为:

  1. 秘钥对名称:chinaskills_keypair;
  2. 如果秘钥对已经存在,代码中需要先删除; 
  3. 输出此秘钥对详细信息。 

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

【题目 3】3.3.3 云硬盘管理[2 分]

调用 SDK 云硬盘管理的方法,实现云主机的的增删查改。

在/root/huawei 目录下编写 create_block_store.py 文件,使用 SDK 编写 Python 代码,调用创建华为云的云硬盘,具体要求如下: 

  1. 云硬盘可用区域:cn-north-4a
  2. 云硬盘名称:chinaskills_volume
  3. 云硬盘规格和大小:超高 IO,100G
  4. 设置云硬盘共享 
  5. 设置云硬盘加密,加密秘钥为默认的 KMS 密钥 
  6. 如果云硬盘已经存在,代码中需要先删除 
  7. 输出此云硬盘的详细信息(状态要求为 available)

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

【题目 4】3.3.4 云主机管理[3 分]

调用 SDK 云主机管理的方法,实现云主机的的增删查改。

使用已建好的运维开发环境,在/root/huawei 目录下创建 ecs_manager.py 脚本,完成 ECS 云主机管理,ecs_manager.py 程序支持命令行参数执行。 

提示说明:华为云主机支持安装所需 Python 库。提交前答案前,需安装所开发程序所依赖的 Python 库。 

  1. 程序支持根据命令行参数,创建 1 个云主机。位置参数“create”,表示创建; 

参数“-i 或--input”,格式为 json 格式文本的云主机的名称、镜像名称 2 个信息。其他参数同上述开发环境云主机一致。 

创建待成功,再返回查询该云主机的信息,结果以 json 格式输出到控制台。

参考执行实例如下:

python3 /root/huawei/ecs_manager.py create --input '{ "name": " chinaskill001", " imagename": "imageid"} '

  1. 支持查询给定具体名称的 ECS 云主机查询。位置参数“get”,表示查询 ECS;

参数“-n 或 --name”支持指定名称 ECS 查询,类型为 string。

参数“-o 或 --output”支持查询该 ECS 信息输出到文件,格式为 json 格式。

  1. 程序支持查询目前区域账号下所有的 ECS 云主机。位置参数“getall”,表示查询所有 ECS 云主机; 

参数“-o 或--output”支持输出到文件,格式为 yaml 格式。

  1. 支持删除指定名称的云主机。 

位置参数“delete”,表示删除一个 ECS 云主机;返回 response,通过控制台输出。

参数“-n 或--name”支持指定名称查询,类型为 string。

完成后提交“chinaskill 开发运行环境云主机”的用户名、密码和 IP 地址到答题框。

【题目 5】3.3.5 基于 FastAPI 框架封装华为云 VPC 服务 Restful APIs 接口[2 分]

使用已建好的运维开发环境,可用区为华北-北京 4,在/root/huaweicloud_fastapi 目录下创建 main.py 文件,基于 FastAPI 框架,完成虚拟私有云 VPC 管理服务的封装,端口为 7045。 

提示说明:华为云主机支持安装所需 Python 库。提交前答案前,需安装所开发程序所依赖的 Python 库。 

  1. 封装创建接口,路径为/cloud_vpc/create_vpc,参数格式为{"name": "","cidr": ""},name 为VPC 名称,cidr 为虚拟私有云下可用子网的范围;方法为 POST, 返回数据类型为 JSON 类型。
  2. 封装单个 VPC 查询接口,路径为/cloud_vpc/vpc/{vpc_name},路径中

{vpc_name}为待查询 VPC;方法为 GET,返回数据类型为 JSON 类型。

  1. 封装服务查询接口,要求可以查询到所有 VPC,路径为/cloud_vpc/vpc;方法为GET,返回的数据类型 JSON 类型的列表类型。 
  2. 封装更新 VPN 名称接口,路径为/cloud_vpc/update_vpc,参数格式为

{"new_name": "","old_name": ""},new_name 为 VPC 新名称,old_name 为待删除的 VPN

名称;方法为PUT,返回 JSON 类型的更新后数据。

  1. 封装删除接口,接口名为/cloud_vpc/delete_vpc,参数格式为{"vpc_name": ""},vpc_name 为 VPC 新名称;方法为DELETE,返回 JSON 类型的删除后的数据。 

功能编写完成后,手工启动 Restful 服务,再提交检测。 

【任务 4】边缘计算系统运维[10 分]

【适用平台】私有云

【题目 1】4.1.1 KubeEdge cloudcore 云端模块部署与配置[3 分]

在本地 http 文件服务器中下载 k8s-allinone-v1.22.1.qcow2 镜像(该镜像启动后内置一个完整的kubernetes 服务)并完成下列操作: 

  1. 上传该镜像至公有云 OBS 存储桶中; 
  2. 使用该镜像文件创建为私有镜像; 
  3. 使用该镜像创建一台云主机,该云主机作为 KubeEdge 的云端节点。云主机申请完成之后,在提供的 OBS 访问域名中,下载软件包

kubernetes_kubeedge.tar 到云端节点并部署 KubeEdge1.11 边缘计算系统,在云端节点部署 KubeEdge cloudcore 云端模块、启动 cloudcore 服务并配置该服务可被systemd 管理。完成后提交云端节点的 IP 地址、用户名和密码到答题框。 

【题目 2】4.1.2 KubeEdge edgecore 边端模块部署与配置[4 分]

在本地 OpenStack 环境中申请两台CentOS7.9 虚拟机做为 KubeEdge 的边缘端节点。主机名分别为 edge-node1、edge-node2。在 http 文件服务器中下载kubernetes_kubeedge.tar 软件包,使用该软件包在该虚拟机部署 KubeEdge edgecore 边端模块,并启动 edgecore 服务。加入成功之后,启用 metrics 监控服务。 

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

【题目 3】4.1.3 KubeEdge 应用部署-部署计数器应用[3 分]

利用搭建好的边缘计算平台,在云端节点上使用提供的相关镜像(k8simage 目录下) 和 yaml 文件(kubeedge-counter-demo 目录下),自行编写 DeviceModel、Device 资源,

要求如下:

DeviceModel 名字为 counter-model;

属性为 status,类型为字符串,存储模式为读写模式,默认值为空; Device 名字为 counter;

引用 counter-model 设备模型;

将此设备通过节点选择器与 edge-node1 节点进行绑定;

在 status 字段中的 twins 字段定义属性名称为 status、理想值为“OFF”、真实值为“0”;

编写完成后,按照顺序分别部署好 DeviceModel、Device 以及云端计数应用控制器和计数应用。部署完成后,将计数器打开。 

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

【任务 5】边缘计算云应用开发[5.0 分]

【适用平台】私有云

【题目 1】5.1.1 开发环境构建与用户注册服务开发[1 分]

使用华为云已搭建好的 KubeEdge 环境,安装 Python 3.7.3 运行环境,并安装开发所需的依赖包,使用提供的 mongoRepo.tar.gz 软件包在边端安装 MongoDB 数据库,设置数据库为任何机器都可以连接登录。 

开发环境搭建好之后,将提供的代码包导入到 Linux 服务器 root 目录下,并打开fastapi_user 工程目录进行用户管理服务开发,服务端口为 8046,运行服务后,注册名为chinaskill 的用户,密码为 Abc@1234,手动启动代码运行服务。代码编写完成后提交该云主机的用户名、密码和 IP 地址到答题框。 

【题目 2】5.1.2 AI 检测服务与网关服务开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_ai_pcb 工程目录,基于 YOLO5 与已训练的模型实现 PCB 缺陷 AI 识别服务, fastapi 框架来定义 PCB 图片的缺陷检测接口,调用接口时,需要指定 device 实例名称和上传缺陷图片,当识别到缺陷图片后,返回图片 base64 编码后的数据、模型的名字、当前的上传时间、以及识别坐标的位置信息和实例名称。

然后打开 fastapi_gateway 工程目录,基于 fastapi-gateway 开源框架实现网关服

务,AI PCB 微服务端口为 8055,微服务网关端口 30850,通过这个网关来访问用户管理服

务和 AI PCB 识别服务,手动启动 AI PCB 和网关服务。

AI 接口接口路径为:/detect/pcb_detect,参数传递到路径接口上,参数名为

device_id。

识别图片在工程目录中的 runs 目录里。

代码编写完成后提交该云主机的用户名、密码和 IP 地址到答题框。 

【题目 3】5.1.3 设备与设备模型管理服务开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_cloud_edge 工程目录,基于 FastAPI 框架和 Kubernetes SDK 实现了一组 API,主要针对 KubeEdge 拓展的CRD 的资源进行访问封装,微服务端口为 8045。 

1、完善设备模型管理服务,要求如下:

  1. 定义获取 DeviceModel 资源接口,接口名为/devicemodel/devicemodel,方法为

GET;

  1. 定义获取单个 DeviceModel 接口,接口名为/devicemodel/{name},方法为

GET;

  1. 定义创建 DeviceModel 接口,接口名为/devicemodel/devicemodel,方法为POST, 参数格式为{"name": "", "properties": ""},name 为 DeviceModel 的名字, properties 为 DeviceModel 更新的属性内容,类型为列表类型; 
  2. 定义设备模型同步接口,接口名为/devicemodel/devicemodel,方法为 PUT,参数格式为{"name": "", "properties": ""},name 为 DeviceModel 的名字,properties 为DeviceModel 创建的属性内容,类型为列表类型;
  3. 定义删除 DeviceModel 资源接口,接口名为/device/devicemodel,可以删除指定 DeviceModel,参数格式为{"name": ""},name 为 DeviceModel 的名字,方法为DELETE。 

2、完善设备管理服务,要求如下:

  1. 定义获取所有的 device 资源,接口名为/device/device,方法为 GET;
  2. 定义获取单个 device,接口名为/device/{name},方法为 GET;
  3. 定义设备同步接口,接口名为/device/device,参数格式为{"name": "","desired": {}},name 为更新设备的名字,desired 为更新设备的内容,内容格式为

JSON 格式,方法为 PUT;

  1. 定义创建 device 接口,接口名为/device/device,参数格式为

{"name":"","dmName": "","nodeName": ""},name 为 device 的名字,dmName 为

DeviceModel 的名字,nodeName 为边缘节点名字,方法为 POST;

  1. 定义删除 device 接口,可以删除指定的 device 资源,接口名为

/device/device,参数格式为{"name": ""},名字为要删除的 device 名字,方法为

DELETE。

手动启动设备与设备模型管理服务。

代码编写完成后提交该云主机的用户名、密码和 IP 地址到答题框。

【题目 4】5.1.4 云边数据协同开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_cloud_edge 工程目录,在前面几道题的基础之上,对 pcb_data_manager.py 文件完善代码,要求如下: 

将数据模型上传到数据库中,并返回该模型在数据库中的 ID,若有相同模型则不上传;

定义接收边缘消息程序;

云端接收边端 MQTT 主题里所发送的数据,将数据进行解析,存储到 MongoDB 数据库中,并对云端pcb-device 设备信息进行更新。 

设备信息字段为 pcb_model(模型名字)、pcb_status(设备状态)、pcb_result

(模型在数据中的 ID)、upload_time(识别图片的时间)

手动启动该服务。

【题目 5】5.1.5 云端节点管理开发[1 分]

使用现有的开发环境,将提供的代码包导入到 Linux 服务器 root 目录下,打开fastapi_cloud 工程目录,基于 FastAPI 框架和 Kubernetes SDK 实现了一组 API,来进行管理云端节点和边缘节点信息的后端服务,微服务端口为 8047,编码要求功能如下: 

定义获取云端节点信息的路由,接口为/cloud_edge_service/node/cloudnode,请求为 GET,返回的数据类型为列表类型。

定义获取单个节点信息的路由,接口为/cloud_edge_service/node/{node_name},请

求为 GET,返回数据类型为字典类型。

定义获取边缘节点信息的路由,接口为/cloud_edge_service/node/edgenode,请求为

GET,返回数据类型为列表类型。

定义节点资源使用情况路由,接口为

/cloud_edge_service/metrics/node/{node_name},请求为 GET,返回获取到的资源使用情况,将任意一台边缘节点的主机名存储到/root/name.txt 文件里。

手动启动云端节点管理服务。 

信息的路由,接口为/cloud_edge_service/node/edgenode,请求为

GET,返回数据类型为列表类型。

定义节点资源使用情况路由,接口为

/cloud_edge_service/metrics/node/{node_name},请求为 GET,返回获取到的资源使用情况,将任意一台边缘节点的主机名存储到/root/name.txt 文件里。

手动启动云端节点管理服务。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/77721
推荐阅读
相关标签
  

闽ICP备14008679号