场景描述

现在很多企业都自建私有云,或者租用公有云厂商提供的公有云环境,EPC,业务方在申请拿到资源的时候,默认都是已经安装了操作系统的虚拟机,并不是所有的环境下,安装的操作系统都是可以自定义的,一般都是标准默认的版本,很多软件包和批量化管理、监控工具是没有安装的,只能是业务方拿到资源后,自己进行安装。

而在这个时候,批量在很多主机上安装管理、监控工具的工作,又回到业务方的手上,这个场景,和没有云环境,业务上线从购买服务器开始的情况一样了,唯一不同的是,如果是自己批量安装操作系统,可以预先安装这些软件包,而云环境,只能自己去安装了。

这段时间,刚处理了一波这样的环境,企业内部的私有云,申请了140台虚拟机,在开发正式进场之前,需要对这些虚拟机进行一下处理,安装监控和管理的软件。为了能减轻一点工作量,最次的办法就是每一台登录上去进行处理,这里选择的是批量去进行处理,能减少一点工作量就减少一点,只要能完成就可以了。

资源情况

  • 140台CentOS 7的定制版,实际上也是和最小化安装的社区版没有太大的区别,
  • 地址都是连续的,从192.168.1.3-192.168.1.142,
  • 所有主机的密码都是同一个,123456,这个是最好的一个情况,如果每一台主机密码都不一样,那可真是要了命了。也不是不能做,只是做起来比较麻烦

方案规划

基于上面所述的环境,构想的实现步骤主要如下:

  • 找一台管理的主机,最好是头一个,或者是尾一个,建议是头一个,因为保不齐后面也需要扩充主机和地址范围
  • 用管理的主机,对其他所有的主机,做ssh的免密码登录,ssh-key
  • 批量化执行ssh远程登录,执行命令,主要是包含DNS解析的添加、yum仓库的修改、zabbix和salt-minion的安装

具体执行过程

SSH-KEY 免密码登录

由于所有主机的IP地址是连续的,而且密码都是相同的,这里可以选择使用expect自动应答,将生成的ssh-key,直接传输到需要管理的那些主机上。当然也是需要写两个脚本的,一个是expect的脚本,一个是循环的shell脚本。具体如下:

  1. SSH-KEY生成

    默认使用ssh-keygen -t dsa生成密钥对,一路默认

  2. expect自动应答文件

    编写自动应答脚本,主要是在进行SSH-COPY-ID的时候,进行自动应答

    set IP [lindex $argv 0]
    spawn ssh-copy-id -i /root/.ssh/id_dsa.pub root@$IP
    expect {
            "*yes/no" {send "yes\r";exp_continue}
            "password:"     {send "123456\r"}
    }
    interact
    exit
    

    在这个自动化应答的脚本中,需要一个变量IP,因为所有主机的用户名和密码都是一样的,所以密码不用设置为变量,不然的话,密码也是要设置成一个变量,然后进行自动应答。

  3. 循环shell脚本

    写一个shell脚本,循环执行,特别简单

    #/bin/bash
    for ip in {3..142}
     do
            IP="192.168.1.$ip"
            echo "$IP"
            expect expect.exp $IP
    done 
    

    这就是要循环执行

  4. 执行脚本,就可以完成所有主机的公钥拷贝,然后在管理及上,就会有一个known_hosts文件,里面就是所有接收了该公钥的主机列表。

DNS和YUM仓库配置

这里的DNS配置,主要是写一下zabbix_server和salt的解析,直接写入到/etc/hosts文件中即可,还是利用上面的那个脚本,只不过把expect脚本换一下就可以了。具体如下:

#/bin/bash
for ip in {4..134}
 do
        IP="10.253.11.$ip"
        echo "$IP"
        ssh root@$IP " echo \'192.168.1.3 salt\'>>/etc/hosts && mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak"
done 

添加一个hosts文件,然后将系统中原生自带的repo文件,全部删除,或者移动到一个其他目录中。

yum仓库的配置,由于都是内网环境,只能自己搭建一个yum仓库,使用系统镜像,挂载到系统中,将系统镜像拷贝到一个目录下,然后安装一个httpd服务,使用本地的http服务,作为yum仓库源,所有的其他主机,都是用该yum仓库进行基础软件安装。

[base]
name=base
#baseurl=file:///mnt
baseurl=http://192.168.1.3:8123/iso
enable=1
gpgcheck=0

然后将该base.repo文件,分发到所有主机上,这里还是通过循环执行命令的形式。

#/bin/bash
for ip in {4..134}
 do
        IP="10.253.11.$ip"
        echo "$IP"
        scp /etc/yum.repos.d/base.repo root@$IP:/etc/yum.repos.d/ 
done 

拷贝过去之后,其他的所有主机,就可以使用该yum源了

zabbix-agent和salt-minion的安装

利用循环脚本,批量安装zabbix-agent和salt-minion,首先是要先下载这两个软件的安装包,找一个可以访问外网的机器,使用download的方式,将安装的rpm包下载下来,然后拷贝到yum仓库源中。然后通过createrepo的方式,更新本地yum仓库。在这里有一个问题,更新完之后,该站点的目录权限会变更,其他主机无法访问到资源,所以要粗暴使用chmod 777 -Rf。更新完权限后,重启httpd服务。利用脚本,直接安装两个agent就好了。

#/bin/bash
for ip in {4..134}
 do
        IP="10.253.11.$ip"
        echo "$IP"
        ssh root@$IP \'yum install zabbix-agent salt-minion -y && echo $IP >/etc/salt/minion_id && systemctl start salt-minion\' 
done 

启动后,就可以使用salt-master来控制所有的机器了。

版权声明:本文为bobo137950263原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/bobo137950263/p/11358356.html