自动化运维第一篇,从PXE+kickstart批量部署服务器开始

本博客尽量贴近生产环境,一些过程可能不是非常详细,需要一定的linux基础。

公司采购了200台服务器,接下来需要完成自动化运维体系的搭建,那么需要做的工作如下:
1.网络环境部署
2.批量安装系统
3.局域网yum源搭建
4.本地ntp时间服务器
5.ansible批量管理或者堡垒机
6.k8s集群部署
7.监控报警体系
8.ELK日志采集系统
9.本地代码仓库gitlab和Nexus私服
10.jenkins自动发布

自动化的目的是尽可能减少人工操作,减少出错风险,提升工作效率

网络环境部署省略…

首先我们准备一台centos7机器作为管理机,IP地址为192.168.128.10,其承担如下功能:
PXE+kickstart、ansible批量管理、局域网yum源、ntp时间服务器

安全考虑,目前只有管理机可以连接外网,其余机器均在内网隔离环境,通过防火墙做nat转发

PXE安装系统流程

第一步:PXE Client向DHCP server发送请求,DHCP server响应分配ip
第二步:PXE客户端向TFTP server请求下载启动文件,pxelinux.0、pxelinux.cfg/default
第三步:请求下载自动应答文件
第四步:客户端安装操作系统

MAC地址绑定安装系统

通过绑定mac地址,可以指定对应的应答文件
首先需要得到网卡的MAC地址,然后再创建一个内容与isolinux.cfg文件内容相同的文件
文件名命名格式为"01-mac地址",其中mac地址字母需要改为小写,将分隔符:修改为-

一,生成server,ip和mac地址文件

将所有服务器mac收集起来
cat >/root/MAC <<EOF
00:50:56:34:56:40
00:50:56:33:A6:18
00:50:56:29:77:18
00:50:56:2C:AE:FC
00:50:56:27:61:D8
00:50:56:3A:D8:BA
EOF
转换为小写

cat MAC | tr "[:upper:]" "[:lower:]" >/root/mac

添加server和ip

awk '{print "server" NR " " "192.168.128." NR+20 " " $0}' mac >/root/server-ip-mac

在这里插入图片描述

二,部署相关软件服务

yum install dhcp tftp-server httpd syslinux xinetd -y

http服务

mkdir -pv /var/www/html/centos/7.6.1810/{isos,ks}
mkdir -pv /var/www/html/centos/7.6.1810/isos/x86_64

挂载centos7的ISO镜像
mount /dev/cdrom /mnt
cp -r /mnt/* /var/www/html/centos/7.6.1810/isos/x86_64

systemctl enable httpd && systemctl start httpd
firewall-cmd --permanent --add-rich-rule “rule family=ipv4 source address=192.168.128.0/24 service name=“http” accept”
firewall-cmd --reload

dhcpd服务

参数解释:
domain-name-servers --域名服务器
option routers --网关
next-server tftp服务器
filename #指明引导文件名称

准备配置文件

cat >/etc/dhcp/dhcpd.conf << EOF 
allow booting;
allow bootp;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style interim;
ignore client-updates;
subnet 192.168.128.0 netmask 255.255.255.0 {
    option routers 192.168.128.1;
    option subnet-mask 255.255.255.0;
    option domain-name-servers 192.168.128.10;
    next-server 192.168.128.10;
    filename "pxelinux.0";
}

group {
EOF

cat /root/server-ip-mac | while read server ip mac; do
cat >>/etc/dhcp/dhcpd.conf << EOF 
    host $server{
        hardware ethernet $mac;
        fixed-address $ip;
    }

EOF
done

echo "}" >>/etc/dhcp/dhcpd.conf

systemctl enable dhcpd && systemctl start dhcpd
firewall-cmd --permanent --add-rich-rule “rule family=ipv4 source address=192.168.128.0/24 service name=“dhcp” accept”
firewall-cmd --reload

TFTP服务

编辑xinetd配置文件,启动TFTP服务程序:

sed -i '/disable/s/yes/no/' /etc/xinetd.d/tftp
systemctl enable tftp && systemctl start tftp

默认的数据根目录是/var/lib/tftpboot
将引导模板文件复制tftp目录:

mkdir /var/lib/tftpboot/pxelinux.cfg
mkdir -pv /var/lib/tftpboot/centos7.6.1810
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
cp /var/www/html/centos/7.6.1810/isos/x86_64/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default7.6.1810
cp /var/www/html/centos/7.6.1810/isos/x86_64/isolinux/{boot.msg,splash.png,vesamenu.c32} /var/lib/tftpboot
cp /var/www/html/centos/7.6.1810/isos/x86_64/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7.6.1810

修改default菜单文件

vim /var/lib/tftpboot/pxelinux.cfg/default7.6.1810

default vesamenu.c32

timeout 60 #等待时间由原来的600更改为60

label linux7.6.1810
  menu label ^Install CentOS 7.6.1810
  menu default #多版本系统时其中一个添加默认menu,否则不能自动继续
  kernel centos7.6.1810/vmlinuz
  append initrd=centos7.6.181/initrd.img ks=http://192.168.128.10/centos/7.6.1810/ks/centos7.6.1810.cfg
 
label check

menu default #将label check下的这行注释掉

创建所有服务器mac对应的引导文件

cp /root/mac /root/mac2 && sed -i 's/:/-/g' /root/mac2
cat /root/mac2 | while read mac; do
cp /var/lib/tftpboot/pxelinux.cfg/default7.6.1810 /var/lib/tftpboot/pxelinux.cfg/01-$mac
done

创建KickStart应答文件

复制一份应答文件模板并给于权限:

cp ~/anaconda-ks.cfg /var/www/html/centos/7.6.1810/ks/centos7.6.1810.cfg
chmod +r /var/www/html/centos/7.6.1810/ks/centos7.6.1810.cfg

vim /var/www/html/centos/ks/centos7.cfg

# version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use text mode install
text
# Firewall configuration,firewall –enable|--disable 
firewall --disable
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.128.10/centos/7.6.1810/isos/x86_64"
# Run the Setup Agent on first boot
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Reboot after installation
reboot
# Network information
network --bootproto=dhcp --device=ens33 --onboot=on
# Root password
rootpw --plaintext 123456
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# System bootloader configuration
#key --skip
bootloader --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
#part swap --fstype="swap" --size=2048
#part /boot --fstype="xfs" --size=500
#part / --fstype="xfs" --size=8192 --grow
#lvm
part /boot --fstype="xfs" --size=500
part pv.01 --size=1 --grow
volgroup vg01 pv.01
#logvol swap --vgname=vg01 --size=1024 --fstype="swap" --name=swaplv
logvol / --vgname=vg01 --size=1 --grow --fstype="xfs" --name=rootlv

%packages
@^minimal
@core

%end

%addon com_redhat_kdump --disable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end


#双网卡绑定
%post
DHCP_IPADDR=`ip addr|grep -w "inet"|grep -v 127.0.0.1|awk '{print $2}'|cut -d '/' -f 1`
DHCP_NETMASK=`ip addr|grep -w "inet"|grep -v 127.0.0.1|awk '{print $2}'|cut -d '/' -f 2`
DHCP_GATEWAY=`ip route show|awk 'NR==1{print $3}'`

cat << EOF > /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=bond
BOOTPROTO=static
ONBOOT=yes
IPADDR=$DHCP_IPADDR
PREFIX=$DHCP_NETMASK
GATEWAY=$DHCP_GATEWAY
USERCTL=no
BONDING_MASTER=yes
BONDING_OPTS="miimon=200 mode=1"
EOF

cat << EOF > /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
EOF

cat << EOF > /etc/sysconfig/network-scripts/ifcfg-ens34
DEVICE=ens34
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
EOF

systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl restart network
%end

说明:接下来要部署k8s集群,没有安装swap分区
安全考虑,所有服务器采用主备模式双网卡绑定

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值