zoukankan      html  css  js  c++  java
  • 运维自动化之系统部署

    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

    完成安装

  • 相关阅读:
    C#
    数据库SQL Server
    JavaScript题目
    vscode: Visual Studio Code 常用快捷键
    jQuery教程
    JavaScript快速排序
    JS编程艺术
    JS
    linux 笔记
    积累的各种资源
  • 原文地址:https://www.cnblogs.com/aiyoubucuo/p/14289358.html
Copyright © 2011-2022 走看看