一、使用virt-install創建新的虛擬機
virt-install --name CentOS7.6-template --ram 2048 --vcpu=2 --virt-type kvm --cdrom=/Data/kvm/iso/CentOS-7.6-x86_64-DVD-1810.iso \ --disk /Data/kvm/img/test/CentOS7.6-template.qcow2,size=50,bus=virtio --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole # 命令解釋: --name # 虛擬機名稱,需全局惟一 --ram # 虛擬機內在大小,單位為MB --vcpu # VCPU個數及相關配置 --virt-type # 使用的hypervisor,如kvm、qemu、xen等;所有可用值可以使用virsh capabilities命令獲取; --cdrom # 光盤安裝介質 --disk /Data/kvm/img/test/CentOS7.6-template.qcow2,size=50,bus=virtio # 指定存儲設備及其屬性 --network bridge=br1 # 將虛擬機連入宿主機的網絡中 --graphics vnc,listen=0.0.0.0 # 使vnc可以連接 --noautoconsole # 禁止自動連接至虛擬機的控制台
使用命令創建完成之后,查到vnc端口是5901,如果是第一次安裝默認是5900
使用vnc連接並安裝系統
為統一網卡的名稱為eth0所以要進行如下配置:
1. 選擇“Install Centos 7” 2. 按Tab,打開kernel啟動選項后,增加 net.ifnames=0 biosdevname=0
方案一:系統磁盤大小50G;最小化安裝配置,磁盤分區因為是虛擬機,為了不影響性能,只創建/根分區,不創建SWAP分區
方案二:系統磁盤大小20G;再按需求掛載數據盤到系統的/Data目錄下;
二、系統層面初始化配置
2.1 安裝完成之后啟動虛擬機,先通過vnc連接
virsh start CentOS7.6-template
2.2 連接上之后啟動服務serial-getty@ttyS0.service,以便宿主機能使用console命令連接
systemctl start serial-getty@ttyS0.service
systemctl enable serial-getty@ttyS0.service
2.3 關閉firewalld和NetworkManager服務
systemctl stop firewalld
systemctl stop NetworkManager
systemctl disable firewalld
systemctl disable NetworkManager
2.4 禁用SELinux服務
setenforce 0 sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
2.5 配置網卡和DNS信息,ifcfg-eth0只保留如下幾行,一定要刪除UUID,或者手動指定IP需要時再進行替換
# 配置網卡信息
cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=dhcp NAME=eth0 DEVICE=eth0 ONBOOT=yes
# 配置DNS
cat /etc/resolv.conf
nameserver 114.114.114.114
nameserver 223.5.5.5
# 修改主機名
hostnamectl set-hostname 192-168-5-29
2.6 配置epel源安裝常用軟件
rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm yum install -y net-tools vim lrzsz tree screen lsof tcp wget tcpdump nc mtr nmap openssl-devel ntpdate glances bash-completion psmisc
2.7 配置文件描述符數量
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf
2.8 設置記錄歷史命令
echo 'export HISTTIMEFORMAT=" %F %T `whoami` "' >> /etc/profile source /etc/profile
2.9 如果內網沒有ntpd服務可以同步公網的時間
crontab -e */5 * * * * /usr/sbin/ntpdate time1.aliyun.com
2.10 可以配置一些內核參數的優化,參見鏈接
https://www.cnblogs.com/cyleon/p/10309969.html cat /etc/sysctl.conf # 表示套接字由本端要求關閉,這個參數決定了它保持在FIN-wAIT-2狀態的時間,默認值是60秒,建議調整為2,該參數對應系統路徑為:/proc/sys/net/ipv4/tcp_fin_timeout 60 net.ipv4.tcp_fin_timeout = 2 # 表示開啟TCP鏈接中TIME_WAIT sockets的快速回收,該參數對應系統路徑為:/proc/sys/net/ipv4/tcp_tw_recycle,默認為0 表示關閉,不建議開>啟,因為nat網絡問題 net.ipv4.tcp_tw_reuse = 1 # reuse和recycle這倆個參數是為防止生產環境下web,squid等業務服務器time_wait網絡狀態數量過多設置的 net.ipv4.tcp_tw_recycle = 0 #表示開啟SYN Cookies功能,當出現SYN等待隊列溢出時,啟用Cookies來處理,可防范少量SYN攻擊,該參數對應系統路徑為:/proc/sys/net/ipv4/tcp_syscookies,默認為1,表示開啟 net.ipv4.tcp_syncookies = 1 # 關閉ipv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 # 避免放大攻擊 net.ipv4.icmp_echo_ignore_broadcasts = 1 #允許系統打開的端口范圍,不建議從1024開始,因為某些端口會存在10000以內。一般情況下已夠用。 net.ipv4.ip_local_port_range = 10000 65000
2.11 允許root可以ssh登錄
# 打開允許root允許ssh登錄 sed -i 's#\#PermitRootLogin yes#PermitRootLogin yes#g' /etc/ssh/sshd_config # 安全配置可設置hosts.all和hosts.deny cat /etc/hosts.allow ##IDC LAN ip sshd:192.168.5.0/255.255.255.0 sshd:10.0.0.1/255.255.255.0 cat /etc/hosts.deny sshd:all # 重啟sshd服務 systemctl restart sshd
2.12 修改緩存、清理歷史命令
yum clean all yum makecache history -c
2.13 將ansible的公鑰推入模板中
[root@ansible ~]# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.5.29
2.14 最后關機做成模板
三、使用模板創建虛擬機
可以制作多個不同的模板,按業務環境需求,直啟動。
或者模板創建完成之后再使用salt-stack或ansible按需求進行初始化配置。
cp /Data/kvm/img/test/CentOS7.6-template.qcow2 /Data/kvm/img/test/node-192.168.5.90-test.qcow2 virt-install --name node-192.168.5.90-test --ram 4096 --vcpu=2 --virt-type kvm --disk /Data/kvm/img/test/node-192.168.5.90-test.qcow2,bus=virtio --network bridge=br1,model=virtio --import --noautoconsole