通过 PowerShell 在 Hyper-V 批量创建 Linux 虚拟主机并设置IP

转载自:https://labdoc.cc/article/59/

母盘制作

首先安装一个基础镜像的系统

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值