Author: Ju4t
首先安装一个基础镜像的系统
Linux 启动脚本,执行 init.sh
虚拟机启动后的操作
cat <<EOF > /init.sh
#!/bin/bash
mount /dev/cdrom /mnt
cp /mnt/init.sh /set.sh
chmod +x /set.sh
# 修改IP
/bin/sh /set.sh
# rm -f /etc/rc.d/rc.local
# 避免重复启动
rm -rf /init.sh
rm -rf /set.sh
# 卸载
eject /dev/cdrom
history -c
init 6
EOF
母盘机器上最后操作
chmod +x /etc/rc.d/rc.local
chmod +x /init.sh
cat >> /etc/rc.d/rc.local << EOF
/bin/sh /init.sh
EOF
init 0
根据实际情况修改后复制内容,在 PowerShell
中执行
# 导入Hyper-V模块
Import-Module Hyper-V
# 定义变量
$VmConfig = @{
VhdParentPath = "D:\Hyper-V\CENTOS_79\Virtual Hard Disks\disk0.vhdx" # 母盘位置
oscdimgPath = "D:\Hyper-V\oscdimg.exe" # iso生成工具
SwitchName = "vSwitch" # 交换机名称
Interface = "eth0" # 网卡名称
Generation = 1 # 第几代虚拟机
MemoryStartupBytes = 4GB # 启动内存
MemoryMinimumBytes = 2GB # 最低内存
MemoryMaximumBytes = 8GB # 最大内存
ProcessorCount = 8 # CPU核心数
ProcessorMaximum = 100 # CPU限制百分比
MaximumCountPerNumaSocket = 2 # NUMA节点数,物理CPU数
}
# 定义函数
Function MyNewVM($VmConfig){
$VMDIR = "D:\Hyper-V\" + $VmConfig.GuestName
$VHDPath= $VMDIR + "\Virtual Hard Disks\disk0.vhdx"
# 创建VHD
New-VHD -Path $VHDPath -ParentPath $VmConfig.VhdParentPath
$VMLOC="D:\Hyper-V\"
# 创建虚拟机
New-VM -Name $VmConfig.GuestName -Generation 1 -Path $VMLOC -MemoryStartupBytes $VmConfig.MemoryStartupBytes -VHDPath $VHDPath -SwitchName $VmConfig.SwitchName
# 设置内存
Set-VMMemory -VMName $VmConfig.GuestName -DynamicMemoryEnabled 1 -MinimumBytes $VmConfig.MemoryMinimumBytes -MaximumBytes $VmConfig.MemoryMaximumBytes
# 设置内核数量
Set-VMProcessor -VMName $VmConfig.GuestName -Count $VmConfig.ProcessorCount -ExposeVirtualizationExtensions $true -Maximum $VmConfig.ProcessorMaximum -MaximumCountPerNumaSocket $VmConfig.MaximumCountPerNumaSocket
# 生成 init.sh,修改IP
New-Item -Path $VMDIR\ -Name "iso" -ItemType "directory"
# 修改网络配置文件中的 IP 地址
New-Item $VMDIR\iso\init.sh -type File
# 生成脚本的内容
$script = @"
#!/bin/bash
# Replace the IP address with the new IP address in the network configuration file
sed -i 's/\(IPADDR=\)"*\([0-9.]*\)"*/\1"$( $VmConfig.Ip )"/' /etc/sysconfig/network-scripts/ifcfg-$($VmConfig.Interface)
"@
# 将脚本内容写入 init.sh 文件
$script | Out-File -Encoding utf8 $VMDIR\iso\init.sh
# 将 Windows 格式的换行符替换为 Linux 格式的换行符
(Get-Content -Path $VMDIR\iso\init.sh -Raw) -replace "`r`n", "`n" | Set-Content -Path $VMDIR\iso\init.sh -NoNewline -Encoding utf8
# 构建 init.iso $VmConfig.OscdimgPath
& $VmConfig.oscdimgPath -d -n -h -k -m -lcuteidc $VMDIR\iso\ $VMDIR\init.iso
# 挂载 init.iso
set-VMDvdDrive -VMName $VmConfig.GuestName -path $VMDIR\init.iso
# 删除 iso目录
Remove-Item -Path "$VMDIR\iso" -Recurse -Force
# 启动
Start-VM -Name $VmConfig.GuestName
}
# 创建虚拟机并启动
for ($i=71; $i -le 71; $i++) {
$VmConfig.GuestName="k8s_node" + $i
$VmConfig.Ip="192.168.8." + $i
MyNewVM($VmConfig)
}
Generation VM 1代、2代
oscdimg 网上下载,放到对应的位置
New-VM -Name k8s_node001 -SwitchName VLAN
Set-VMMemory k8s_node001 -DynamicMemoryEnabled $true -MaximumBytes 10240MB -MinimumBytes 2048MB
Add-VMHardDiskDrive -VMName k8s_node001 -Path "D:\Hyper-V\Virtual Hard Disks\Win7-001.vhdx"
New-VHD -ParentPath "C:\Hyper-V\Virtual Hard Disks\Win7-000.vhdx" -Path "C:\Hyper-V\Virtual Hard Disks\Win7--002.vhdx" -Differencing
New-VM -Name Win7-002 -SwitchName VLAN
Set-VMMemory Win7-002 -DynamicMemoryEnabled $true -MaximumBytes 2048MB -MinimumBytes 512MB
Add-VMHardDiskDrive -VMName Win7-002 -Path "C:\Hyper-V\Virtual Hard Disks\Win7-002.vhdx"
Set-VMMemory k8s_node61 -DynamicMemoryEnabled $true -MaximumBytes 16384MB -MinimumBytes 4096MB