轉載于點選這裡跳轉
一、建立虛拟磁盤
qemu-img create -f qcow2 /home/kvm/data/kube-master.qcow2 50G
二、擷取鏡像檔案
mkdir -p /home/kvm/iso
wget http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso -O /home/kvm/iso/CentOS-7-x86_64-Minimal-2009.iso
二、ks.cfg檔案模闆
擷取自定義加密密碼
[[email protected] ~]# echo "123456" | openssl passwd -1 -stdin
$1$6/DHuw2K$asw93Ziu0VfVitjjmWN5s1
[[email protected] ~]# mkdir -p /home/kvm/ks/
[[email protected] ~]# vim /home/kvm/ks/ks.cfg
[[email protected] ~]# cat /home/kvm/ks/ks.cfg
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$KXeyOPUO$5JlUe3pPpi.hplHB71JdX/ #填寫生成的加密密碼
# 系統語言
#lang zh_CN.UTF-8
lang en_US
# System authorization information
auth --useshadow --passalgo=sha512
# Use CDROM installation media
#cdrom
# Use text mode install
# 使用字元界面安裝作業系統
text
# Do not configure the X Window System
# 不配置圖形界面系統
skipx
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled
# 設定動态擷取 IP
network --bootproto=dhcp --device=eth0 --onboot=on
network --hostname=HOSNAME
# 設定靜态 IP
# network --bootproto=static --device=eth0 --gateway=192.168.122.1 --ip=192.168.122.100 --nameserver=192.168.122.1 --netmask=255.255.255.0 --activate
# 系統安裝完成後 重新開機系統
#halt
reboot
# System timezone 系統時區
timezone Asia/Shanghai
# System services 系統啟動時候自動啟動的服務
services --enable="chronyd"
# System bootloader configuration
#系統啟動引導方式 vda 是kvm 虛拟機時候的第塊磁盤名稱
bootloader --location=mbr --boot-drive=vda
# 清除主引導記錄
zerombr
# 删除原來的分區和磁盤标簽
clearpart --all --initlabel
# 磁盤分區資訊,這裡采用的是 lvm 自動分區
autopart --type=lvm
# 下面是自定義分區
#part /boot --fstype="xfs" --ondisk=vda --size=200
#part / --fstype="xfs" --ondisk=vda --size=10040
#part /var --fstype="xfs" --ondisk=vda --size=2048
#part /home --fstype="xfs" --ondisk=vda --size=2048
# 安裝軟體
%packages
@^minimal
@core
chrony
%end
# 禁用 kdump
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
# 安裝系統完成後執行的指令腳本
%post --interpreter=/bin/bash
yum install -y epel-release bash-completion vim-enhanced wget
yum group install "Development Tools" -y
%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
三、安裝kvm 虛拟機的腳本
#!/usr/bin/env bash
set -ue
set -o pipefail
# 建立相關目錄
ls /home/kvm/{ks,virtualhost,virtual-img} 1>/dev/null 2>&1 || mkdir -p /home/kvm/{ks,virtualhost,virtual-img}
# 此程式的變量
KVM_HOME=/home/kvm
KVM_ISO=${KVM_HOME}/iso/CentOS-7-x86_64-Minimal.iso
KVM_KS_FILE=${KVM_HOME}/ks/ks.cfg
KVM_IMG_DIR=${KVM_HOME}/virtual-img
OS_TYPE="linux"
DEF_OS_VARIANT="rhel7"
DEF_VM_NAME="centos$(date +%Y%m%dT%H%M%S)"
# 設定預設記憶體大小 1024 M,這個機關是固定的 M,不支援其他機關
DEF_MEM_SIZE=1024
DEF_VCPUS=1
DEF_DISK_SIZE=10G
# 互動式安裝
echo "輸入将要建立的KVM虛拟機名稱,不是主機名哦"
read -p "預設值${DEF_VM_NAME}>>:" VM_NAME
echo "輸入将要建立的伺服器主機名"
read -p "預設 localhost>>:" HOST_NAME
read -p "輸入虛拟機 CPU 核心數預設 1 示例:2>>:" VCPUS
echo "輸入虛拟機記憶體大小,預設1024M,不支援其他機關"
read -p "隻需要添數字即可>>:" MEM_SIZE
echo "輸入虛拟機使用的磁盤容量"
read -p "預設 10G,[示例寫法:15G]>>:" DISK_SIZE
# 變量替換, 假如沒有輸入值, 就使用預設值
VM_NAME=${VM_NAME:-$DEF_VM_NAME}
HOST_NAME=${HOST_NAME:-localhost.localdomain}
VCPUS=${VCPUS:-$DEF_VCPUS}
MEM_SIZE=${MEM_SIZE:-$DEF_MEM_SIZE}
DISK_SIZE=${DISK_SIZE:-$DEF_DISK_SIZE}
OS_VARIANT=${OS_VARIANT:-$DEF_OS_VARIANT}
new_disk=${KVM_IMG_DIR}/${VM_NAME}.qcow2
if [[ ! "${DISK_SIZE}" =~ G$ ]] || [[ ! "${DISK_SIZE::-1}" =~ ^[0-9]+$ ]]
then
echo "格式不正确,正确示例:20G"
exit
fi
if [ ! -f "${new_disk}" ];then
qemu-img create -f qcow2 ${new_disk} ${DISK_SIZE}
fi
# 開始建立
virt-install -v \
--arch x86_64 --virt-type kvm \
--name ${VM_NAME} \
--memory ${MEM_SIZE} \
--vcpus ${VCPUS} \
--os-type ${OS_TYPE} \
--location ${KVM_ISO} \
--network default \
--graphics none \
--os-variant ${OS_VARIANT} \
--initrd-inject "${KVM_KS_FILE}" \
--extra-args "ks=file:/ks.cfg \
console=tty0 console=ttyS0,115200n8 \
hostname=${HOST_NAME}" \
--disk ${new_disk},cache=writeback,io=threads,bus=virtio
# 橋接模式,前提是你已經建立好了網橋
# --network bridge=br0 \
# end