本博客尽量贴近生产环境,一些过程可能不是非常详细,需要一定的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分区
安全考虑,所有服务器采用主备模式双网卡绑定