一带一路暨金砖国家技能赛 - 云计算赛项样题
校验: @zelas2xerath
勘误: leancode@189.cn
A模块题目:OpenStack 平台部署与运维
业务场景:
某企业拟使用OpenStack搭建一个企业云平台,用于部署各类企业应用对外对内服务。云平台可实现IT资源池化、弹性分配、集中管理、性能优化以及统一安全认证等。系统结构如下图:
企业云平台的搭建使用竞赛平台提供的两台云服务器,配置如下表:
设备
主机名
接口
IP地址
云服务器1
controller
eth0 eth1
192.168.100.100/24 192.168.200.100/24
云服务器2
compute
eth0 eth1
192.168.100.200/24 192.168.200.200/24
任务1 私有云平台环境初始化( 6 分)
1.配置主机名
把controller节点主机名设置为controller, compute节点主机名设置为compute。 分别在controller节点和compute节点将hostname命令的返回结果提交到答题框。【0.5分】
1 2 hostnamectl set-hostname --static controller hostnamectl set-hostname --static compute
2.配置 hosts 文件
分别在 controller 节点和 compute 节点 修改 hosts 文件将 IP 地址映射为主机名。
请在controller节点将cat /etc/hosts命令的返回结果提交到答题框。 【0.5分】
1 2 3 4 cat >> /etc/hosts <<EOF 192.168.100.100 controller 192.168.100.200 compute EOF
3.挂载光盘镜像
将提供的 CentOS 7 x86_64 DVD 1804.iso 和 bricsskills_cloud_iaas.iso 光盘镜像 移动到 controller 节点 /root 目录下,然后在 /opt 目录下使用命令创建 centos 目录和 iaas 目录,并将镜像文 件 c entOS 7 x86_64 DVD 1804.iso 挂载到 /centos 目录下,将镜像文件bricsskills_cloud_iaas.iso 挂载到 iaas 目录下。
请在 controller 节点 将 ls /opt/ 命令的返回结果提交到 答题框。【 0.5 分】
1 2 3 mkdir /opt/iaas /opt/centosmount /dev/sr0 /opt/iaas/ mount /dev/sr1 /opt/centos/
4.配置 controller 节点 yum 源
将 controller 节点原有的 yum 源移动到 /home 目录, 为 controller 节点创建本地 yum 源,yum 源文件名为 local.repo 。
请将 yum list | grep vsftpd 的返回结果提交到答题框。【 0.5 分】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 mv /etc/yum.repos.d/* /home/touch /etc/yum.repo.d/local.repocat > /etc/yum.repos.d/local.repo <<EOF [centos] name=centos baseurl=file:///opt/centos enable=1 gpgcheck=0 [iaas] name=iaas enable=1 gpgcheck=0 baseurl=file:///opt/iaas/iaas-repo EOF yum clean all yum makecache yum repolist yum list |grep vsftpd
5.搭建 ftp 服务器
在controller 节点上安装 vsftp 服务 , 将 /opt 目录设为共享,并 设置为开机自启动, 然后重启服务生效。
请将 cat /etc/vsftpd/vsftpd.conf |grep /opt 命令的返回结果提交到答题框。【 1 分】
1 2 3 4 5 yum install -y vsftpd cat >> /etc/vsftpd/vsftpd.conf <<EOF anon_root=/opt EOF systemctl enable vsftpd --now
6.配置 compute 节点 yum 源
将compute节点原有的yum源移动到/home目录,为compute节点创建ftp源,yum源文件名为ftp.repo,其中ftp服务器为controller节点,配置ftp源时不要写IP地址。
请将yum list | grep xiandian命令的返回结果提交到答题框【1分】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 mv /etc/yum.repos.d/* /homecat > /etc/yum.repos.d/ftp.repo <<EOF [centos] name=centos enable=1 gpgcheck=0 baseurl=ftp://controller/centos [iaas] name=iaas enable=1 gpgcheck=0 baseurl=ftp://controller/iaas/iaas-repo EOF yum clean all yum makecache yum repolist
7.分区
在compute节点将vdb分为两个区分别为vdb1和vdb2,大小自定义。要求分区格式为gpt,使用mkfs.xfs命令对文件系统格式化。
请将 lsblk -f命令的返回结果提交到答题框【1分】
1 2 3 4 5 6 7 8 parted /dev/vdb mklabel gpt mkpart primary 0% 50% mkpart primary 50% 100% mkfs.xfs /dev/vdb1 mkfs.xfs /dev/vdb2 lsblk -f
8.系统调优 脏数据回写
Linux 系统内存中会存在脏数据,一般系统默认脏数据占用内存 30 时会回写磁盘,修改系统配置文件,要求将回写磁盘的 大小调整为 60 。在 controller 节点 请将 sysctl p 命令的返回结果提交到答题框。【 1 分】
1 2 echo 'vm.dirty_ratio = 60' >> /etc/sysctl.confsysctl -p
任务 2 OpenStack 搭建任务 8 分
1.修改脚本文件
在 controller 节点和 compute 节点分别安装 iaas-xiandian 软件包,修改脚本文件基本变量(脚本文件为 /etc/xiandian/openrc.sh 修改完成后使用命令生效该 脚本文件。
在 controller 节点 请将 echo $INTERFACE_NAME
命令的返回结果提交到答题框。【 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 HOST_IP =192.168 .100.100 HOST_PASS =000000 HOST_NAME =controllerHOST_IP_NODE =192.168 .100.200 HOST_PASS_NODE =000000 HOST_NAME_NODE =computenetwork_segment_IP =192.168 .100.0 /24 RABBIT_USER =openstackRABBIT_PASS =000000 DB_PASS =000000 DOMAIN_NAME =demoADMIN_PASS =000000 DEMO_PASS =000000 KEYSTONE_DBPASS =000000 GLANCE_DBPASS =000000 GLANCE_PASS =000000 NOVA_DBPASS =000000 NOVA_PASS =000000 NEUTRON_DBPASS =000000 NEUTRON_PASS =000000 METADATA_SECRET =000000 INTERFACE_IP =192.168 .200.100 INTERFACE_NAME =ens33Physical_NAME =providerminvlan =101 maxvlan =200 CINDER_DBPASS =000000 CINDER_PASS =000000 BLOCK_DISK =vdb1SWIFT_PASS =000000 OBJECT_DISK =vdb2STORAGE_LOCAL_NET_IP =192.168 .100.200 HEAT_PASS =000000 ZUN_DBPASS =000000 ZUN_PASS =000000 KURYR_DBPASS =000000 KURYR_PASS =000000 CEILOMETER_DBPASS =000000 CEILOMETER_PASS =000000 AODH_DBPASS =000000 AODH_PASS =000000 BARBICAN_DBPASS =000000 BARBICAN_PASS =000000
1 2 3 source /etc/xiandian/openrc.shecho $INTERFACE_NAME ens33
2.修改脚本文件
在 compute 节点配置 /etc/xiandian/openrc.sh 文件 ,根据环境情况修改参数,块存储服务的后端使用第二块硬盘的第一个分区,生效该参数文件 。
请将echo $INTERFACE_IP && echo $BLOCK_DISK
命令的返回结果提交到答题框。【0.5分】
1 2 3 echo $INTERFACE_IP && echo $BLOCK_DISK 192.168.100.200 vdb1
3.安装openstack包
分别在controller节点和compute节点执行iaas-pre-host.sh文件(不需要重启云主机)。
在controller节点请将openstack --version
命令的返回结果提交到答题框。【 1 分】
1 2 iaas-pre-host.sh openstack --version
4.搭建数据库组件
在controller 节点执行 iaas-install-mysql.sh 脚本, 会自行安装 mariadb 、 memcached 、rabbitmq 等服务和完成相关配置。执行完成后修改配置文件将缓存 CACHESIZE 修改为 128,并重启相应服务 。
请将 ps aux|grep memcached
命令的返回结果提交到答题框。【 1 分】
1 2 3 4 iaas-install-mysql.sh sed -i 's/64/128/g' /etc/sysconfig/memcached systemctl restart memcached ps aux|grep memcached
5.搭建认证服务组件
在 controller 节点 执行 iaas-install-keystone.sh 脚本,会自行安装 keystone 服务 和 完成相关配置。使用 openstack 命令, 创建一个名为 tom 的账户,密码为 tompassword123, 邮箱为 tom@example.com
。
请将 openstack user list 命令的返回结果提交到答题框。【 1 分】
1 2 3 iaas-install-keystone.sh source /etc/keystone/admin-openrc.shopenstack user create --email tom@example.com --password tompassword123 --domain demo tom
1 2 3 4 5 6 7 8 openstack user list +----------------------------------+-------+ | ID | Name | +----------------------------------+-------+ | 0f024f8839b242dd80534e51fe4bd13f | admin | | 257f9516cac94ca0a191a27b0e56fa37 | demo | | 70f3fccf5f164331b6e688b14d1037d7 | tom | +----------------------------------+-------+
6.搭建镜像服务组件
在 controller 节点 执行 iaas-install-glance.sh 脚本, 会 自行安装 glance 服务和完成相关配置。完成后使用 openstack 命令创建一个名为 cirros 的镜像,镜像文件使用 cirros-0.3.0-x86_64-disk.img 。
请将 openstack image show cirros 命令 的返回结果提交到答题框。【 1 分】
1 2 iaas-install-glance.sh openstack image create --container-format bare --disk-format qcow2 --file cirros-0.3.0-x86_64-disk.img cirros
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 openstack image show cirros +------------------+------------------------------------------------------+ | Field | Value | +------------------+------------------------------------------------------+ | checksum | 50bdc35edb03a38d91b1b071afb20a3c | | container_format | bare | | created_at | 2020-04-04T02:13:37Z | | disk_format | qcow2 | | file | /v2/images/bab32212-e303-4de3-b0b4-e438665db844/file | | id | bab32212-e303-4de3-b0b4-e438665db844 | | min_disk | 0 | | min_ram | 0 | | name | cirros | | owner | f4157a956a6840dbb77f22554c4f1e9c | | protected | False | | schema | /v2/schemas/image | | size | 9761280 | | status | active | | tags | | | updated_at | 2020-04-04T02:13:37Z | | virtual_size | None | | visibility | shared | +------------------+------------------------------------------------------+
7.搭建计算服务组件
在 controller 节点执行 iaas-install-nova-controller.sh compute 节点执行 iaas-install-nova-compute.sh ,会自行安装 nova 服务和完成相关配置。使用 nova 命令创建一个名为 t,ID 为 5 ,内存为 2048MB, 磁盘容量为 10GB,vCPU 数量为 2 的云主机类型。
在 controller 节点 请将 nova flavor show t 命令的返回结果提交到答题框。【 1 分】
controller
1 2 iaas-install-nova-controller.sh nova flavor-create t 5 2048 10 2
compute
1 iaas-install-nova-compute.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 nova flavor-show t +----------------------------+-------+ | Property | Value | +----------------------------+-------+ | OS-FLV-DISABLED:disabled | False | | OS-FLV-EXT-DATA:ephemeral | 0 | | description | - | | disk | 10 | | extra_specs | {} | | id | 5 | | name | t | | os-flavor-access:is_public | True | | ram | 2048 | | rxtx_factor | 1.0 | | swap | | | vcpus | 2 | +----------------------------+-------+
8.搭建网络组件并初始化网络
在 controller 节点执行 iaas-install-neutron-controller.sh ,compute 节点执行 iaas-install-neutron-compute.sh ,会自行安装 neutron 服务并完成配置。创建云主机外部网络 ext-net ,子网为 ext-subnet ,云主机浮动 IP 可用网段为 192.168.10.100~192.168.10.200 网关为 192.168.100.1 。
在 controller 节点 请 将 openstack subnet show ext-subnet 命令 的 返回结果提交到答题框。【 1 分】
controller
1 2 3 iaas-install-neutron-controller.sh openstack network create ext-net --external openstack subnet create ext-subnet --network ext-net --gateway 192.168.100.1 --subnet-range 192.168.10.0/24 --allocation-pool start=192.168.10.100,end=192.168.10.200
compute
1 iaas-install-neutron-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 openstack subnet show ext-subnet +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | allocation_pools | 192.168.10.100-192.168.10.200 | | cidr | 192.168.10.0/24 | | created_at | 2020-04-04T02:30:16Z | | description | | | dns_nameservers | | | enable_dhcp | True | | gateway_ip | 192.168.100.1 | | host_routes | | | id | a82d808b-7cf7-430e-8573-5ced16c62f5f | | ip_version | 4 | | ipv6_address_mode | None | | ipv6_ra_mode | None | | name | ext-subnet | | network_id | 625fe270-669f-449e-af14-dadeef733b9e | | project_id | f4157a956a6840dbb77f22554c4f1e9c | | revision_number | 0 | | segment_id | None | | service_types | | | subnetpool_id | None | | tags | | | updated_at | 2020-04-04T02:30:16Z | +-------------------+--------------------------------------+
9.搭建形化界面
在 controller 节点执行 iaas-install-dashboard.sh 脚本, 会自行安装 dashboard 服务并完成配置。请修改 nova 配置文件,使之能通过公网 IP 访问 dashboard 首页。
在 controller 节点 请将 curl http://EIP/dashboard -L
命令 的返回结果提交到答题框。【 1 分】
1 2 iaas-install-dashboard.sh curl http://192.168.100.200/dashboard -L
任务 3 OpenStack 运维任务( 13 分)
某公司构建了一套内部私有云系统,这套私有云系统将为公司内部提供计算服务。你将
作为该私有云的维护人员,请完成以下运维工作。
1.安全组管理
使用命令创建名称为 group_web 的安全组该安全组的描述为 Custom security group 用 openstack 命令为安全组添加 icmp 规则和 ssh 规则 允许任意 ip 地址访问 web 完成后查看该安全组的详细信息
将 openstack security group show group_web 命令 的 返回结果提交到答题框。【 1 分】
1 2 3 4 openstack security group create group_web --description "Custom security group" openstack security group rule create --protocol icmp --ingress group_web openstack security group rule create --ingress --protocol tcp --dst-port 22:22 group_web openstack security group show group_web
2.项目管理
在 keystone 中创建 shop 项目添加描述为 “Hello shop” ,完成后使用 openstack 命令禁用该项目 。
请将 openstack project show shop 命令的返回结果提交到答题框。【 1 分】
1 2 openstack project create shop --description "Hello shop" --domain demo openstack project set shop --disable --domain demo
1 2 3 4 5 6 7 8 9 10 11 12 13 openstack project show shop +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Hello shop | | domain_id | 000a54d41fc046499b0d8b181974c54d | | enabled | False | | id | edc71a9e411c4feea307699b4b9b1e41 | | is_domain | False | | name | shop | | parent_id | 000a54d41fc046499b0d8b181974c54d | | tags | [] | +-------------+----------------------------------+
3.用户管理
使用 nova 命令查看 admin 租户的当前配额值,将 admin 租户的实例配额提升到 13 。
请将 nova quota-class show admin 命令的返回结果提交到答题框。【 1 分】
1 nova quota-class-update --instances 13 admin
1 2 3 4 5 6 7 8 9 10 11 12 nova quota-class-show admin +----------------------+-------+ | Quota | Limit | +----------------------+-------+ | instances | 13 | | cores | 20 | | ram | 51200 | | metadata_items | 128 | | key_pairs | 100 | | server_groups | 10 | | server_group_members | 10 | +----------------------+-------+
4.镜像管理
登录 controller 节点 ,使用 glance 相关命令上传镜像,源使用 CentOS_7.5_x86_64_XD.qcow2 ,名字为 centos7.5 ,修改这个镜像为共享状态并设置最小磁盘 为 5G 。
请将 glance image-list 命令的返回结果提交到答题框。【 1 分】
1 glance image-create --name centos7.5 --disk-format qcow2 --container-format bare --min-disk 5 --progress < /opt/iaas/images/CentOS_7.5_x86_64_XD.qcow2
1 2 3 4 5 6 7 glance image-list +--------------------------------------+-----------+ | ID | Name | +--------------------------------------+-----------+ | c0e2026e-acc7-4bf3-9c46-6223fefb299c | centos7.5 | | bab32212-e303-4de3-b0b4-e438665db844 | cirros | +--------------------------------------+-----------+
5.后端配置文件管理
请修改 glance 后端配置文件, 将项目的映像存储限制为 10GB 完成后重启 glance 服务。
请将 cat /etc/glance/glance-api.conf |grep user_storage
命令的返回结果提交到答题框。【 1分】
1 2 3 sed -i 's/#user_storage_quota=/user_storage_quota=10737418240/g' /etc/glance/glance-api.conf systemctl restart *glance* cat /etc/glance/glance-api.conf |grep user_storage
6.存储服务管理
在 controller 节点执行 iaas-install-cinder-controller.sh , compute 节点 执行 iaas-install-cinder-compute.sh ,在 controller 和 compute 节点上会自行安装 cinder 服务并完成配置。 创建一个名为 lvm 的卷类型, 创建该类型规格键值对,要求 lvm 卷类型对应 cinder 后端驱动 lvm 所管理的存储资源名字 lvm_test ,大小 1G 的云硬盘并查询该云硬盘的详细信息。
请将 cinder show lvm_test命令的返回结果提交到答题框。【1分】
controller
1 2 3 iaas-install-cinder-controller.sh openstack volume type create lvm openstack volume create --type lvm --size 1 lvm_test
compute
1 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 23 24 25 26 27 28 29 30 cinder show lvm_test +--------------------------------+--------------------------------------+ | Property | Value | +--------------------------------+--------------------------------------+ | attached_servers | [] | | attachment_ids | [] | | availability_zone | nova | | bootable | false | | consistencygroup_id | None | | created_at | 2020-04-04T05:29:27.000000 | | description | None | | encrypted | False | | id | 34b82874-b96e-47de-8aa6-b94a653dbe44 | | metadata | | | migration_status | None | | multiattach | False | | name | lvm_test | | os-vol-host-attr:host | None | | os-vol-mig-status-attr:migstat | None | | os-vol-mig-status-attr:name_id | None | | os-vol-tenant-attr:tenant_id | f4157a956a6840dbb77f22554c4f1e9c | | replication_status | None | | size | 1 | | snapshot_id | None | | source_volid | None | | status | error | | updated_at | 2020-04-04T05:29:27.000000 | | user_id | 0f024f8839b242dd80534e51fe4bd13f | | volume_type | lvm | +--------------------------------+--------------------------------------+
7.数据库管理
请使用数据库命令将所有数据库进行备份备份文件名为 openstack. sql ,完成后使用命令查看文件属性其中文件大小以 mb 显示。
请将 du -h openstack.sql
命令的返回结果提交到答题框。【1分】
1 2 mysqldump -uroot -p000000 --opt --all-databases > openstack.sql du -h openstack.sql
8.数据库管理
进入数据库,创建本地用户 examuser ,密码为 000000 ,然后查询 mysql 数据库中的 user 表的 user,host,password 字段。 然后赋予这个用户所有数据库的查询删除更新创建的权限。
请将 select user,host,password from user;
命令的返回结果提 交到答题框【 1 分】
1 2 3 4 insert into mysql.user(host,user ,password) values ("localhost","examuser",password("000000"));use mysql; grant select ,delete ,update ,create on * .* to examuser@'localhost' identified by '000000' ;select host,user ,password from user ;
9.存储管理
请使用 openstack 命令创建一个名为 test 的 cinder 卷,卷大小为 5G 。完成后使用 cinder 命令列出卷列表并查看 test 卷的详细信息。
请将 cinder list 命令的返回结果提交到答题框。【 1 分】
1 2 openstack volume create test --type lvm --size 5 cinder list
1 2 3 4 5 6 7 cinder list +--------------------------------------+--------+----------+------+-------------+----------+-------------+ | ID | Status | Name | Size | Volume Type | Bootable | Attached to | +--------------------------------------+--------+----------+------+-------------+----------+-------------+ | 34b82874-b96e-47de-8aa6-b94a653dbe44 | error | lvm_test | 1 | lvm | false | | | e06df5d4-5510-4855-8b84-95ef7a39fcbe | error | test | 5 | lvm | false | | +--------------------------------------+--------+----------+------+-------------+----------+-------------+
10.存储管理
为了减缓来自实例的数据访问速度的变慢, OpenStack Block Storage 支持对卷数据复制带宽的速率限制。 请修改 cinder 后端配置文件将卷复制带宽限制为最高 100 MiB/s 。
请将 cat /etc/cinder/cinder.conf |grep volume_copy
命令的返回结果提交到答题框。【 1 分】
1 2 3 sed -i 's/#volume_copy_bps_limit = 0/volume_copy_bps_limit = 104857600/g' /etc/cinder/cinder.conf systemctl restart *cinder* cat /etc/cinder/cinder.conf |grep volume_copy
11.存储管理
在 controller 节点执行 iaas-install-swift-controller.sh , compute 节点执行 iaas-install-swift-compute.sh ,在 controller 和 compute 节点上会自行安装 swift 服务并完成配置。创建一个名为 file 的容器。
请将 swift stat file 命令的返回结果提交到答题框【1分】
controller
1 2 iaas-install-swift-controller.sh swift post file
compute
1 iaas-install-swift-compute.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 > swift stat file Account: AUTH_f4157a956a6840dbb77f22554c4f1e9c Container: file Objects: 0 Bytes: 0 Read ACL: Write ACL: Sync To: Sync Key: Accept-Ranges: bytes X-Storage-Policy: Policy-0 Last-Modified: Tue, 04 Apr 2020 06:01:01 GMT X-Timestamp: 1680588060.62390 X-Trans-Id: txd95c541987884cfbbaafc-00642bbd29 Content-Type: application/json; charset=utf-8 X-Openstack-Request-Id: txd95c541987884cfbbaafc-00642bbd29
12.存储管理
用 swift命令,把 cirros-0.3.4-x86_64-disk.img上传到 file容器中。 请将 swift list file 命令 的返回 结果提交到答题框【 1 分】
1 2 swift upload file cirros-0.3.4-x86_64-disk.img swift list file
13.添加控制节点资源到云平台
修改 openrc.sh中的内容,然后在 controller 节点执行 iaas-install-nova-compute.sh ,把 controller 节点的资源添加到云平台。
请将 openstack compute service list 命令 的返回 结果提交到答题框【 1 分】
1 2 3 4 5 vim /etc/xiandian-iaas/openrc.sh HOST_NAME_NODE=controller HOST_IP_NODE=172.17.2.10 source /etc/xiandian-iaas/openrc.shiaas-install-nova-compute.sh
1 2 3 4 5 6 7 8 9 10 openstack compute service list +----+------------------+------------+----------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+------------------+------------+----------+---------+-------+----------------------------+ | 1 | nova-scheduler | controller | internal | enabled | up | 2020-04-04T06:07:51.000000 | | 2 | nova-consoleauth | controller | internal | enabled | up | 2020-04-04T06:07:51.000000 | | 3 | nova-conductor | controller | internal | enabled | up | 2020-04-04T06:07:49.000000 | | 7 | nova-compute | compute | nova | enabled | up | 2020-04-04T06:07:47.000000 | | 8 | nova-compute | controller | nova | enabled | up | 2020-04-04T06:07:51.000000 | +----+------------------+------------+----------+---------+-------+----------------------------+
任务四 OpenStack 架构 任务 3 分
公司内部拥有一套私有云系统,为了调试该私有云,需要编写一些测试用脚本进行功能性测试,作为公司私有云维护人员请你完成以下工作。
1.创建浮动IP
请使用 openstack 命令创建一个浮动 IP 地址,完成后使用 openstack 命令查看该浮动 IP 的 id ,请编写一个名为 floating_show.sh 的脚本,该脚本 $1
变量为浮动 ip 的 id ,对接 neutron 服务端点获取该浮动 IP 的详细信息。脚本使用 curl 向 api 端点传递参数,为了兼容性考虑不得出现 openstack 命令。
请将 floating_show.sh 中 部分替换为正 常内容并 提交到答题框【 1.5 分】
1 2 3 4 5 6 7 8 9 10 openstack floating ip create ext-net openstack floating ip show <ip> curl -v -s -X POST $OS_AUTH_URL /auth/tokens?nocatalog -H "Content-Type: application/json" -d '{ "auth": { "identity": { "methods": ["password"],"password": {"user": {"domain": {"name": "' "$OS_USER_DOMAIN_NAME " '"},"name": "' "$OS_USERNAME " '", "password": "' "$OS_PASSWORD " '"} } }, "scope": { "project": { "domain": { "name": "' "$OS_PROJECT_DOMAIN_NAME " '" }, "name": "' "$OS_PROJECT_NAME " '" } } }}' \ | python -m json.tool export OS_TOKEN=<X-Subject-Token:>neutron floatingip-list neatron floatingip-show <ip>
floating_show.sh
1 2 $1 = 15991162-9175-4aa7-a0ea-d2be78e755cbcurl -g -i -X GET http://controller:9696/v2.0/floatingips/$1 -H "User-Agent: python-neutronclient" -H "Accept: application/json" -H "X-Auth-Token: $OS_TOKEN "
2.删除浮动IP
请编写脚本 floating_delete.sh ,完成浮动 IP 的删除。设置一个 $1
变量,当用户向 $1
传递一个浮动 IP 的 id ,即可完成该浮动 IP 的删除。脚本使用 curl 向 api 端点传递参数,为了兼容性考虑不得出现 openstack 命令。
请将 floating_show.sh中*部分替换为正常内容并提交到答题框【1.5分】
floating_delete.sh
1 2 echo $1 curl -g -i -X DELETE http://controller:9696/v2.0/floatingips/$1 -H "User-Agent: python-neutronclient" -H "Accept: application/json" -H "X-Auth-Token: $OS_TOKEN "
B模块题目:容器的编排与运维
某企业计划使用 k8s 平台搭建微服务系统,现在先使用简单的微服务项目进行测试,请按照要求完成相应任务。
设备名称
主机名
接口
IP 地址
云服务器1
master
eth0
私网IP: 192.168.100.*./24
云服务器2
node1
eth0
私网IP: 192.168.100.*./24
云服务器3
node2
eth0
私网IP: 192.168.100.*./24
云服务器4
harbor
eth0
私网IP: 192.168.100.*./24
任务 1 容器云平台环境初始化( 10 分)
1.容器云平台的初始化
master 节点主机名设置为 master 、 node1 节点 主机名设置为 node1 、 node2 节点 主机名设置为 node2 、 harbor 节点 主机名设置为 harbor, 所有节点关闭 swap ,并配置 hosts 映射。
请在 master 节点将free –m 命令的返回结果提交到答题框。【1分】
ALL
1 2 3 4 5 6 7 8 9 10 11 12 hostnamectl set-hostname --static master hostnamectl set-hostname --static node1 hostnamectl set-hostname --static node2 hostnamectl set-hostname --static harbor swapoff -a cat >> /etc/hosts <<EOF 192.168.100.110 master 192.168.100.120 node1 192.168.100.130 node2 192.168.100.140 harbor EOF free -m
2.Yum 源数据的持久化挂载
将提供的 CentOS-7-x86_64-DVD-1804.iso 和 bricsskills_cloud_paas.iso 光盘镜像文件移动到 master 节点 /root 目录下,然后在 /opt 目录下使用命令创建 centos 目录和 paas 目录,并将镜像文件 CentOS-7-x86_64-DVD-1804.iso 永久挂载到 centos 目录下,将镜像文件 chinaskills_cloud_paas.iso 永久挂载到 / paas 目录下。
请在 master 节点 将 df -h
命令 的返回结果提交到答题框。【 1 分】
master
1 2 3 4 5 6 mkdir /opt/centos /opt/paascat >> /etc/rc.local <<EOF mount -o /root/CentOS-7-x86_64-DVD-1804.iso /opt/centos mount -o /root/chinaskills_cloud_paas.iso /opt/paas EOF df -h
3.Yum 源的编写
在 master 节点首先将系统自带的 yum 源移动到 /home 目录,然后 为 master 节点配置本地 yum 源, yum 源文件名为 local.repo 。
请将 yum list | grep docker
命令的返回结果提交到答题框。【1分】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mv /etc/yum.repos.d/* /homecat > /etc/yum.repos.d/local.repo <<EOF [centos] name=centos baseurl=file:///opt/centos enable=1 gpgcheck=0 [k8s] name=k8s baseurl=file:///opt/paas/kubernetes-repo/ enable=1 gpgcheck=0 EOF yum clean all yum makecache yum repolist yum list | grep docker
4.Yum 源的编写
在 master 节点安装 ftp 服务,将 ftp 共享 目录设置为 /opt 。
请将 curl -l ftp://IP
命令的返回结果提交到答题框。【1分】
1 2 3 4 5 6 7 8 yum install -y vsftpd cat >> /etc/vsftpd/vsftpd.conf <<EOF anon_root=/opt EOF systemctl enable vsftpd --now systemctl disable firewalld --now setenforce 0 curl -l ftp://192.168.100.110
5.Yum 源的编写
为 node1 节点和 node2 节点分别配置 ftp 源 yum 源文件名称为 ftp.repo 其中 ftp 服务器地址为 master 节点 配置 ftp 源时不要写 IP 地址,配置之后,两台机器都安装 kubectl 包作为安装测试。
在 node1节点请将 yum list | grep kubectl
命令的返回结果提交到答题框。【2分】
node
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 mv /etc/yum.repos.d/* /mediacat > /etc/yum.repos.d/ftp.repo <<EOF [centos] name=centos baseurl=ftp://master/centos enable=1 gpgcheck=0 [k8s] name=k8s baseurl=ftp://master/paas/kubernetes-repo/ enable=1 gpgcheck=0 EOF yum clean all yum makecache yum repolist yum list | grep kubectl yum install -y kubectl
6.设时间同步服务器
在 master 节点上部署 chrony 服务器,允许其它节点同步时间,启动服务并设置为开机自启动; 在其他节点上指定 master 节点为上游 NTP 服务器,重启服务并设为开机自启动。
在 node1 节点将 chronyc sources
命令的返回结果提交到答题框。【 2 分】
master
1 2 3 4 5 6 7 yum install -y chrony cat >> /etc/chrony.conf <<EOF server master iburst allow 192.168.100.0/24 local stratum 10 EOF systemctl enable chronyd --now
node & harbor
1 2 3 4 cat >> /etc/chrony.conf <<EOF server master iburst EOF chronyc sources
7.设置免密登录
为四台服务器设置免密登录 ,保证服务器之间能够互相免密登录。
在 master 节点将 ssh node1
命令的返回结果提交到答题框。【 2 分】
master
1 2 3 4 5 ssh-keygen ssh-copy-id root@node1 ssh-copy-id root@node2 ssh-copy-id root@harbor ssh node1
任务 2 k8s 搭建任务 15 分
1.安装 docker 应用
在所有节点上安装 dokcer-ce, 并设置为开机自启动。
在 master 节点 请将 docker version
命令的返回结果提交到答题框。【 1 分】
ALL
1 2 3 yum install docker-ce -y systemctl enable docker --now docker version
2.安装 docker 应用
所有节点配置阿里云镜像加速地址 https://5twf62k1.mirror.aliyuncs.com
并把启动引擎设置为 systemd ,配置成功重启 docker 服务。
请将 json 文件中 的内容提交到答题框。【 1 分】
ALL
1 2 3 4 5 6 7 8 cat > /etc/docker/daemon.json <<EOF { "registry-mirrors":["https://5twf62k1.mirror.aliyuncs.com"], "exec-opts":["native.cgroupdriver=systemd"] } EOF systemctl daemon-reload systemctl restart docker
3.安装 docker compose
在 Harbor 节点创建目录 /opt/paas 并把 bricsskills_cloud_paas.iso ,挂载到 /opt/paas 目录下,使用 /opt/paas/docker-compose/v1.25.5-docker-compose-Linux-x86_64 文件安装 docker compose 。安装完成后 执行 docker compose version
命令。
请将 docker compose version 命令返回结果提交到答题框。【 1 分】
1 2 3 4 mkdir /opt/paasmount -o bricsskills_cloud_paas.iso /opt/paas cp /opt/paas/docker-compose/v1.25.5-docker-compose-Linux-x86_64 /usr/bin/docker-composedocker-compose version
4.搭建 horbor 仓库
在 Harbor 节点使用 /opt/paas/harbor/harbor-offline-installer-v2.1.0.tgz 离线安装包,安装 harbor 仓库,并修改各节点默认 docker 仓库为 harbor 仓库地址 。
在 master 节点请将 docker login harbor private ip 命令 的返回结果提交到答题框。【1分】
harbor
1 2 3 4 5 6 7 cp /opt/paas/harbor/harbor-offline-installer-v2.1.0.tgz .tar -zxvf /opt/paas/harbor/harbor-offline-installer-v2.1.0.tgz cd harbormv harbor.yml.tmpl harbor.ymlvim harbor.yml ./install.sh
ALL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 modprobe br_netfilter echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confecho "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.confecho "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.confsysctl -p cat > /etc/docker/daemon.json <<EOF { "insecure-registries": ["192.168.100.140"], "registry-mirrors":["https://5twf62k1.mirror.aliyuncs.com"], "exec-opts":["native.cgroupdriver=systemd"] } EOF systemctl daemon-reload systemctl restart docker docker login 192.168.100.140
5.上传 docker 镜像
在 master 节点使用命令将 /opt/paas/images 目录下所有镜像导入本地 。 然后使用 /opt/paas/k8s_image_push.sh 将所有镜像上传至 docker 仓库 。
在 master 节点 请将 docker images | grep wordpress
命令的返回结果提交到答题框。【 1 分】
1 2 3 4 5 cd /opt/paas/images for i in `ls `;do docker image load -i $i ;done ;cd .../k8s_image_push.sh docker images | grep wordpress
6.安装 kubeadm 工具
在 master 节点、node1 节点、node2 节点分别安装 Kubeadm 工具 并设置 为 开机自启动 。
在 master 节点 请将 kubeadm version
命令的返回结果提交到答题框。【 1 分】
1 2 3 yum install kubeadm -y systemctl enable kubelet --now kubeadm version
7.初始化 master 节点
使用 kubeadm 命令生成 yaml 文件,并修改 yaml 文件 ,设置 kubernetes 虚拟内部网段地址为 10.244.0.0/16 通过该 yaml 文件初始化 master 节点 然后使用 kube-flannel.yaml 完成控制节点初始化设置。
在 master 节点的 kube-flannel.yaml 执行前 将 kubectl get nodes
命令的返回结果提交到答题框。【 1 分】
master
1 2 3 4 5 6 7 kubeadm init --kubernetes-version=1.18.1 --apiserver-advertise-address=192.168.100.110 --image-repository 192.168.100.140/library --pod-network-cidr=10.244.0.0/16 mkdir -p $HOME /.kubesudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/configsudo chown $(id -u):$(id -g) $HOME /.kube/configkubectl get pod -n kube-system -owide kubectl get nodes
node
1 2 kubeadm join 192.168.100.110:6443 --token l616jt.p5w90k5l0ggzvb0a \ --discovery-token-ca-cert-hash sha256:a06d174657ac8c4a46e9a5e18608712a94308741fa0f448e015afe4e14f09820
8.删除污点
使用命令删除 master 节点的污点,使得 Pod 也可以调度到 master 节点上。
在 master 节点 请将 kubectl get nodes -o yaml master | grep -A10 spec
命令的返回结果提交到答题框。【 1 分】
1 2 kubectl taint nodes master node-role.kubernetes.io/master- kubectl get nodes -o yaml master | grep -A10 spec
9.安装 kubernetes 网络插件
使用 kube-flannel.yaml 安装 kubernetes 网络插件,安装完成后使用命令查看节点状态。
在 master 节点请将 kubectl get nodes 命令的返回结果提交到答题框。【1分】
master
1 2 3 sed -i "s/quay.io\/coreos/192.168.100.140\/library/g" /opt/paas/yaml/flannel/kube-flannel.yaml kubectl apply -f /opt/paas/yaml/flannel/kube-flannel.yaml kubectl get nodes
10.给 kubernetes 创建证书
在 master节点请将 kubectl get csr
命令的返回结果提交到答题框。【2分】
1 2 3 4 5 6 mkdir dashboard-certscd dashboard-certs/openssl genrsa -out dashboard.key 2048 openssl req -days 36000 -new -out dashboard.csr -key dashboard.key -subj '/CN=dashboard-cert' openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
11.kubernetes 图形化界面的安装
使用 recommended.yaml 和 dashboard-adminuser.yaml 安装 kubernetes dashboard 界面,完成后查看首页 。
请将 kubectl get pod,svc -n kubernetes dashboard
命令的返回结果提交到答题框。【 2 分】
1 2 3 4 5 6 kubectl create namespace kubernetes-dashboard kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard sed -i "s/kubernetesui/192.168.100.140\/library/g" /opt/paas/yaml/dashboard/recommended.yaml kubectl apply -f /opt/paas/yaml/dashboard/recommended.yaml kubectl apply -f /opt/paas/yaml/dashboard/dashboard-adminuser.yaml kubectl get pod,svc -n kubernetes-dashboard
1 2 3 kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}' )
12.扩展计算节点
在 node1 节点和 node2 节点分别 使用 kubeadm config 命令生成 yaml 文件,并通过 yaml文件 将 node 节点加入 kubernetes 集群。完成后在 master 节点上查看所有节点状态。
在 master 节点请将 kubectl get nodes
命令的返回结果提交到答题框。【2分】
任务 3 EFK 日志平台构建 15 分
1.导入镜像
将提供的 efk-img.tar.gz 压缩包中的镜像导入到 master 节点,并使用命令将镜像上传至 haboor 镜像仓库中。
在 master 节点将 docker images | grep elasticsearch
命令的返回结果 提交到答题框。 【 1 分】
1 docker images | grep elasticsearch
2.NFS 配置
在 master 节点、 node1 节点、 node2 节点分别安装 nfs 服务, master 节点作为服务端,把 /data/volume1 目录作为共享目录,只允许 192.168.100 网段访问。
在master 节点,将 showmount -e
命令的返回结果提交到 答题框。【 1 分】
1 2 3 4 5 6 7 8 yum install -y nfs-utils cat > /etc/exports <<EOF /data/volume1 192.168.100.0/24(rw,sync,no_subtree_check,no_root_squash) EOF systemctl enable rpc-bind.service nfs systemctl restart rpc-bind.service nfs exportfs -rv showmount -e
3.RBAC 配置
在 master 节点,编写 sa.yaml ,创建名称为 nfs-provisioner 的 SA 账号。
将 kubectl get serviceaccounts -n kube-logging
命令的返回结果提交到答题框。【1分】
sa.yaml
1 2 3 4 5 6 --- apiVersion: v1 kind: ServiceAccount metadata: name: nfs-provisioner namespace: kube-logging
1 2 kubectl apply -f sa.yaml kubectl get serviceaccounts -n kube-logging
4.RBAC 配置
编写 rbac.yaml ,对创建的 sa 账号进行 RBAC 授权,基于 yaml 文件创建完成后使用命令分别查看 sa 账号和 rbac 授权信息。
将 kubectl get roles.rbac.authorization.k8s.io
命令的返回结果提交到答题框 。【 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 47 48 49 50 51 52 53 54 55 56 57 --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: nfs-provisioner-runner rules: - apiGroups: ["" ] resources: ["persistentvolumes" ] verbs: ["get" ,"list" ,"watch" ,"create" ,"delete" ] - apiGroups: ["" ] resources: ["persistentvolumeclaims" ] verbs: ["get" ,"list" ,"watch" ,"update" ] - apiGroups: ["storage.k8s.io" ] resources: ["storageclasses" ] verbs: ["get" ,"list" ,"watch" ] - apiGroups: ["" ] resources: ["events" ] verbs: ["get" ,"list" ,"watch" ,"create" ,"update" ,"patch" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: run-nfs-provisioner subjects: - kind: ServiceAccount name: nfs-provisioner namespace: kube-logging roleRef: kind: ClusterRole name: nfs-provisioner-runner apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: leader-locking-nfs-provisioner rules: - apiGroups: ["" ] resources: ["endpoints" ] verbs: ["get" ,"list" ,"watch" ,"create" ,"update" ,"patch" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: leader-locking-nfs-provisioner subjects: - kind: ServiceAccount name: nfs-client-provisioner namespace: kube-logging roleRef: kind: Role name: leader-locking-nfs-provisioner apiGroup: rbac.authorization.k8s.io
1 2 kubectl apply -f rbac.yaml kubectl get roles.rbac.authorization.k8s.io
5.StorageClass动态绑定
编写 nfs-deploy.yaml 文件,基于 nfs-client-provisioner 镜像创建 nfs-provisioner 的 deployment 对象 ,绑定 nfs 服务端的共享目录。
将 kubectl get pods
命令的返回结果提交到答题框。 【 1 分】
nfs-deploy.yaml
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 --- apiVersion: apps/v1 kind: Deployment metadata: name: nfs-provisioner namespace: kube-logging spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: nfs-provisioner template: metadata: labels: app: nfs-provisioner spec: serviceAccountName: nfs-provisioner containers: - name: nfs-provisioner image: 192.168 .100 .140 /library/nfs-client-provisioner imagePullPolicy: IfNotPresent volumeMounts: - name: nfs-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: nfs-provisioner - name: NFS_SERVER value: 192.168 .100 .110 - name: NFS_PATH value: /data/volume1 volumes: - name: nfs-root nfs: server: 192.168 .100 .110 path: /data/volume1
1 2 kubectl apply -f nfs-deploy.yaml kubectl get pods
6.StorageClass动态绑定
编写 storageclass.yaml 文件,创建 storageclass 动态绑定 nfs-provisioner ,完成后查看 nfs-provisioner 的 pod 及 storageclasses 对象。
将 kubectl get storageclasses.storage.k8s.io
命令的返回结果提交到答题框 。【 2 分】
storageclass.yaml
1 2 3 4 5 6 --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: storage-test provisioner: nfs-provisioner
pvc.yaml
1 2 3 4 5 6 7 8 9 10 11 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: storage-test
1 2 3 kubectl apply -f storageclass.yaml kubectl apply -f pvc.yaml kubectl get storageclasses.storage.k8s.io
7.通过 statefulset 创建 elasticsearch 集群
编写 es-statefulset.yaml ,通过 yaml 文件构建 elasticsearch 的 statefulset 集群, 集群中有 3 个副本名字分别为 es-cluster-0 、 es-cluster-1 、 es-cluster-2 ,并且使用上述 storageclass 提供的存储,使用 elasticsearch:7.2.0 镜像 ,并且声明 9200 端口为 api 端口, 9300 端口为内部访问端口,并且添加 busybox 的初始化容器对 elasticsearch 的数据目录 /usr/share/elasticsearch/data 进行授权操作。
将 kubectl get pods
命令的返回结果提交到 答题框。 【 2 分】
es-statefulset.yaml
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 apiVersion: apps/v1 kind: StatefulSet metadata: name: es-cluster namespace: kube-logging spec: serviceName: elasticsearch replicas: 3 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: containers: - name: elasticsearch image: elasticsearch:7.2.0 imagePullPolicy: IfNotPresent resources: limits: cpu: 1000m requests: cpu: 100m ports: - containerPort: 9200 name: rest protocol: TCP - containerPort: 9300 name: inter-node protocol: TCP volumeMounts: - name: data mountPath: /usr/share/elasticsearch/data env: - name: cluster.name value: k8s-logs - name: node.name valueFrom: fieldRef: fieldPath: metadata.name - name: discovery.seed_hosts value: "es-cluster-0.elasticsearch,es-cluster-1.elasticsearch,es-cluster-2.elasticsearch" - name: cluster.initial_master_nodes value: "es-cluster-0,es-cluster-1,es-cluster-2" - name: ES_JAVA_OPTS value: "-Xms512m -Xmx512m" initContainers: - name: fix-permissions image: busybox imagePullPolicy: IfNotPresent command: ["sh" , "-c" , "chown -R 1000:1000 /usr/share/elasticsearch/data" ] securityContext: privileged: true volumeMounts: - name: data mountPath: /usr/share/elasticsearch/data - name: increase-vm-max-map image: busybox imagePullPolicy: IfNotPresent command: ["sysctl" , "-w" , "vm.max_map_count=262144" ] securityContext: privileged: true - name: increase-fd-ulimit image: busybox imagePullPolicy: IfNotPresent command: ["sh" , "-c" , "ulimit -n 65536" ] securityContext: privileged: true volumeClaimTemplates: - metadata: name: data labels: app: elasticsearch spec: accessModes: [ "ReadWriteOnce" ] storageClassName: managed-nfs-storage resources: requests: storage: 10Gi
1 2 3 kubectl apply -f es-statefulset.yaml kubectl get po,svc -n kube-logging kubectl get pods
8.创建 headless service
编写es-svc.yaml 文件,为 elasticsearch 的 pod 创建一个 headless service ,并在 service中声明 9200 和 9300 端口 。
将kubectl get svc
命令的返回结果提交到 答题框。【 2 分】
es-ns.yaml
1 2 3 4 apiVersion: v1 kind: Namespace metadata: name: kube-logging
es-svc.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 apiVersion: v1 kind: Service metadata: name: elasticsearch namespace: kube-logging labels: app: elasticsearch spec: selector: app: elasticsearch clusterIP: None ports: - port: 9200 name: rest - port: 9300 name: inter-node
9.Kibana 可视化 UI 界面部署
编写 kibana.yaml ,通过该文件创建 deployment 和 service ,其中 deployment 基于kibana:7.2.0 镜像创建并通过环境变量 ELASTICSEARCH_URL 指定 elasticsearch 服务地址;service 代理 kibana 的 pod 服务,并且使用 NodePort 类型。创建成功后在浏览器访问 Kibana的 UI 界面。
将kubectl get svc
命令的返回结果提交到答题框 。【 2 分】
kibana.yaml
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 apiVersion: v1 kind: Service metadata: name: kibana namespace: kube-logging labels: app: kibana spec: type: NodePort ports: - port: 5601 selector: app: kibana --- apiVersion: apps/v1 kind: Deployment metadata: name: kibana namespace: kube-logging labels: app: kibana spec: replicas: 1 selector: matchLabels: app: kibana template: metadata: labels: app: kibana spec: containers: - name: kibana image: docker.elastic.co/kibana/kibana:7.2.0 imagePullPolicy: IfNotPresent resources: limits: cpu: 1000m requests: cpu: 100m env: - name: ELASTICSEARCH_URL value: http://elasticsearch:9200 ports: - containerPort: 5601
1 2 3 kubectl apply -f kibana.yaml kubectl get pod,svc -n kube-logging kubectl get svc
10.Fluentd 组件部署
编写 fluentd.yaml ,通过 yaml 文件创建 DaemonSet 控制器部署 fluentd 服务,并在该文件中同时编写相关的 sa 账号和 rbac 内容,创建成功后保证可以正确采集容器内的日志。
将 kubectl get pods
命令的返回结果 提交到答题框。【 2 分】
fluentd.yaml
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 apiVersion: v1 kind: ServiceAccount metadata: name: fluentd namespace: kube-logging labels: app: fluentd --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: fluentd labels: app: fluentd rules: - apiGroups: - "" resources: - pods - namespaces verbs: - get - list - watch --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: fluentd roleRef: kind: ClusterRole name: fluentd apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount name: fluentd namespace: kube-logging --- apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd namespace: kube-logging labels: app: fluentd spec: selector: matchLabels: app: fluentd template: metadata: labels: app: fluentd spec: serviceAccount: fluentd serviceAccountName: fluentd tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule containers: - name: fluentd image: fluent/fluentd-kubernetes-daemonset:v1.4.2-debian-elasticsearch-1.1 imagePullPolicy: IfNotPresent env: - name: FLUENT_ELASTICSEARCH_HOST value: "elasticsearch.kube-logging.svc.cluster.local" - name: FLUENT_ELASTICSEARCH_PORT value: "9200" - name: FLUENT_ELASTICSEARCH_SCHEME value: "http" - name: FLUENTD_SYSTEMD_CONF value: disable resources: limits: memory: 512Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers
1 2 kubectl apply -f fluentd.yaml kubectl get pods
C模块题目:企业级应用的自动化部署和运维
虚拟机与环境规划
设备名称
主机名
接口
IP 地址
云服务器1
ansible
eth0
私网IP: 192.168.100.150./24
云服务器2
host1
eth0
私网IP: 192.168.100.160./24
云服务器3
host2
eth0
私网IP: 192.168.100.170./24
任务1 企业级应用的自动化部署( 10 分)
1.部署主从数据库
(1)修改主机名 ansible 节点主机名为 ansible,host1 节点主机名为 host1,host2 节点主机名为 host2, 请使用提供的软件包在 ansible 节点安装 ansible 。
将 ansible --version
命令 的返回结果提交到答题框 。【 1 分】
ansible
1 2 3 4 hostnamectl set-hostname --static ansible yum install -y epel-release yum install -y ansible ansible --version
host
1 2 hostnamectl set-hostname --static host1 hostnamectl set-hostname --static host2
ALL
1 2 3 4 5 6 7 setenforce 0 systemctl disable firewalld --now cat >> /etc/hosts <<EOF 192.168.100.150 ansible 192.168.100.160 host1 192.168.100.170 host2 EOF
(2)配置主机清单文件,创建 mysql 主机组, mysql 主机组内添加 host1 和 host2 主机,创建 mysql1 主机组 mysql1 组内添加 host1 主机,创建 mysql2 主机组 mysql2 组内添加 host2主机,并配置免密登录。
将 ansible all -m "ping"
命令的返回结果 提交到答题框。【 1 分】
1 2 3 4 5 6 7 ssh-keygen ssh-copy-id root@host1 ssh-copy-id root@host2 mkdir ansiblecd ansible/ansible all -m "ping"
ansible.cfg
1 2 3 4 [defaults] inventory = ./inventoryremote_user = rootask_pass = false
inventory
1 2 3 4 5 6 7 [mysql] host1 host2 [mysql1] host1 [mysql2] host2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ansible all -m "ping" host1 | SUCCESS => { "ansible_facts" : { "discovered_interpreter_python" : "/usr/bin/python" }, "changed" : false , "ping" : "pong" } host2 | SUCCESS => { "ansible_facts" : { "discovered_interpreter_python" : "/usr/bin/python" }, "changed" : false , "ping" : "pong" }
(3) mysql 主机组内所有主机安装 mariadb 数据库,启动数据库并设置为开机自启动。
在 host1 节点 将 systemctl status mariadb
命令的返回结果提交到答题框。【 1 分】
ansible
1 ansible-playbook Install.yaml
Install.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 --- - name: 'Configure mariadb' hosts: mysql vars: - svc: mariadb tasks: - name: Install mariadb yum: name: - "{{ item }} " state: latest with_items: - mariadb - mariadb-server - name: chk service service: name: "{{ svc }} " state: started enabled: true
host1
1 systemctl status mariadb
(4)编写一名称为 mariadb.sh 的 shell 脚本,该脚本具有完成 mariadb 数据库的初始化功能,要求数据库(用户名为 root, 密码为 123456),通过 ansible 对应模块执行 mariadb.sh 完成对 mysql 主机组下的所有节点进行数据库初始化。
在 host1 节点,将 mysql -uroot -p123456
命令的返回结果提交到答题框 。【 1 分】
mariadb.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #! /usr/bin/expect spawn mysql_secure_installation expect "none" send "\n" expect "Y/n" send "y\n" expect "password:" send "123456\n" expect "password:" send "123456\n" expect "Y/n" send "n\n" expect "Y/n" send "n\n" expect "Y/n" send "n\n" expect "Y/n" send "y\n" expect off
Init.yaml
1 2 3 4 5 6 --- - name: 'Configure mariadb' hosts: mysql tasks: - name: Install mariadb script: mariadb.sh
host1
(5)创建主机变量,所有主机组中 host1 节点创建变量 id=20,host2 节点创建变量 id=30 。
将 cat /root/ansible/inventory | grep id
命令的返回结果提交到答题框。【 1 分】
Attached /etc/ansible/hosts
1 2 3 4 cat >> inventory <<EOF host1 id="20" host2 id="30" EOF
1 cat /root/ansible/inventory | grep id
(6)根据 mysql 配置文件创建 mysql 的 Janja2 模板文件命名为 my.cnf.j2, 编写 mariadb.yaml 文件实现主从数据库的配置和权限设置。
在 ansible 节点通过 cat mariadb.yaml
命令查看文件内容返回结果提交到答题框, 在 host2节点进入数据库 将 show slave status\G
命令的返回结果提交到答题框。【 1 分】
my.cnf.j2
1 2 3 4 5 6 7 8 9 10 11 12 13 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0skip-grant-tables server_id={{ id }} {% if ansible_ens32.ipv4.address == master_host %} log-bin= ON {% endif %} [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid
mariadb.yaml
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 --- - name: 'Setup mariadb' hosts: mysql vars: - login_user: root login_passwd: 123456 master_host: "192.168.100.160" slave: "192.168.100.170" mysql_path: /usr/local/mysql/bin/ basedir_name: /usr/bin/ tasks: - name: deploy template template: src: my.cnf.j2 dest: /etc/my.cnf - name: Setup user root shell: chdir={{ basedir_name }} ./mysql -u{{ login_user }} -p{{ login_passwd }} -e 'grant all privileges on *.* to "root"@"%" identified by "123456"' - name: Setup user shell: chdir={{ basedir_name }} ./mysql -u{{ login_user }} -p{{ login_passwd }} -e 'grant replication slave on *.* to "user"@"%" identified by "123456"' notify: - flush_privileges - restart db_svc when: ansible_ens32.ipv4.address == "{{ master_host }} " - name: Setup Slave mariadb shell: chdir={{ basedir_name }} ./mysql -u{{ login_user }} -p{{ login_passwd }} -e 'change master to master_host="host1",master_user="user",master_password="123456"' when: ansible_ens32.ipv4.address == "{{ slave }} " notify: - flush_privileges - restart db_svc handlers: - name: restart db_svc service: name: mariadb state: restarted - name: flush_privileges shell: chdir={{ basedir_name }} ./mysql -u{{ login_user }} -p{{ login_passwd }} -e "flush privileges"
1 2 3 4 5 6 7 ansible-playbook mariadb.yaml mysql -uroot -p123456 start slave; show slave status\G;
2.部署 zookeeper 集群
zookeeper 是一个分布式服务框架,是 Apache Hadoop 的一个子项目,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 gpmall 商城系统中用到了 kafka 消息队列, kafka 集群的搭建依赖 zookeeper 集群来进行元数据的管理。
(1)编写主机清单文件,创建 zookeeper 主机组, zookeeper 主机组内添加 ansible 、 host1和 host2 主机 ,分别创建主机变量 zk_id。
将 ansible all -a "id"
命令的返回结果提交到答题框。【 2 分】
Attached inventory
1 2 3 4 [zookeeper] ansible zk_id =150 host1 zk_id =160 host2 zk_id =170
(2)在 ansible 节点, 使用提供的 zookeeper-3.4.14.tar.gz 软件包, 编写 zookeeper.yaml 文件实现 zookeeper 集群搭建,创建任务清单实现 zookeeper 安装包批量解压、通过 Janja2 模板文件配置 zookeeper 、创建 zookeeper 的 myid 文件和批量启动 zookeeper 功能。
在三个节点相应的目录使用 ./zkServer.sh status
命令查看三个 Zookeeper 节点的状态。
在 ansible 主机上将 cat zookeeper.yaml
命令结果提交到答题框, 将 jps 命令的返回结果提交到答题框 。【 2 分】
zoo.cfg.j2
1 2 3 4 5 6 7 8 9 10 tickTime=2000 initLimit=10 syncLimit=5 dataDir={{ zookeeper_data_dir }} dataLogDir={{ zookeeper_log_dir }} clientPort=2181 maxClientCnxns=60 server.150=192.168.100.150:2888:3888 server.160=192.168.100.160:2888:3888 server.170=192.168.100.170:2888:3888
zookeeper.yaml
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 --- - name: 'Setup mariadb' hosts: zookeeper vars: - zookeeper_version: zookeeper-3.4.14 zookeeper_data_dir: /data/zookeeper/data zookeeper_log_dir: /data/zookeeper/logs var_dir: /data/zookeeper/ source_dir: /root/ myid: /data/zookeeper/data/myid tasks: - name: deal depends yum: name: "{{ item }} " state: present with_items: - java-1.8.0-openjdk - java-1.8.0-openjdk-devel - name: Create zookeeper data directory file: path: "{{ item }} " state: directory with_items: - "{{ var_dir }} " - "{{ zookeeper_log_dir }} " - "{{ zookeeper_data_dir }} " - name: Copy file copy: src: "{{ zookeeper_version }} .tar.gz" dest: "{{ source_dir }} " - name: unarchive shell: "tar -zxvf /root/{{ zookeeper_version }} .tar.gz" - name: copy file shell: "mv /root/{{ zookeeper_version }} /* {{ var_dir }} " - name: deploy j2 template: src: zoo.cfg.j2 dest: "{{ var_dir }} /conf/zoo.cfg" - name: touch myid file: path: "{{ myid }} " state: touch - name: write myid lineinfile: dest: "{{ myid }} " line: "{{ zk_id }} " state: present - name: start zookeeper svc shell: "{{ var_dir }} /bin/zkServer.sh start"
1 2 3 4 ansible-playbook zookeeper.yaml cd /data/zookeeper/bin/./zkServer.sh status
任务 2 应用商城系统部署 【 10 分】
1.gpmall 部署
在 ansible 节点,使用提供的 gpmall-cluster 软件包,完成集群应用系统部署。部署完成后,进行登录,最后使用 curl 命令去获取商城首页的返回信息,先将 netstat -ntpl
命令的返回结果提交到答题框,然后 将 curl -l http://EIP:80
命令的返回结果提交到答题框。 【 10 分】
mycat
On ansible
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 cp /opt/ChinaskillMall/Mycat-server-1.6-RELEASE-20161028204710-linux.gz /usr/local/cd /usr/local/tar -zvxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz chown -R 777 /usr/local/mycat/echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profilesource /etc/profilecd /usr/local/mycat/conf/chown root:root schema.xml/bin/bash /usr/local/mycat/bin/mycat start yum install -y MariaDB-client ss -ntlp |grep 8066 mysql -h127.0.0.1 -P8066 -uroot -p123456 show databases; use USERDB show tables; select * from company;insert into company values(2,"bastetball" ,"usa" ); select * from company;quit ss -ntlp |grep 9066 mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show @@datasource;'
Changed /usr/local/mycat/conf/schema.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?xml version="1.0" ?> <!DOCTYPE mycat :schema SYSTEM "schema.dtd" > <mycat:schema xmlns:mycat ="http://io.mycat/" > <schema name ="USERDB" checkSQLschema ="true" sqlMaxLimit ="100" dataNode ="dn1" ></schema > <dataNode name ="dn1" dataHost ="localhost1" database ="test" /> <dataHost name ="localhost1" maxCon ="1000" minCon ="10" balance ="3" dbType ="mysql" dbDriver ="native" writeType ="0" switchType ="1" slaveThreshold ="100" ><heartbeat > select user()</heartbeat > <writeHost host ="hostM1" url ="192.168.100.160:3306" user ="root" password ="123456" > <readHost host ="hostS1" url ="192.168.100.170:3306" user ="root" password ="123456" /> </writeHost > </dataHost > </mycat:schema >
Changed /usr/local/mycat/conf/server.xml
1 2 3 4 5 6 7 8 9 10 <user name ="root" > <property name ="password" > 123456</property > <property name ="schemas" > USERDB</property > <user name ="root" > <property name ="password" > user</property > <property name ="schemas" > TESTDB</property > <property name ="readOnly" > true</property > </user >
Kafka
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 mv kafka_2.11-1.1.1.tgz /usr/local/cd /usr/local/tar -zxvf kafka_2.11-1.1.1.tgz cd kafka_2.11-1.1.1/configsed 's/broker.id=0/#broker.id=0/g' server.properties sed 's/zookeeper.connect=localhost:2181/#zookeeper.connect=localhost:2181/g' server.properties cat >> server.properties <<EOF broker.id=150 zookeeper.connect=192.168.100.150:2181,192.168.100.160:2181,192.168.100.170:2181 listeners = PLAINTEXT://192.168.100.150:9092 EOF cat >> server.properties <<EOF broker.id=160 zookeeper.connect=192.168.100.150:2181,192.168.100.160:2181,192.168.100.170:2181 listeners = PLAINTEXT://192.168.100.160:9092 EOF cat >> server.properties <<EOF broker.id=170 zookeeper.connect=192.168.100.150:2181,192.168.100.160:2181,192.168.100.170:2181 listeners = PLAINTEXT://192.168.100.170:9092 EOF ./kafka-topics.sh --create --zookeeper 192.168.100.150:2181 --replication-factor 1 --partitions 1 --topic test ./kafka-topics.sh --list --zookeeper 192.168.100.160:2181 ./kafka-topics.sh --list --zookeeper 192.168.100.170:2181
1 2 3 4 5 6 7 8 9 10 11 scp /opt/ChinaskillMall/gpmall.sql root@host1:/root/ mysql -uroot -p123456 create database gpmall; use gpmall source /root/gpmall.sqlquit ./mycat restart
Changed /usr/local/mycat/conf/schema.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?xml version="1.0" ?> <!DOCTYPE mycat :schema SYSTEM "schema.dtd" > <mycat:schema xmlns:mycat ="http://io.mycat/" > <schema name ="gpmall" checkSQLschema ="false" sqlMaxLimit ="100" dataNode ="dn1" ></schema > <dataNode name ="dn1" dataHost ="localhost1" database ="gpmall" /> <dataHost name ="localhost1" maxCon ="1000" minCon ="10" balance ="3" dbType ="mysql" dbDriver ="native" writeType ="0" switchType ="1" slaveThreshold ="100" ><heartbeat > select user()</heartbeat > <writeHost host ="hostM1" url ="172.16.51.22:3306" user ="root" password ="123456" > <readHost host ="hostS1" url ="172.16.51.26:3306" user ="root" password ="123456" /></writeHost > </dataHost > </mycat:schema >
Changed /usr/local/mycat/conf/server.xml
1 2 3 4 5 <user name ="root" > <property name ="password" > 123456</property > <property name ="schemas" > gpmall</property > </user >
redis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 yum install redis –y systemctl enable redis --now scp /opt/ChinaskillMall/*.jar root@host1:/root/ scp /opt/ChinaskillMall/*.jar root@host2:/root/ cat >> /etc/hosts <<EOF 192.168.100.150 redis.mall 192.168.100.150 mysql.mall 192.168.100.150 kafka1.mall 192.168.100.160 kafka2.mall 192.168.100.170 kafka3.mall 192.168.100.150 zk1.mall 192.168.100.160 zk2.mall 192.168.100.170 zk3.mall EOF nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar &nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar &ps -aux |grep java
nginx
1 2 3 4 5 6 7 yum install nginx -y rm -rf /usr/share/nginx/html/*cp -rvf /opt/ChinaskillMall/dist/* /usr/share/nginx/html/systemctl enable nginx --now ss -ntlp |grep 80 curl -L http://192.168.100.150
Changed /etc/nginx/conf.d/default.conf
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 upstream myuser { server 192.168.100.160:8082 ; server 192.168.100.170:8082 ; ip_hash; } upstream myshopping { server 192.168.100.160:8081 ; server 192.168.100.170:8081 ; ip_hash; } upstream mycashier { server 192.168.100.160:8083 ; server 192.168.100.170:8083 ; ip_hash; } server { listen 80 ; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } location /user { proxy_pass http://myuser; } location /shopping { proxy_pass http://myshopping; } location /cashier { proxy_pass http://mycashier; } error_page 500 502 503 504 /50x.html;location = /50x.html { root /usr/share/nginx/html; } }
任务 3 Prometheus 监控 Mariadb 主从数据库【 10 分】
1.Prometheus 及 Grafana 搭建
根据 grafana-enterprise-8.3.6.linux-amd64.tar.gz 、prometheus-2.37.0.linux-amd64.tar.gz 、 node_exporter-1.3.1.linux-amd64.tar.gz 资
源包,安装 prometheus-2.37.0 、 node_exporter 服务并启动,安装 grafana 服务并测试浏览器登陆。
先将 prometheus.service 文件中的内容提交到答题框, 然后 将 curl -L http://EIP:9090
命令的返回结果提交到答题框。【 5 分】
prometheus.service
1 2 3 4 5 6 7 8 9 10 11 12 [unit] Description =prometheusAfter =network.target[Service] Type =simpleUser =rootExecStart =/usr/local/prometheus-2.37 .0 .linux-amd64/prometheus --config.file=/usr/local/prometheus-2.37 .0 .linux-amd64/prometheus.ymlRestart =on -failure[Install] WantedBy =mutli-user.target
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 mv grafana-enterprise-8.3.6.linux-amd64.tar.gztar -zxvf grafana-enterprise-8.3.6.linux-amd64.tar.gz yum install -y grafana-enterprise-8.3.6.rpm mv prometheus-2.37.0.linux-amd64.tar.gz /usr/localmv node_exporter-1.3.1.linux-amd64.tar.gz /usr/localcd /usr/localtar -zxvf prometheus-2.37.0.linux-amd64.tar.gz tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz cd node_exporter-1.3.1.linux-amd64/nohup node_exporter 2>&1 &mv prometheus.service /lib/systemd/system/systemctl daemon-reload systemctl enable prometheus --now ss -ntlp |grep 9090 LISTEN 0 128 :::9090 :::* users :(("prometheus",pid=35383 ,fd=3 )) systemctl enable grafana-server --now curl -L http://EIP:9090
2.Prometheus 配置自定义监控项、 mysqld_exporter 安装及配置
根据 mysqld_exporter-0.12.1.linux-amd64.tar.gz 安装 mysqld_exporter ,并创建 mysqld_exporter-0.12.1.linux-amd64/my.cnf 文件添加被监控数据库用户名密码,修改 prometheus.yml 文件,添加两个任务: mysql-ansible-slave 、nodes ,抓取间隔都设置 5s 分别监控主从节点的 mysqld_exporter 、 node_exporter 端口,重启 prometheus 并刷新 prometheus 页面。
将 my.cnf 和 prometheus.yml 中的内容提交到答题框。【 5 分】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 mysql -uroot -p000000 use test ; grant replication client,process on *.* to 'user' @localhost identified by '123456' ; grant select on *.* to mysql_monitor@localhost; quit mv mysqld_exporter-0.12.1.linux-amd64.tar.gz /usr/local/cd /usr/local/tar mysqld_exporter-0.12.1.linux-amd64.tar.gz cd mysqld_exporter-0.12.1.linux-amd64./mysqld_exporter --config.file=my.cnf sed -i 's/scrape_interval: 15s/scrape_interval: 5s/g' /usr/local/prometheus-2.37.0.linux-amd64/prometheus.yml systemctl restart prometheus
1 2 3 [client] user =userpassword =123456
Attached prometheus.yml
1 2 3 4 5 6 - job_name: 'mysql-ansible-slave' static_configs: - targets: ['192.168.100.170:9104' ] - job_name: 'nodes' static_configs: - targets: ["192.168.100.160:9100" ,"192.168.100.170:9100" ]