0%

2022云计算国赛私有云

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

云计算赛项第一场-私有云

【任务 1】私有云服务搭建[10 分]

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

使用提供的用户名密码,登录提供的 OpenStack 私有云平台,在当前租户下,使用CentOS7.9 镜像,创建两台云主机,云主机类型使用 4vCPU/12G/100G_50G 类型。当前租户下默认存在一张网卡,自行创建第二张网卡并连接至 controller 和 compute 节点(第二张网卡的网段为 10.10.X.0/24,X 为工位号,不需要创建路由)。自行检查安全组策略,以确保网络正常通信与 ssh 连接,然后按以下要求配置服务器:
(1)设置控制节点主机名为 controller,设置计算节点主机名为 compute;
(2)修改 hosts 文件将 IP 地址映射为主机名;
完成后提交控制节点的用户名、密码和 IP 地址到答题框。
1.查看控制节点名字为 controller 正确计 0.2 分
2.查看 hosts 文件中有正确的主机名和 IP 映射计 0.2 分
3.控制节点正确使用两块网卡计 0.1 分

controller

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@controller ~]# hostnamectl set-hostname controller
[root@controller ~]# su
[root@controller ~]# hostnamectl
Static hostname: controller
Icon name: computer-vm
Chassis: vm
Machine ID: cc2c86fe566741e6a2ff6d399c5d5daa
Boot ID: 214933a71db6473cb11d2c126d890cdf
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-1160.el7.x86_64
Architecture: x86-64

compute

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@compute ~]# hostnamectl set-hostname compute
[root@compute ~]# su
[root@compute ~]# hostnamectl
Static hostname: compute
Icon name: computer-vm
Chassis: vm
Machine ID: cc2c86fe566741e6a2ff6d399c5d5daa
Boot ID: 3f03732ccb29461b9a4f3772d76ea5c3
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-1160.el7.x86_64
Architecture: x86-64
1
2
3
4
5
6
[root@controller ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.20.161 controller
192.168.20.195 compute

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

使用提供的 http 服务地址,在 http 服务下,存在 centos7.9 和 iaas 的网络 yum 源,使用该 http 源作为安装 iaas 平台的网络源。分别设置 controller 节点和 compute 节点的 yum 源文件 http.repo。完成后提交控制节点的用户名、密码和 IP 地址到答题框。
1.查看/etc/yum.repos.d/http.repo 文件,有正确的 baseurl 路径,计 0.5 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@controller ~]# rm -rf /etc/yum.repos.d/*
[root@controller ~]# cat /etc/yum.repos.d/http.repo
[centos]
name=centos
baseurl=http://172.19.25.11/centos
gpgcheck=0
enabled=1

[iaas]
name=iaas
baseurl=http://172.19.25.11/iaas/iaas-repo
gpgcheck=0
enabled=1

[root@controller ~]# yum repolist
Loaded plugins: fastestmirror
Determining fastest mirrors
centos | 3.6 kB 00:00:00
iaas | 2.9 kB 00:00:00
(1/3): centos/group_gz | 153 kB 00:00:00
(2/3): iaas/primary_db | 597 kB 00:00:00
(3/3): centos/primary_db | 3.3 MB 00:00:00
repo id repo name status
centos centos 4,070
iaas iaas 954
repolist: 5,024

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

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

1.查看控制节点允许计算节点无秘钥登录计 0.5 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@controller ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:eMrYvgTXlKEoQ4SVWEeZlTiVZMtbt2H5Z/LAjwq9K18 root@controller
The key's randomart image is:
+---[RSA 2048]----+
| *=ooB=o. |
|o...=+oo o . |
| o ..+ + = |
| o * o = |
| . + S . = o |
| * o . O |
| . = . . E o |
| o .. + |
| o. o=. |
+----[SHA256]-----+
[root@controller ~]# ssh-copy-id root@compute
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@compute's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'root@compute'"
and check to make sure that only the key(s) you wanted were added.

[root@controller ~]# ssh root@compute
Last login: Tue Mar 7 02:18:21 2023
[root@compute ~]# #无密钥连接成功

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

在控制节点和计算节点上分别安装 openstack-iaas 软件包,根据表 2 配置两个节点脚本文件中的基本变量(配置脚本文件为/etc/openstack/openrc.sh)。
完成后提交控制节点的用户名、密码和 IP 地址到答题框。
1.检查环境变量文件配置正确计 0.5 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
[root@controller ~]# yum install -y openstack-iaas
[root@controller ~]# cat /etc/openstack/openrc.sh
#--------------------system Config--------------------##
#Controller Server Manager IP. example:x.x.x.x
HOST_IP=192.168.20.161

#Controller HOST Password. example:000000
HOST_PASS=000000

#Controller Server hostname. example:controller
HOST_NAME=controller

#Compute Node Manager IP. example:x.x.x.x
HOST_IP_NODE=192.168.20.195

#Compute HOST Password. example:000000
HOST_PASS_NODE=000000

#Compute Node hostname. example:compute
HOST_NAME_NODE=compute

#--------------------Chrony Config-------------------##
#Controller network segment IP. example:x.x.0.0/16(x.x.x.0/24)
network_segment_IP=192.168.20.0/24

#--------------------Rabbit Config ------------------##
#user for rabbit. example:openstack
RABBIT_USER=openstack

#Password for rabbit user .example:000000
RABBIT_PASS=000000

#--------------------MySQL Config---------------------##
#Password for MySQL root user . exmaple:000000
DB_PASS=000000

#--------------------Keystone Config------------------##
#Password for Keystore admin user. exmaple:000000
DOMAIN_NAME=demo
ADMIN_PASS=000000
DEMO_PASS=000000

#Password for Mysql keystore user. exmaple:000000
KEYSTONE_DBPASS=000000

#--------------------Glance Config--------------------##
#Password for Mysql glance user. exmaple:000000
GLANCE_DBPASS=000000

#Password for Keystore glance user. exmaple:000000
GLANCE_PASS=000000

#--------------------Placement Config----------------------##
#Password for Mysql placement user. exmaple:000000
PLACEMENT_DBPASS=000000

#Password for Keystore placement user. exmaple:000000
PLACEMENT_PASS=000000

#--------------------Nova Config----------------------##
#Password for Mysql nova user. exmaple:000000
NOVA_DBPASS=000000

#Password for Keystore nova user. exmaple:000000
NOVA_PASS=000000

#--------------------Neutron Config-------------------##
#Password for Mysql neutron user. exmaple:000000
NEUTRON_DBPASS=000000

#Password for Keystore neutron user. exmaple:000000
NEUTRON_PASS=000000

#metadata secret for neutron. exmaple:000000
METADATA_SECRET=000000

#External Network Interface. example:eth1
INTERFACE_NAME=eth0

#External Network The Physical Adapter. example:provider
Physical_NAME=provider

#First Vlan ID in VLAN RANGE for VLAN Network. exmaple:101
minvlan=101

#Last Vlan ID in VLAN RANGE for VLAN Network. example:200
maxvlan=200

#--------------------Cinder Config--------------------##
#Password for Mysql cinder user. exmaple:000000
CINDER_DBPASS=000000

#Password for Keystore cinder user. exmaple:000000
CINDER_PASS=000000

#Cinder Block Disk. example:md126p3
BLOCK_DISK=vdb1

#--------------------Swift Config---------------------##
#Password for Keystore swift user. exmaple:000000
SWIFT_PASS=000000

#The NODE Object Disk for Swift. example:md126p4.
OBJECT_DISK=vdb2

#The NODE IP for Swift Storage Network. example:x.x.x.x.
STORAGE_LOCAL_NET_IP=192.168.20.195

#--------------------Trove Config----------------------##
#Password for Mysql trove user. exmaple:000000
TROVE_DBPASS=000000

#Password for Keystore trove user. exmaple:000000
TROVE_PASS=000000

#--------------------Heat Config----------------------##
#Password for Mysql heat user. exmaple:000000
HEAT_DBPASS=000000

#Password for Keystore heat user. exmaple:000000
HEAT_PASS=000000

#--------------------Ceilometer Config----------------##
#Password for Gnocchi ceilometer user. exmaple:000000
CEILOMETER_DBPASS=000000

#Password for Keystore ceilometer user. exmaple:000000
CEILOMETER_PASS=000000

#--------------------AODH Config----------------##
#Password for Mysql AODH user. exmaple:000000
AODH_DBPASS=000000

#Password for Keystore AODH user. exmaple:000000
AODH_PASS=000000

#--------------------ZUN Config----------------##
#Password for Mysql ZUN user. exmaple:000000
ZUN_DBPASS=000000

#Password for Keystore ZUN user. exmaple:000000
ZUN_PASS=000000

#Password for Keystore KURYR user. exmaple:000000
KURYR_PASS=000000

#--------------------OCTAVIA Config----------------##
#Password for Mysql OCTAVIA user. exmaple:000000
OCTAVIA_DBPASS=000000

#Password for Keystore OCTAVIA user. exmaple:000000
OCTAVIA_PASS=000000

#--------------------Manila Config----------------##
#Password for Mysql Manila user. exmaple:000000
MANILA_DBPASS=000000

#Password for Keystore Manila user. exmaple:000000
MANILA_PASS=000000

#The NODE Object Disk for Manila. example:md126p5.
SHARE_DISK=vdb3

#--------------------Cloudkitty Config----------------##
#Password for Mysql Cloudkitty user. exmaple:000000
CLOUDKITTY_DBPASS=000000

#Password for Keystore Cloudkitty user. exmaple:000000
CLOUDKITTY_PASS=000000

#--------------------Barbican Config----------------##
#Password for Mysql Barbican user. exmaple:000000
BARBICAN_DBPASS=000000

#Password for Keystore Barbican user. exmaple:000000
BARBICAN_PASS=000000
###############################################################
#####在vi编辑器中执行:%s/^.\{1\}// 删除每行前1个字符(#号)#####
###############################################################

1
[root@controller ~]# iaas-pre-host.sh
1
[root@compute ~]# iaas-pre-host.sh

【题目 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。
完成后提交控制节点的用户名、密码和 IP 地址到答题框。
1.检查数据库配置正确计 0.5 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@controller ~]# iaas-install-mysql.sh
[root@controller ~]# cat /etc/my.cnf
#

# This group is read both both by the client and the server

# use it for options that affect everything

#
[client-server]

#

# This group is read by the server

#
[mysqld]

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
max_connections=10000
lower_case_table_names = 1 #数据库支持大小写
innodb_buffer_pool_size = 4G #数据库缓存
innodb_log_buffer_size = 64MB #设置数据库的log buffer为64mb
innodb_log_file_size = 256MB #设置数据库的redo log大小为256mb
innodb_log_files_in_group = 2 #设置数据库的redo log文件组为2

#

# include all files from the config directory

#
!includedir /etc/my.cnf.d

[root@controller ~]# systemctl restart mariadb

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

在 controller 节点上使用 iaas-install-keystone.sh 脚本安装 Keystone 服务。安装完成后,使用相关命令,创建用户 chinaskill,密码为 000000。完成后提交控制节点的用户名、密码和 IP 地址到答题框。
1.检查 keystone 服务安装正确计 0.2 分
2.检查 chinaskill 用户创建正确计 0.3 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@controller ~]# iaas-install-keystone.sh 
[root@controller ~]# source /etc/keystone/admin-openrc.sh
[root@controller ~]# openstack user create --domain demo chinaskill --password 000000
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | 916f69a6dc5d462c8743799c33d6cd8b |
| enabled | True |
| id | ce30ed9e337b4441acbb5947ce95b9ee |
| name | chinaskill |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
[root@controller ~]# openstack user list
+----------------------------------+------------+
| ID | Name |
+----------------------------------+------------+
| e5bcdce7fc39415693bd84a44f6d6373 | admin |
| c6c1bf4fad804eca9eed9515bcf16d78 | demo |
| ce30ed9e337b4441acbb5947ce95b9ee | chinaskill |
+----------------------------------+------------+

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

在 controller 节点上使用 iaas-install-glance.sh 脚本安装 glance 服务。使用命令将提供的 cirros-0.3.4-x86_64-disk.img 镜像(该镜像在 HTTP 服务中,可自行下载)上传至平台,命名为 cirros,并设置最小启动需要的硬盘为 10G,最小启动需要的内存为 1G。完成后提交控制节点的用户名、密码和 IP 地址到答题框。
1.检查 glance 服务安装正确计 0.1 分
2.检查 cirros 镜像最小启动硬盘与内存配置正确计 0.4 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@controller ~]# iaas-install-glance.sh
[root@controller ~]# openstack image create cirros --disk qcow2 --container bare --min-disk 10 --min-ram 1024 < cirros-0.3.4-x86_64-disk.img
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| checksum | ee1eca47dc88f4879d8a229cc70a07c6 |
| container_format | bare |
| created_at | 2023-03-07T03:08:17Z |
| disk_format | qcow2 |
| file | /v2/images/da9fee49-f9a7-45e6-a830-f749e87b404b/file |
| id | da9fee49-f9a7-45e6-a830-f749e87b404b |
| min_disk | 10 |
| min_ram | 1024 |
| name | cirros |
| owner | 5a824a04c09c4ba4b75767019900dc98 |
| properties | os_hash_algo='sha512', os_hash_value='1b03ca1bc3fafe448b90583c12f367949f8b0e665685979d95b004e48574b953316799e23240f4f739d1b5eb4c4ca24d38fdc6f4f9d8247a2bc64db25d6bbdb2', os_hidden='False' |
| protected | False |
| schema | /v2/schemas/image |
| size | 13287936 |
| status | active |
| tags | |
| updated_at | 2023-03-07T03:08:18Z |
| virtual_size | None |
| visibility | shared |
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

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

在 controller 节 点 和 compute 节 点 上 分 别 使 用 iaas-install-placement.sh 脚 本 、iaas-install-nova -controller.sh 脚本、iaas-install-nova-compute.sh 脚本安装 Nova 服务。安装完成后,请修改 nova 相关配置文件,解决因等待时间过长而导致虚拟机启动超时从而获取不到 IP 地址而报错失败的问题。配置完成后提交 controller 点的用户名、密码和 IP 地址到答题框。
1.检查 nova 服务解决超时问题配置正确计 0.5 分

1
2
3
4
5
[root@controller ~]# iaas-install-placement.sh 
[root@controller ~]# iaas-install-nova-controller.sh
[root@controller ~]# cat /etc/nova/nova.conf | grep vif_plugging_is_fatal=false
vif_plugging_is_fatal=false
[root@controller ~]# systemctl restart *nova*
1
2
[root@compute ~]# iaas-install-placement.sh 
[root@compute ~]# iaas-install-nova-compute.sh

【题目 9】Neutron 安装[0.5 分]

使用提供的脚本 iaas-install-neutron-controller.sh 和 iaas-install-neutron-compute.sh,在controller 和 compute 节点上安装 neutron 服务。完成后提交控制节点的用户名、密码和 IP地址到答题框。
1.检查 neutron 服务安装正确计 0.2 分
2.检查 neutron 服务的 linuxbridge 网桥服务启动正确计 0.3 分

1
[root@controller ~]# iaas-install-neutron-controller.sh
1
[root@compute ~]# iaas-install-neutron-compute.sh 

【题目 10】Doshboard 安装[0.5 分]

在 controller 节点上使用 iaas-install-dashboad.sh 脚本安装 dashboad 服务。安装完成后,将 Dashboard 中的 Djingo 数据修改为存储在文件中(此种修改解决了 ALL-in-one 快照在其他云平台 Dashboard 不能访问的问题)。完成后提交控制节点的用户名、密码和 IP 地址到答题框。
1.检查 Dashboard 服务安装正确计 0.2 分
2.检查 Dashboard 服务中 Djingo 数据修改为存储在文件中配置正确计 0.3 分

1
[root@controller ~]# iaas-install-dashboard.sh
1
2
3
[root@controller ~]# cat /etc/openstack-dashboard/local_settings | grep SESSION_ENGINE
# SESSION_ENGINE to django.contrib.sessions.backends.signed_cookies
SESSION_ENGINE = 'django.contrib.sessions.backends.file'

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

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

1
[root@controller ~]# iaas-install-swift-controller.sh
1
[root@compute ~]# iaas-install-swift-compute.sh
1
2
3
4
5
6
7
8
9
10
[root@controller ~]# openstack container create examcontaienr
+---------------------------------------+---------------+------------------------------------+
| account | container | x-trans-id |
+---------------------------------------+---------------+------------------------------------+
| AUTH_5a824a04c09c4ba4b75767019900dc98 | examcontaienr | tx453b000251d94847a87e7-006406d19d |
+---------------------------------------+---------------+------------------------------------+
[root@controller ~]# swift upload examcontainer -S 10000000 cirros-0.3.4-x86_64-disk.img
cirros-0.3.4-x86_64-disk.img segment 1
cirros-0.3.4-x86_64-disk.img segment 0
cirros-0.3.4-x86_64-disk.img

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

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

1.检查 cinder 后端存储扩容成功计 0.5 分

1
[root@controller ~]# iaas-install-cinder-controller.sh
1
[root@compute ~]# iaas-install-cinder-compute.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@compute ~]# vgextend cinder-volumes /dev/vdb4
[root@compute ~]# vgdisplay
--- Volume group ---
VG Name cinder-volumes
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 24.99 GiB
PE Size 4.00 MiB
Total PE 6398
Alloc PE / Size 4874 / <19.04 GiB
Free PE / Size 1524 / 5.95 GiB
VG UUID nM28QF-pGdI-Q1Nh-LvoZ-F6aV-GuDh-2rey4k

【题目 13】Manila 服务安装与使用[0.5 分]

在 控 制 和 计 算 节 点 上 分 别 使 用 iaas-install-manila-controller.sh 和iaas-install-manila-compute.sh 脚本安装 manila 服务。安装服务后创建 default_share_type 共享类型(不使用驱动程序支持),接着创建一个大小为 2G 的共享存储名为 share01 并开放share01 目录对 OpenStack 管理网段使用权限。最后提交控制节点的用户名、密码和 IP 地址到答题框。
1.检查 share01 共享存储正确创建并赋予权限计 0.5 分

1
[root@controller ~]# iaas-install-manila-controller.sh
1
[root@compute ~]# iaas-install-manila-compute.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
[root@controller ~]# manila type-create default_share_type false    #创建 default_share_type 共享类型(不使用驱动程序支持)
+----------------------+--------------------------------------+
| Property | Value |
+----------------------+--------------------------------------+
| required_extra_specs | driver_handles_share_servers : False |
| Name | default_share_type |
| Visibility | public |
| is_default | YES |
| ID | 6cfdc0f1-bfca-4f77-8012-57f07b3a53e1 |
| optional_extra_specs | |
| Description | None |
+----------------------+--------------------------------------+
[root@controller ~]# manila create NFS 2 --name share01 #创建一个大小为 2G 的共享存储名为 share01
+---------------------------------------+--------------------------------------+
| Property | Value |
+---------------------------------------+--------------------------------------+
| status | creating |
| share_type_name | default_share_type |
| description | None |
| availability_zone | None |
| share_network_id | None |
| share_server_id | None |
| share_group_id | None |
| host | |
| revert_to_snapshot_support | False |
| access_rules_status | active |
| snapshot_id | None |
| create_share_from_snapshot_support | False |
| is_public | False |
| task_state | None |
| snapshot_support | False |
| id | 39a379b3-2874-486d-9a04-b4e5daadb9ed |
| size | 2 |
| source_share_group_snapshot_member_id | None |
| user_id | e5bcdce7fc39415693bd84a44f6d6373 |
| name | share01 |
| share_type | 6cfdc0f1-bfca-4f77-8012-57f07b3a53e1 |
| has_replicas | False |
| replication_type | None |
| created_at | 2023-03-07T06:21:59.000000 |
| share_proto | NFS |
| mount_snapshot_support | False |
| project_id | 5a824a04c09c4ba4b75767019900dc98 |
| metadata | {} |
+---------------------------------------+--------------------------------------+
[root@controller ~]# manila access-allow share01 ip 192.168.20.0/24 --access-level rw #开放share01 目录对 OpenStack 管理网段使用权限
+--------------+--------------------------------------+
| Property | Value |
+--------------+--------------------------------------+
| access_key | None |
| share_id | 39a379b3-2874-486d-9a04-b4e5daadb9ed |
| created_at | 2023-03-07T06:22:54.000000 |
| updated_at | None |
| access_type | ip |
| access_to | 192.168.20.0/24 |
| access_level | rw |
| state | queued_to_apply |
| id | 0a57e84a-7b61-4adf-b422-d76f0af111be |
| metadata | {} |
+--------------+--------------------------------------+
1
2
3
4
5
6
7
8
9
10
11
12
[root@controller ~]# manila type-list
+--------------------------------------+--------------------+------------+------------+--------------------------------------+----------------------+-------------+
| ID | Name | visibility | is_default | required_extra_specs | optional_extra_specs | Description |
+--------------------------------------+--------------------+------------+------------+--------------------------------------+----------------------+-------------+
| 6cfdc0f1-bfca-4f77-8012-57f07b3a53e1 | default_share_type | public | YES | driver_handles_share_servers : False | | None |
+--------------------------------------+--------------------+------------+------------+--------------------------------------+----------------------+-------------+
[root@controller ~]# manila list
+--------------------------------------+---------+------+-------------+-----------+-----------+--------------------+-----------------------------+-------------------+
| ID | Name | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone |
+--------------------------------------+---------+------+-------------+-----------+-----------+--------------------+-----------------------------+-------------------+
| 39a379b3-2874-486d-9a04-b4e5daadb9ed | share01 | 2 | NFS | available | False | default_share_type | compute@lvm#lvm-single-pool | nova |
+--------------------------------------+---------+------+-------------+-----------+-----------+--------------------+-----------------------------+-------------------+

【题目 14】Barbican 服务安装与使用[0.5 分]

使用 iaas-install-barbican.sh 脚本安装 barbican 服务,安装服务完毕后,使用 openstack命令创建一个名为 secret01 的密钥,创建完成后提交控制节点的用户名、密码和 IP 地址到答题框。
1.检查 secret01 密钥创建正确计 0.5 分

1
[root@controller ~]# iaas-install-barbican.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@controller ~]# openstack secret store --name secret01 --payload secretkey
+---------------+------------------------------------------------------------------------+
| Field | Value |
+---------------+------------------------------------------------------------------------+
| Secret href | http://controller:9311/v1/secrets/40500d87-2c4d-4a14-8c75-5eeb8c9c9bc1 |
| Name | secret01 |
| Created | None |
| Status | None |
| Content types | None |
| Algorithm | aes |
| Bit length | 256 |
| Secret type | opaque |
| Mode | cbc |
| Expiration | None |
+---------------+------------------------------------------------------------------------+

【题目 15】Cloudkitty 服务安装与使用[1 分]

使用 iaas-install-cloudkitty.sh 脚本安装 cloudkitty 服务,安装完毕后,启用 hashmap 评级模块,接着创建 volume_thresholds 组,创建服务匹配规则 volume.size,并设置每 GB 的价格为 0.01。接下来对应大量数据设置应用折扣,在组 volume_thresholds 中创建阈值,设置若超过 50GB 的阈值,应用 2%的折扣(0.98)。设置完成后提交控制节点的用户名、密码和 IP 地址到答题框。
1.检查 hashmap 评级模块启用成功计 0.2 分
2.检查服务匹配规则 volume.size 创建成功 0.8 分

1
[root@controller ~]# iaas-install-cloudkitty.sh 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@controller ~]# openstack rating module enable hashmap  #启用hashmap评级模块
+---------+---------+----------+
| Module | Enabled | Priority |
+---------+---------+----------+
| hashmap | True | 1 |
+---------+---------+----------+
[root@controller ~]# openstack rating hashmap group create volume_thresholds #创建volume_thresholds组
+-------------------+--------------------------------------+
| Name | Group ID |
+-------------------+--------------------------------------+
| volume_thresholds | ea44607d-a9a2-4cfd-ac56-aabd88ba007f |
+-------------------+--------------------------------------+
[root@controller ~]# openstack rating hashmap service create volume.size #创建服务匹配规则volume.size
+-------------+--------------------------------------+
| Name | Service ID |
+-------------+--------------------------------------+
| volume.size | 54ef69c0-6000-4713-9518-2e02a67adbbe |
+-------------+--------------------------------------+
[root@controller ~]# openstack rating hashmap mapping create -s 54ef69c0-6000-4713-9518-2e02a67adbbe -g ea44607d-a9a2-4cfd-ac56-aabd88ba007f -t flat 0.01 #设置每GB的价格为0.01
+--------------------------------------+-------+------------+------+----------+--------------------------------------+--------------------------------------+------------+
| Mapping ID | Value | Cost | Type | Field ID | Service ID | Group ID | Project ID |
+--------------------------------------+-------+------------+------+----------+--------------------------------------+--------------------------------------+------------+
| e2f9a6f9-bc27-4c49-953a-77dfa04df597 | None | 0.01000000 | flat | None | 54ef69c0-6000-4713-9518-2e02a67adbbe | ea44607d-a9a2-4cfd-ac56-aabd88ba007f | None |
+--------------------------------------+-------+------------+------+----------+--------------------------------------+--------------------------------------+------------+
[root@controller ~]# openstack rating hashmap threshold create -s 54ef69c0-6000-4713-9518-2e02a67adbbe -g ea44607d-a9a2-4cfd-ac56-aabd88ba007f -t rate 50 0.98 #在组 volume_thresholds 中创建阈值,设置若超过 50GB 的阈值,应用 2%的折扣(0.98)
+--------------------------------------+-------------+------------+------+----------+--------------------------------------+--------------------------------------+------------+
| Threshold ID | Level | Cost | Type | Field ID | Service ID | Group ID | Project ID |
+--------------------------------------+-------------+------------+------+----------+--------------------------------------+--------------------------------------+------------+
| f0def644-3b5b-45a8-a5d5-2ebd76aa7266 | 50.00000000 | 0.98000000 | rate | None | 54ef69c0-6000-4713-9518-2e02a67adbbe | ea44607d-a9a2-4cfd-ac56-aabd88ba007f | None |
+--------------------------------------+-------------+------------+------+----------+--------------------------------------+--------------------------------------+------------+

【题目 16】OpenStack 平台内存优化[0.5 分]

搭建完 OpenStack 平台后,关闭系统的内存共享,打开透明大页。完成后提交控制节点的用户名、密码和 IP 地址到答题框。
1.检查系统内存优化成功计 0.5 分

1
2
3
4
5
[root@controller ~]# cat /sys/kernel/mm/transparent_hugepage/defrag 
[always] madvise never
[root@controller ~]# echo never >> /sys/kernel/mm/transparent_hugepage/defrag
[root@controller ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

【题目 17】修改文件句柄数[0.5 分]

Linux 服务器大并发时,往往需要预先调优 Linux 参数。默认情况下,Linux 最大文件句柄数为 1024 个。当你的服务器在大并发达到极限时,就会报出“too many open files”。创建一台云主机,修改相关配置,将控制节点的最大文件句柄数永久修改为 65535。配置完成后提交 controller 点的用户名、密码和 IP 地址到答题框。
1.检查配置 linux 系统句柄数为 65535 成功计 0.5 分

1
2
3
4
[root@controller ~]# cat /etc/security/limits.conf 

* hard nofile 65535
* soft nofile 65535

【题目 18】Linux 系统调优-防止 SYN 攻击[1 分]

修改 controller 节点的相关配置文件,开启 SYN cookie,防止 SYN 洪水攻击。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。
1.检查开启 SYN cookie 配置计 1 分

1
2
3
4
5
6
7
8
[root@controller ~]# cat /etc/sysctl.conf 
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.tcp_syncookies = 1
[root@controller ~]# sysctl -p
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.tcp_syncookies = 1

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

【题目 1】OpenStack 开放镜像权限[0.5 分]

使 用 OpenStack 私 有 云 平 台 , 在 OpenStack 平 台 的 admin 项 目 中 使 用cirros-0.3.4-x86_64-disk.img 镜像文件创建名为 glance-cirros 的镜像,通过 OpenStack 命令将glance-cirros 镜像指定 demo 项目进行共享使用。配置完成后提交 controller 点的用户名、密码和 IP 地址到答题框。
1.检查 glance-cirros 镜像权限开放正确计 0.5 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[root@controller ~]# openstack image create glance-cirros < cirros-0.3.4-x86_64-disk.img 
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| checksum | ee1eca47dc88f4879d8a229cc70a07c6 |
| container_format | bare |
| created_at | 2023-03-07T07:05:58Z |
| disk_format | raw |
| file | /v2/images/54b116cf-e941-403c-9fa3-082e767712f6/file |
| id | 54b116cf-e941-403c-9fa3-082e767712f6 |
| min_disk | 0 |
| min_ram | 0 |
| name | glance-cirros |
| owner | 5a824a04c09c4ba4b75767019900dc98 |
| properties | os_hash_algo='sha512', os_hash_value='1b03ca1bc3fafe448b90583c12f367949f8b0e665685979d95b004e48574b953316799e23240f4f739d1b5eb4c4ca24d38fdc6f4f9d8247a2bc64db25d6bbdb2', os_hidden='False' |
| protected | False |
| schema | /v2/schemas/image |
| size | 13287936 |
| status | active |
| tags | |
| updated_at | 2023-03-07T07:05:59Z |
| virtual_size | None |
| visibility | shared |
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
[root@controller ~]# openstack project list
+----------------------------------+---------+
| ID | Name |
+----------------------------------+---------+
| 5a824a04c09c4ba4b75767019900dc98 | admin |
| a580b951935c454595e36921e15b4781 | service |
| b8d9637523374f939026d268e033a77b | demo |
+----------------------------------+---------+
[root@controller ~]# glance member-create 54b116cf-e941-403c-9fa3-082e767712f6 b8d9637523374f939026d268e033a77b
+--------------------------------------+----------------------------------+---------+
| Image ID | Member ID | Status |
+--------------------------------------+----------------------------------+---------+
| 54b116cf-e941-403c-9fa3-082e767712f6 | b8d9637523374f939026d268e033a77b | pending |
+--------------------------------------+----------------------------------+---------+
[root@controller ~]# glance member-update 54b116cf-e941-403c-9fa3-082e767712f6 b8d9637523374f939026d268e033a77b accepted
+--------------------------------------+----------------------------------+----------+
| Image ID | Member ID | Status |
+--------------------------------------+----------------------------------+----------+
| 54b116cf-e941-403c-9fa3-082e767712f6 | b8d9637523374f939026d268e033a77b | accepted |
+--------------------------------------+----------------------------------+----------+

【题目 2】OpenStack 消息队列调优[0.5 分]

OpenStack 各服务内部通信都是通过 RPC 来交互,各 agent 都需要去连接 RabbitMQ;随着各服务 agent 增多,MQ 的连接数会随之增多,最终可能会到达上限,成为瓶颈。使用自行搭建的 OpenStack 私有云平台,分别通过用户级别、系统级别、配置文件来设置 RabbitMQ服务的最大连接数为 10240,配置完成后提交修改节点的用户名、密码和 IP 地址到答题框。
1.检查 rabbitmq 服务最大连接数正确计 0.5 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[root@controller ~]# cat /etc/security/limits.conf   #用户级别

* hard nofile 10240
* soft nofile 10240
[root@controller ~]# cat /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.tcp_syncookies = 1
fs.file-max=10240 #系统级别
[root@controller ~]# sysctl -p
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.tcp_syncookies = 1
fs.file-max = 10240
[root@controller ~]# cat /usr/lib/systemd/system/rabbitmq-server.service
# systemd unit example
[Unit]
Description=RabbitMQ broker
After=network.target epmd@0.0.0.0.socket
Wants=network.target epmd@0.0.0.0.socket

[Service]
Type=notify
User=rabbitmq
Group=rabbitmq
NotifyAccess=all
TimeoutStartSec=3600
# Note:
# You *may* wish to add the following to automatically restart RabbitMQ
# in the event of a failure. systemd service restarts are not a
# replacement for service monitoring. Please see
# http://www.rabbitmq.com/monitoring.html
#
# Restart=on-failure
# RestartSec=10
WorkingDirectory=/var/lib/rabbitmq
ExecStart=/usr/lib/rabbitmq/bin/rabbitmq-server
ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl stop
ExecStop=/bin/sh -c "while ps -p $MAINPID >/dev/null 2>&1; do sleep 1; done"
LimitNOFILE=10240 #配置文件
[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
[root@controller ~]# systemctl daemon-reload
[root@controller ~]# systemctl restart rabbitmq-server
[root@controller ~]#
[root@controller ~]#
[root@controller ~]# rabbitmqctl status
Status of node rabbit@controller
[{pid,5068},
{running_applications,
[{rabbit,"RabbitMQ","3.6.16"},
{rabbit_common,
"Modules shared by rabbitmq-server and rabbitmq-erlang-client",
"3.6.16"},
{compiler,"ERTS CXC 138 10","7.0.4.1"},
{xmerl,"XML parser","1.3.14"},
{ranch,"Socket acceptor pool for TCP protocols.","1.3.2"},
{mnesia,"MNESIA CXC 138 12","4.14.3"},
{syntax_tools,"Syntax tools","2.1.1"},
{ssl,"Erlang/OTP SSL application","8.1.3.1"},
{os_mon,"CPO CXC 138 46","2.4.2"},
{public_key,"Public key infrastructure","1.4"},
{crypto,"CRYPTO","3.7.4"},
{asn1,"The Erlang ASN1 compiler version 4.0.4","4.0.4"},
{recon,"Diagnostic tools for production use","2.3.2"},
{sasl,"SASL CXC 138 11","3.0.3"},
{stdlib,"ERTS CXC 138 10","3.3"},
{kernel,"ERTS CXC 138 10","5.2"}]},
{os,{unix,linux}},
{erlang_version,
"Erlang/OTP 19 [erts-8.3.5.3] [source] [64-bit] [smp:4:4] [async-threads:64] [hipe] [kernel-poll:true]\n"},
{memory,
[{connection_readers,2026008},
{connection_writers,360960},
{connection_channels,515976},
{connection_other,3295536},
{queue_procs,1851512},
{queue_slave_procs,0},
{plugins,0},
{other_proc,19619360},
{metrics,421520},
{mgmt_db,0},
{mnesia,335752},
{other_ets,2143792},
{binary,141972984},
{msg_index,84952},
{code,21467691},
{atom,891849},
{other_system,10030300},
{allocated_unused,35666864},
{reserved_unallocated,0},
{total,91086848}]},
{alarms,[]},
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},
{vm_memory_calculation_strategy,rss},
{vm_memory_high_watermark,0.4},
{vm_memory_limit,4971485593},
{disk_free_limit,50000000},
{disk_free,103964745728},
{file_descriptors,
[{total_limit,10140},
{total_used,74},
{sockets_limit,9124},
{sockets_used,72}]},
{processes,[{limit,1048576},{used,1181}]},
{run_queue,0},
{uptime,9},
{kernel,{net_ticktime,60}}]

【题目 3】OpenStack Glance 镜像压缩[0.5 分]

使 用 自 行 搭 建 的 OpenStack 平 台 。 在 HTTP 服 务 中 存 在 一 个 镜 像 为CentOS7.5-compress.qcow2 的镜像,请使用 qemu 相关命令,对该镜像进行压缩,压缩后的镜像命名为 chinaskill-js-compress.qcow2 并存放在/root 目录下。完成后提交 controller 点的用户名、密码和 IP 地址到答题框。
1.检查镜像压缩正确计 0.5 分

1
[root@controller ~]# qemu-img convert -c -O qcow2 cirros-0.3.4-x86_64-disk.img chinaskill-cirros.img

【题目 4】glance 对接 cinder 后端存储[0.5 分]

在自行搭建的 OpenStack 平台中修改相关参数,使 glance 可以使用 cinder 作为后端存储,将镜像存储于 cinder 卷中。使用 cirros-0.3.4-x86_64-disk.img 文件创建 cirros-image 镜像存储于 cirros-cinder 卷中,通过 cirros-image 镜像使用 cinder 卷启动盘的方式进行创建虚拟机。完成后提交修改节点的用户名、密码和 IP 地址到答题框。
1.检查修改 glance 后端存储为 cinder 正确计 0.5 分

1
2
3
4
5
6
7
8
9
[root@controller ~]# vi /etc/glance/glance-api.conf 
show_multiple_locations = true
[glance_store]
#stores = file,http
#demo_store = file
#filesystem_store_datadir = /var/lib/glance/images/
stores = cinder
default_store=cinder
[root@controller ~]# systemctl restart openstack-glance*
1
2
3
4
5
6
7
[root@controller ~]# vi /etc/cinder/cinder.conf 
allowed_direct_url_schemes = cinder
image_upload_use_cinder_backend = true
image_upload_use_internal_tenant = true

#重启服务
[root@controller ~]# systemctl restart openstack-cinder*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@controller ~]# openstack image create cinder-cirros < cirros-0.3.4-x86_64-disk.img 
+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| checksum | ee1eca47dc88f4879d8a229cc70a07c6 |
| container_format | bare |
| created_at | 2023-03-07T07:38:20Z |
| disk_format | raw |
| file | /v2/images/b8355385-67fe-4f67-816f-acef85ffdd3a/file |
| id | b8355385-67fe-4f67-816f-acef85ffdd3a |
| min_disk | 0 |
| min_ram | 0 |
| name | cinder-cirros |
| owner | 5a824a04c09c4ba4b75767019900dc98 |
| properties | locations='[{u'url': u'cinder://aadc1565-6d35-4380-aff9-16ac5fc6d0b4', u'metadata': {}}]', os_hash_algo='sha512', os_hash_value='1b03ca1bc3fafe448b90583c12f367949f8b0e665685979d95b004e48574b953316799e23240f4f739d1b5eb4c4ca24d38fdc6f4f9d8247a2bc64db25d6bbdb2', os_hidden='False' |
| protected | False |
| schema | /v2/schemas/image |
| size | 13287936 |
| status | active |
| tags | |
| updated_at | 2023-03-07T07:38:39Z |
| virtual_size | None |
| visibility | shared |
+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
[root@controller ~]# cinder list
WARNING:cinderclient.shell:API version 3.59 requested,
WARNING:cinderclient.shell:downgrading to 3.50 based on server support.
+--------------------------------------+-----------+--------------------------------------------+------+-------------+----------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------------------------------------+------+-------------+----------+-------------+
| aadc1565-6d35-4380-aff9-16ac5fc6d0b4 | available | image-b8355385-67fe-4f67-816f-acef85ffdd3a | 1 | - | false | |
+--------------------------------------+-----------+--------------------------------------------+------+-------------+----------+-------------+

【题目 5】OpenStack Heat 运维:创建容器[0.5 分]

在 自 行 搭 建 的 OpenStack 私 有 云 平 台 上 , 在 /root 目 录 下 编 写 Heat 模 板create_container.yaml,要求执行 yaml 文件可以创建名为 heat-swift 的容器。完成后提交控制节点的用户名、密码和 IP 地址到答题框。(在提交信息前请准备好 yaml 模板执行的环境)

1.执行 heat 模板文件成功创建容器计 0.5 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@controller ~]# cat create_container.yaml 
heat_template_version: 2018-03-02
resources:
server:
type: OS::Swift::Container
properties:
name: heat-swift
[root@controller ~]# openstack stack create -t create_container.yaml heat-swift
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| id | 81873448-b1ad-48d9-9bbc-31fb158e1881 |
| stack_name | heat-swift |
| description | No description |
| creation_time | 2023-03-07T07:50:52Z |
| updated_time | None |
| stack_status | CREATE_IN_PROGRESS |
| stack_status_reason | Stack CREATE started |
+---------------------+--------------------------------------+

【题目 6】OpenStack Nova 清除缓存[0.5 分]

在 OpenStack 平台的一台计算节点创建虚拟机,若是第一次在该节点创建次虚拟机,会先将镜像文件复制到该计算节点目录/var/lib/nova/instances/_base。长期下来,该目录会占用比较大的磁盘空间而要清理。可以通过修改 nova 的配置文件来自动清理该缓存目录,即在该节点没有使用某镜像启动的云主机,那么这个镜像在过一定的时间后会被自动删除。配置完成后提交改动节点的用户名、密码和 IP 地址到答题框。
1.检查 nova 配置自动清理缓存文件正确计 0.5 分

1
2
3
[root@controller ~]# cat /etc/nova/nova.conf | grep remove_unused_base_images=true
remove_unused_base_images=true
[root@controller ~]# systemctl restart *nova*

【题目 7】Redis 一主二从三哨兵模式[1 分]

使用提供的 OpenStack 私有云平台,申请三台 CentOS7.9 系统的云主机,使用提供的http 源,在三个节点自行安装 Redis 服务并启动,配置 Redis 的访问需要密码,密码设置为123456。然后将这三个 Redis 节点配置为 Redis 的一主二从三哨兵架构,即一个 Redis 主节点,两个从节点,三个节点均为哨兵节点。配置完成后提交 Redis 主节点的用户名、密码和IP 地址到答题框。
1.检查 redis 主从集群部署正确计 0.5 分
2.检查 redis 集群部署为哨兵节点正确计 0.5 分

主节点:

yum install -y redis

1
2
3
4
5
6
vi /etc/redis.conf 
bind 0.0.0.0
protected-mode no
daemonize yes
masterauth 123456
requirepass 123456

systemctl restart redis

systemctl enable redis

从节点1:

yum install -y redis

1
2
3
4
5
6
7
vi /etc/redis.conf
bind 0.0.0.0
protected-mode no
daemonize yes
slaveof 192.168.20.104 6379
masterauth 123456
requirepass 123456

systemctl restart redis

systemctl enable redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@redis-2 ~]# redis-cli 
127.0.0.1:6379> info
.................
# Replication
role:slave
master_host:192.168.20.104
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:589
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
....................

从节点2:

yum install -y redis

1
2
3
4
5
6
7
vi /etc/redis.conf
bind 0.0.0.0
protected-mode no
daemonize yes
slaveof 192.168.20.104 6379
masterauth 123456
requirepass 123456

systemctl restart redis

systemctl enable redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@redis-3 ~]# redis-cli 
127.0.0.1:6379> info
.................
# Replication
role:slave
master_host:192.168.20.104
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:589
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
....................

1、哨兵模式搭建:
哨兵模式需要修改sentinel.conf文件,三台服务器均为此配置

vi /etc/redis-sentinel.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
端口默认为26379。
port 26379
关闭保护模式,可以外部访问。
protected-mode no
设置为后台启动。
daemonize yes
指定主机IP地址和端口(三台配置均为指定主机ip),并且指定当有2台哨兵认为主机宕机,则对主机进行容灾切换。mymaster:设置master名字,必须在其它有用到该名字的命令之前设置
sentinel monitor mymaster 192.168.20.104 6379 2
当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass mymaster 123456
这里设置了主机多少秒无响应,则认为挂了。此处3秒
sentinel down-after-milliseconds mymaster 3000
主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
snetinel parallel-syncs mymaster 1
故障转移的超时时间,这里设置为三分钟。
sentinel failover-timeout mymaster 180000

【题目 8】Redis 服务调优-AOF[1 分]

使用上一题安装的 Redis 服务。在 Redis 中,AOF 配置为以三种不同的方式在磁盘上执行 write 或者 fsync。假设当前 Redis 压力过大,请配置 Redis 不执行 fsync。除此之外,避免AOF 文件过大,Redis 会进行 AOF 重写,生成缩小的 AOF 文件。请修改配置,让 AOF 重写时,不进行 fsync 操作。配置完成后提交 Redis 节点的用户名、密码和 IP 地址到答题框。
1.检查配置 redis 不执行 fsync 正确计 0.5 分、
2.检查配置 redis 进行 AOF 重写不执行 fsync 正确计 0.5 分

1
2
3
[root@controller ~]# vi /etc/redis.conf
appendfsync no # 将原来的everysec修改为no,表示不执行fsync
no-appendfsync-on-rewrite yes # 将原来的no改为yes,表示进行aof重写不执行fsync

【题目 9】应用部署:堡垒机部署[0.5 分]

使用提供的 OpenStack 平台申请一台 CentOS7.9 的云主机,使用提供的软件包安装JumpServer 堡垒机服务,并配置使用该堡垒机对接自己安装的 controller 和 compute 节点。完成后提交 JumpServer 节点的用户名、密码和 IP 地址到答题框。
1.检查堡垒机部署正确计 0.5 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
[root@jumpserver ~]# ls
jumpserver.tar.gz
[root@jumpserver ~]# tar -zxvf jumpserver.tar.gz -C /opt/
[root@jumpserver ~]# cd /opt/
[root@jumpserver opt]# ls
compose config docker docker.service images jumpserver jumpserver-repo static.env
[root@jumpserver ~]# cd /etc/yum.repos.d/
[root@jumpserver yum.repos.d]# mkdir bak
[root@jumpserver yum.repos.d]# mv CentOS-* bak/
[root@jumpserver yum.repos.d]# cat local.repo
[centos]
name=centos
baseurl=ftp://192.168.200.10/centos
gpgcheck=0
[jumpserver ]
name=jumpserver
baseurl=file:///opt/jumpserver-repo
gpgcheck=0
[root@jumpserver ~]# yum install python2 -y
[root@jumpserver opt]# cp -rf /opt/docker/* /usr/bin/
[root@jumpserver opt]# chmod 775 /usr/bin/docker*
[root@jumpserver opt]# cp -rf /opt/docker.service /etc/systemd/system
[root@jumpserver opt]# chmod 775 /etc/systemd/system/docker.service
[root@jumpserver opt]# systemctl daemon-reload
[root@jumpserver opt]# systemctl enable docker --now
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.
[root@jumpserver opt]# docker -v
Docker version 18.06.3-ce, build d7080c1
[root@jumpserver opt]# docker-compose -v
docker-compose version 1.27.4, build 40524192
[root@jumpserver opt]#
[root@jumpserver images]# ls
jumpserver_core_v2.11.4.tar jumpserver_lion_v2.11.4.tar jumpserver_nginx_alpine2.tar
jumpserver_koko_v2.11.4.tar jumpserver_luna_v2.11.4.tar jumpserver_redis_6-alpine.tar
jumpserver_lina_v2.11.4.tar jumpserver_mysql_5.tar load.sh
[root@jumpserver images]# cat load.sh
#!/bin/bash
docker load -i jumpserver_core_v2.11.4.tar
docker load -i jumpserver_koko_v2.11.4.tar
docker load -i jumpserver_lina_v2.11.4.tar
docker load -i jumpserver_lion_v2.11.4.tar
docker load -i jumpserver_luna_v2.11.4.tar
docker load -i jumpserver_mysql_5.tar
docker load -i jumpserver_nginx_alpine2.tar
docker load -i jumpserver_redis_6-alpine.tar
[root@jumpserver images]# sh load.sh
[root@jumpserver images]# mkdir -p /opt/jumpserver/{core,koko,lion,mysql,nginx,redis}
[root@jumpserver images]# cp -rf /opt/config /opt/jumpserver/
[root@jumpserver compose]# ls
config_static docker-compose-lb.yml docker-compose-network.yml down.sh
docker-compose-app.yml docker-compose-mysql-internal.yml docker-compose-redis-internal.yml up.sh
docker-compose-es.yml docker-compose-mysql.yml docker-compose-redis.yml
docker-compose-external.yml docker-compose-network_ipv6.yml docker-compose-task.yml
[root@jumpserver compose]# source /opt/static.env
[root@jumpserver compose]# sh up.sh
Creating network "jms_net" with driver "bridge"
Creating jms_redis ... done
Creating jms_mysql ... done
Creating jms_core ... done
Creating jms_lina ... done
Creating jms_nginx ... done
Creating jms_celery ... done
Creating jms_lion ... done
Creating jms_luna ... done
Creating jms_koko ... done
[root@jumpserver compose]#

【题目 10】skywalking 服务部署与应用[1 分]

使用提供的 OpenStack 私有云平台,申请一台 centos7.9 系统的云主机,使用提供的软件包安装 Elasticsearch 服务和 skywalking 服务,将 skywalking 的 UI 访问端口修改为 8888。接下来再申请一台 CentOS7.9 的云主机,用于搭建 gpmall 商城应用,并配置 SkyWalking Agent,将 gpmall 的 jar 包放置探针并启动。安装与配置完成后提交 skywalking 节点的用户名、密码和 IP 地址到答题框。
1.检查 skywalking 服务部署正确计 1 分

【题目 11】Linux 内核优化[1 分]

在使用 Linux 服务器的时候,TCP 协议规定,对于已经建立的连接,网络双方要进行四次挥手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。因为服务器程序要同时管理大量连接,所以很有必要保证无用的连接完全断开,否则大量僵死的连接会浪费许多服务器资源。创建一台 CentOS7.9 云主机,修改相应的配置文件,分别开启 SYN Cookies;允许将 TIME-WAIT sockets 重新用于新的 TCP连接;开启 TCP 连接中 TIME-WAIT sockets 的快速回收;修改系統默认的 TIMEOUT 时间为 30。完成后提交修改节点的用户名、密码和 IP 地址到答题框。
1.检查内核优化正确计 1 分

1
2
3
4
5
[root@controller ~]# cat /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1 #开启SYN Cookies
net.ipv4.tcp_tw_reuse = 1 #开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_tw_recycle = 1 #开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_fin_timeout = 30 #修改系統默认的 TIMEOUT 时间为 30

【题目 12】排错:Glance 服务排错[1 分]

使用赛项提供的 chinaskill-error1 镜像启动云主机,flavor 使用 4vcpu/12G 内存/100G 硬盘。启动后存在错误的私有云平台,错误现象为查看不到 image 列表,试根据错误信息排查云平台错误,使云平台可以查询到 image 信息。完成后提交云主机节点的用户名、密码和 IP地址到答题框。
1.检查错误镜像 glance 服务启动正确计 1 分

【题目 13】排错:数据库排错[1.5 分]

使用赛项提供的排错镜像 chinaskill-error2 创建一台云主机(云主机的登录用户名为 root,密码为 000000),该云主机中存在错误的数据库服务,错误现象为数据库服务无法启动。请将数据库服务修复并启动,将数据库的密码修改为 chinaskill123。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。
1.检查错误镜像数据库服务启动正确计 1.5 分

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

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

使用 OpenStack 私有云平台,创建 4 台系统为 centos7.9 的云主机,其中一台作为 Ansible的母机并命名为 ansible,另外三台云主机命名为 node1、node2、node3;使用这一台母机,编写 Ansible 脚本(在/root 目录下创建 example 目录作为 Ansible 工作目录,部署的入口文件 命 名 为 cscc_install.yaml ) , 对 其 他 三 台 云 主 机 进 行 安 装 高 可 用 数 据 库 集 群(MariaDB_Galera_cluster,数据库密码设置为 123456)的操作(所需的安装包在 HTTP 服
务中)。完成后提交 Ansible 节点的用户名、密码和 IP 地址到答题框。(考试系统会连接到你的 Ansible 节点,去执行 Ansible 脚本,请准备好 Ansible 运行环境,以便考试系统访问)
1.执行 yaml 文件正确计 0.5 分
2.检查数据库集群部署正确计 1 分
3.检查数据库集群数量为 3 正确计 0.5 分

1
2
3
4
5
6
7
8
9
10
11
[root@jumpserver mariadb-ansible]# cat /etc/ansible/hosts 
[node-1]
node-1
[node-2]
node-2
[node-3]
node-3
[node]
node-1 node_name=node-1
node-2 node_name=node-2
node-3 node_name=node-3
1
2
3
4
5
6
7
8
9
10
11
[root@jumpserver mariadb-ansible]# cat /etc/my.cnf.d/server.cnf 
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://node-1,node-2,node-3"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0
1
2
3
4
5
6
7
8
9
10
11
12
[root@jumpserver mariadb-ansible]# cat local.repo 
[centos]
name=centos
baseurl=http://172.19.25.11/centos
gpgcheck=0
enabled=1

[mariadb]
name=mariadb
baseurl=http://172.19.25.11/gpmall-repo
gpgcheck=0
enabled=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@jumpserver mariadb-ansible]# cat cscc_install.yaml 
---

- hosts: node
tasks:
- name: copy hosts
copy:
src: /etc/hosts
dest: /etc/
- name: stop selinux
shell: setenforce 0
- name: rm repo
shell: rm -rf /etc/yum.repos.d/*
- name: copy repo
copy:
src: /root/mariadb-ansible/local.repo
dest: /etc/yum.repos.d/
- name: install mariadb
yum:
name: mariadb,mariadb-server
- name: start mariadb
service:
name: mariadb
state: started
enabled: true
- name: init_mysql
shell: mysqladmin -uroot password 123456
- name: stop mariadb
service:
name: mariadb
state: stopped
- name: copy server.cnf
copy:
src: /etc/my.cnf.d/server.cnf
dest: /etc/my.cnf.d/

- hosts: node-1
tasks:
- name: start mariadb
shell: galera_new_cluster
- hosts: node-2,node-3
tasks:
- name: start mariadb
service:
name: mariadb
state: started

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

使用赛项提供的 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 脚本,准备好环境,
以便考试系统访问)
1.执行 yaml 文件正确计 0.5 分
2.检查 ELK 服务部署正确计 1.5 分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[root@jumpserver elk-ansible]# cat roles/es/tasks/main.yml 
---

# tasks file for roles/es

- name: 安装java环境
unarchive:
src: openjdk-11.0.1_linux-x64_bin.tar.gz
dest: /usr/local/
- name: 添加环境变量
shell: echo 'export JAVA_HOME=/usr/local/jdk-11.0.1' >> /etc/profile && echo 'export PATH=$PATH:/usr/local/jdk-11.0.1/bin' >> /etc/profile
- name: 生效环境变量
shell: source /etc/profile
- name: 创建es用户
user:
name: es
- name: 传输本地包到目标并解压
unarchive:
src: elasticsearch-7.7.1-linux-x86_64.tar.gz
dest: /opt
- name: mkdir data
shell: mkdir /opt/elasticsearch-7.7.1/data
- name: 更改用户组
shell: chown -R es:es /opt/elasticsearch-7.7.1
- name: 传输配置文件
template:
src: elasticsearch.j2
dest: /opt/elasticsearch-7.7.1/config/elasticsearch.yml
owner: es
group: es
- name: 传输系统配置文件
copy:
src: limits.conf
dest: /etc/security/limits.conf
- name: 传输系统配置文件
copy:
src: sysctl.conf
dest: /etc/sysctl.conf
- name: 加载sysctl
shell: sysctl -p
- name: 启动服务
become: yes
become_user: es
command:
argv:
- nohup
- /opt/elasticsearch-7.7.1/bin/elasticsearch
- -d
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@jumpserver elk-ansible]# cat roles/es/templates/elasticsearch.j2 
cluster.name: elk-cluster
node.name: {{node_name}}
#node.attr.rack: r1
path.data: /opt/elasticsearch-7.7.1/data
path.logs: /opt/elasticsearch-7.7.1/logs
#bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.20.181", "192.168.20.167", "192.168.20.188"]
cluster.initial_master_nodes: ["node-1"]
#gateway.recover_after_nodes: 3
#action.destructive_requires_name: true
1
2
3
4
5
6
7
8
[root@jumpserver elk-ansible]# cat roles/es/files/limits.conf 

* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
[root@jumpserver elk-ansible]# cat roles/es/files/sysctl.conf
vm.max_map_count=655360
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@jumpserver elk-ansible]# cat roles/kibana/tasks/main.yml 
---

# tasks file for roles/kibana

- name: 传输本地文件到目标
unarchive:
src: kibana-7.7.1-linux-x86_64.tar.gz
dest: /opt/
owner: es
group: es
- name: 创建日志与pid目录
shell: mkdir -p /var/log/kibana /run/kibana
- name: 更改用户组
shell: chown -R es:es /var/log/kibana /run/kibana
- name: 传输配置文件
copy:
src: kibana.yml
dest: /opt/kibana-7.7.1-linux-x86_64/config/kibana.yml
- name: chown
shell: chown -R es:es /opt/kibana-7.7.1-linux-x86_64/config/kibana.yml
- name: 启动服务
become: yes
become_user: es
shell: nohup /opt/kibana-7.7.1-linux-x86_64/bin/kibana &
1
2
3
4
5
6
7
[root@jumpserver elk-ansible]# cat roles/kibana/files/kibana.yml 
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.20.181:9200","http://192.168.20.167:9200","http://192.168.20.188:9200"]
i18n.locale: "zh-CN"
pid.file: /run/kibana/kibana.pid
logging.dest: /var/log/kibana/kibana.log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@jumpserver elk-ansible]# cat roles/log/tasks/main.yml 
---

# tasks file for roles/log

- name: 创建日志目录
shell: mkdir /var/log/logstash
- name: 更改权限
shell: chown -R es:es /var/log/logstash
- name: 传输本地文件到目标
unarchive:
src: logstash-7.7.1.tar.gz
dest: /opt
owner: es
group: es
- name: 传输配置文件
template:
src: logstash.yml
dest: /opt/logstash-7.7.1/config/logstash.yml
- name: 传输管道配置文件
template:
src: logstash.conf
dest: /opt/logstash-7.7.1/config/logstash-sample.conf
- name: 更改权限
shell: chown -R es:es /opt/logstash-7.7.1
- name: 启动服务
become: yes
become_user: es
shell: source /etc/profile && sh /opt/logstash-7.7.1/bin/logstash -f /opt/logstash-7.7.1/config/logstash-sample.conf &
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@jumpserver elk-ansible]# cat roles/log/templates/logstash.yml 
http.host: "0.0.0.0"
path.logs: /var/log/logstash/
[root@jumpserver elk-ansible]# cat roles/log/templates/logstash.conf
input {
file {
path => "/var/log/yum.log"
type => "yum_log"
start_position => "beginning"
}
}

#标准输出到elasticsearch中
output {
elasticsearch {
hosts => ["192.168.20.181:9200","192.168.20.167:9200","192.168.20.188:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}