运维自动化之系统部署

1.kickstart制作和使用

kickstart文件主要包括三个部分:命令段,程序包段,脚本段

命令段:指明各种安装前配置,如键盘类型等

命令段中的常见命令:

keyboard: 设定键盘类型

lang: 语言类型

zerombr:清除mbr

clearpart:清除分区

part: 创建分区

rootpw: 指明root的密码

timezone: 时区

text: 文本安装界面

network:指定网络设置

firewall:设置防火墙设置

selinux:设置selinux设置

reboot:安装完自动重启

user:安装完成后为系统创建新用户

url: 指明安装源

程序包段:指明要安装的程序包组或程序包,不安装的程序包等

脚本段: %pre: 安装前脚本 %post: 安装后脚本

注意

centos6,7,8,不同版本的kickstart文件格式不相同,不可混用

%addon, %packages, %onerror, %pre 、 %post 必须以%end结束,否则安装失败

Centos 8最小化安装文件

ignoredisk --only-use=sda
zerombr
text
reboot
clearpart --all --initlabel
selinux --disabled
firewall --disabled
url --url=http://10.0.0.8/centos/8/os/x86_64/
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network --bootproto=dhcp --device=eth0 --ipv6=auto --activate
bootloader --append="net.ifnames=0" --location=mbr --boot-drive=sda
network --hostname=centos8.yang.org
rootpw 123456
firstboot --enable
skipx
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
part / --fstype="xfs" --ondisk=sda --size=102400
part /data --fstype="xfs" --ondisk=sda --size=51200
part swap --fstype="swap" --ondisk=sda --size=2048
part /boot --fstype="ext4" --ondisk=sda --size=1024
%packages
@^minimal-environment
kexec-tools
%end
%addon com_redhat_kdump --enable --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

 

centos7

install
xconfig  --startxonboot
keyboard --vckeymap=us --xlayouts='us'
rootpw --iscrypted $1$bpNEv8S5$lK.CjNkf.YCpFPHskSNiN0
url --url="http://10.0.0.8/centos/7/os/x86_64"
lang en_US
auth  --useshadow  --passalgo=sha512
text
firstboot --enable
selinux --disabled
skipx
services --disabled="chronyd"
ignoredisk --only-use=sda
firewall --disabled
network  --bootproto=dhcp --device=ens33
reboot
timezone Asia/Shanghai --nontp
bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda
zerombr
clearpart --all --initlabel
autopart --type=lvm
%post
#sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#systemctl disable firewalld
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS
baseurl=file:///misc/cd
       https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=0
[extras]
name=extras
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch
gpgcheck=0
enabled=1
[epel]
name=EPEL
baseurl=http://mirrors.aliyun.com/epel/$releasever/$basearch
gpgcheck=0
enabled=1
EOF
mkdir /root/.ssh -m 700
cat > /root/.ssh/authorized_keys <<EOF
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABgQDFyqd76ui/j6IGEsZpCAcNG4rQMexaA/OyrEKiLG56wFpf9rHU
rhp8b7mXrrFxP3r1UPZz3fZeGT8/u5Wr93IXeU9VtAzooXKS8Eh2EvKzuzGKw0t4lY9x2D7BGdl0zz35
3SdpAYqzZtuTEivq3N45zZEP7Y5r0Y5ocCVqL1sCuaHQucue9VTxOZKSs476QE91/pBaORgMf8ZQR6JJ
HvsN8eJmzqhggFqzwt9SiYg9lV+pFyWJfUVj3RYqfg4uw9lS4DUGHcvyL+97XKBSXejerDb9a8agm+ma
Bm/M/46DK6AQNR7wBRXBCoFszJFmeWK4MrXy6Ae3JrwVBGgTo1QKW77C+0luLAm6BjA1ZCgBGA2NXhNh
euYoBVCH6ZUz0eaU57MXD9fmkB+vyxuVjE4AhuR7hkyDrBkLdd2kTk1flcSo4yv0EFgrximrBLSaBfGC
JAdOXY9WrB0L6IoEega7NRrFWaXaEy/AJLOz+h6DxWFpKw7Ly1Wwk4KfHCeUn3s=
root@centos8.wangxiaochun.com
EOF
chmod 600 /root/.ssh/authorized_keys
useradd yang
echo 123456 | passwd --stdin yang
%end
%packages
@^minimal
vim-enhanced
wget
curl
tree
%end

kickstart文件创建

可使用创建工具:system-config-kickstart ,注意:此方法 CentOS 8 不再支持

依据某模板修改并生成新配置,CentOS安装完后,会自动参考当前系统的安装过程,生成一个 kickstart文件 /root/anaconda-ks.cfg

使用 ksvalidator 工具可以检查kickstart的文件格式是否有语法错误,来自于 pykickstart 包

ksvalidator /PATH/TO/KICKSTART_FILE

2.实现DHCP服务

主机获取网络配置可以通过两种方式:

静态指定

动态获取:

bootp:boot protocol MAC与IP一一静态对应

dhcp:增强的bootp,支持静态和动态

DHCP工作原理

用于内部网络和网络服务供应商自动分配IP地址给用户

用于内部网络管理员作为对所有电脑作集中管理的手段

自动化安装系统

解决IPV4资源不足问题

 

DHCP DISCOVER:客户端到服务器

DHCP OFFER :服务器到客户端

DHCP REQUEST:客户端到服务器

DHCP ACK :服务器到客户端

DHCP实现

注意:实现DHCP服务前,先将网络已有DHCP服务,如:mware中的DHCP关闭,访止冲突

DHCP服务的实现软件:

dhcp(CentOS 7 之前版本) 或 dhcp-server(CentOS 8 中的包名)

DHCP服务器配置

/etc/dhcp/dhcpd.conf

默认里面没有内容

参考看/usr/share/doc/dhcp-server/dhcpd.conf.example文件

格式  /etc/dhcp/dhcpd.conf

option domain-name "example.org";
option domain-name-servers 180.76.76.76, 223.6.6.6;

default-lease-time 600;
max-lease-time 7200;
log-facility local7;

subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.50 10.0.0.100;
   option routers 10.0.0.2;
   next-server 10.0.0.8;     TFTP服务器地址
   filename "pxelinux.0";    bootloader启动文件的名称
}

host testclient {
hardware ethernet 00:0c:29:33:b4:1a; 绑定mac地址
fixed-address 10.0.0.106; 分配的ip
default-lease-time 86400;
max-lease-time 864000;
option routers 10.0.0.254;
option domain-name-servers 114.114.114.114,8.8.8.8 ;
option domain-name "yang.net";
}

3.实现TFTP服务

TFTP:Trivial File Transfer Protocol ,是一种用于传输文件的简单高级协议,是文件传输协议(FTP) 的简化版本。用来传输比文件传输协议(FTP)更易于使用但功能较少的文件

TFTP和FTP的区别

1、安全性区别 FTP支持登录安全,具有适当的身份验证和加密协议,在建立连接期间需要与FTP身份验证通信 TFTP是一种开放协议,缺乏安全性,没有加密机制,与TFTP通信时不需要认证

2、传输层协议的区别 FTP使用TCP作为传输层协议,TFTP使用UDP作为传输层协议

3、使用端口的区别 FTP使用2个端口:TCP端口21,是个侦听端口;TCP端口20或更高TCP端口1024以上用于源连接 TFTP仅使用一个具有停止和等待模式的端口:端口:69/udp

4、RFC的区别 FTP是基于RFC 959文档,带有其他RFC涵盖安全措施;TFTP基于RFC 1350文档

5、执行命令的区别 FTP有许多可以执行的命令(get,put,ls,dir,lcd)并且可以列出目录等 TFTP只有5个指令可以执行(rrq,wrq,data,ack,error)

安装使用TFTP

[root@centos8 ~]#dnf install tftp-server -y
安装TFTP
[root@centos8 ~]#rpm -ql tftp-server
/var/lib/tftpboot
#TFTP服务数据目录
[root@centos8 ~]#systemctl enable --now tftp.service
启动服务
[root@centos8 ~]#mkdir /var/lib/tftpboot/dir
创建共享文件

4.利用PXE是实现自动化系统部署

 安装流程

在CentOS8上实现PXE自动化安装CentOS7,8

安装前准备

关闭防火墙和SELINUX,DHCP服务器静态IP

网络要求:关闭Vmware软件中的DHCP服务,基于NAT模式

使用 1G 以下内存的主机安装CentOS 7,8 会提示空间不足,建议2G以上

安装相关软件包

[root@centos8 ~]#dnf -y install dhcp-server tftp-server httpd syslinux-nonlinux
[root@centos8 ~]#systemctl enable --now httpd tftp dhcpd
会发现dhcpd起不来,需要配置dhcp服务

配置DHCP服务

option domain-name "example.org";
option domain-name-servers 180.76.76.76, 223.6.6.6;         DNS

default-lease-time 600;
max-lease-time 7200;
log-facility local7;

subnet 10.0.0.0 netmask 255.255.255.0 {                     网段
  range 10.0.0.50 10.0.0.100;                               分配的IP
   option routers 10.0.0.2;                                 网关
   next-server 10.0.0.8;                                    TFTP服务器地址
   filename "pxelinux.0";                                   启动菜单
}

[root@centos8 ~]#systemctl start dhcpd

准备yum源相关目录

[root@centos8 ~]#mkdir -pv /var/www/html/centos/{7,8}/os/x86_64/
[root@centos8 ~]#mount /dev/sr1 /var/www/html/centos/7/os/x86_64/
[root@centos8 ~]#mount /dev/sr2 /var/www/html/centos/8/os/x86_64/

准备kickstart文件

[root@centos8 ~]#mkdir /var/www/html/ks/
[root@centos8 ~]#vim /var/www/html/ks/centos7.cfg 
[root@centos8 ~]#vim /var/www/html/ks/centos8.cfg


CENTOS7的ks文件

xconfig --startxonboot
keyboard --vckeymap=us --xlayouts='us'
rootpw 123456
url --url="http://10.0.0.8/centos/7/os/x86_64/"
lang en_US
authselect --useshadow --passalgo=sha512
text
firstboot --enable
selinux --disabled
skipx
services --disabled="chronyd"
ignoredisk --only-use=sda
firewall --disabled
network --bootproto=dhcp --device=eth0
network --hostname=centos7.yang.org
reboot
timezone Asia/Shanghai --nontp
bootloader --append="net.ifnames=0" --location=mbr --boot-drive=sda
zerombr
clearpart --all --initlabel
part swap --fstype="swap" --ondisk=sda --size=3072
part / --fstype="xfs" --ondisk=sda --size=51200
part /boot --fstype="xfs" --ondisk=sda --size=1024
part /data --fstype="xfs" --ondisk=sda --size=30720
%post

useradd yang
%end
%packages
@core
%end

CEBTOS8ks文件

ignoredisk --only-use=sda
zerombr
text
reboot
clearpart --all --initlabel
selinux --disabled
firewall --disabled
url --url=http://10.0.0.8/centos/8/os/x86_64/
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network --bootproto=dhcp --device=eth0 --ipv6=auto --activate
bootloader --append="net.ifnames=0" --location=mbr --boot-drive=sda
network --hostname=centos8.yang.org
rootpw 123456
firstboot --enable
skipx
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
part / --fstype="xfs" --ondisk=sda --size=102400
part /data --fstype="xfs" --ondisk=sda --size=51200
part swap --fstype="swap" --ondisk=sda --size=2048
part /boot --fstype="ext4" --ondisk=sda --size=1024
%packages
@^minimal-environment
kexec-tools
%end

%addon com_redhat_kdump --enable --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

准备PXE启动相关文件

[root@centos8 ~]#mkdir /var/lib/tftpboot/centos{7,8}
#准备CentOS7,8各自的内核相关文件
[root@centos8 ~]#cp
/var/www/html/centos/7/os/x86_64/isolinux/{vmlinuz,initrd.img}
/var/lib/tftpboot/centos7
[root@centos8 ~]#cp
/var/www/html/centos/8/os/x86_64/isolinux/{vmlinuz,initrd.img}
/var/lib/tftpboot/centos8
[root@centos8 ~]#cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
#以下三个文件是CentOS8安装所必须文件,CentOS6,7则不需要
[root@centos8 ~]#cp
/var/www/html/centos/8/os/x86_64/isolinux/{ldlinux.c32,libcom32.c32,libutil.c32}
/var/lib/tftpboot/
#生成安装菜单文件
[root@centos8 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
[root@centos8 ~]#cp /var/www/html/centos/8/os/x86_64/isolinux/isolinux.cfg
/var/lib/tftpboot/pxelinux.cfg/default

最终目录结构

[22:01:00 root@aiyoubucuo ks]$tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── centos7
│   ├── initrd.img
│   └── vmlinuz
├── centos8
│   ├── initrd.img
│   └── vmlinuz
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
└── default

准备启动菜单文件

[22:01:48 root@aiyoubucuo ~]$vim /var/lib/tftpboot/pxelinux.cfg/default

default menu.c32
timeout 600
menu title Install CentOS Linux

label linux8
 menu label Auto Install CentOS Linux ^8
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img ks=http://10.0.0.8/ks/centos8.cfg

label linux7
 menu label Auto Install CentOS Linux ^7
 kernel centos7/vmlinuz
 append initrd=centos7/initrd.img ks=http://10.0.0.8/ks/centos7.cfg

label manual
 menu label ^Manual Install CentOS Linux 8.0
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img
inst.repo=http://10.0.0.8/centos/8/os/x86_64/

label rescue
 menu label ^Rescue a CentOS Linux system 8
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img
inst.repo=http://10.0.0.8/centos/8/os/x86_64/ rescue

label local
menu default
menu label Boot from ^local drive
localboot 0xffff

完成安装

原文地址:https://www.cnblogs.com/aiyoubucuo/p/14289358.html