Terraform创建VMware虚拟机(vsphere7.0)

背景

一句话需求:

  • 懒得手动登录vcenter创建虚拟机,就算使用模板/克隆也挺麻烦的。需要快速创建大量虚拟机。

一句话解决:

  • 使用terraform和/Terraform-VMWare-Modules的vm模块可以接入自建VMwareVsphere集群,通过编写tf文件快速创建大量虚拟机。

参考文章

【Terraform官方:Terraform-VMWare-Modules模块文档】
【GitHub仓库:terraform-vsphere-vm模块】
【Terraform官方:Provider仓库】
【Terraform官方:下载地址】

实际使用

安装terraform

方式一: 参考我安装PowerCli的文章【Windows安装Powercli管理虚拟机】,在windows上使用chcoo安装terraform。
方式二: 官网下载安装包,在Linux上解压安装。【Terraform官方:下载地址】,解压后即可使用,可复制到bin或sbin目录下全局使用。

编写terraform.tf文件(定义虚拟机配置)

参考【GitHub仓库:terraform-vsphere-vm模块】提供的创建虚拟机需要的main.tf实例文件进行修改,以下贴出示例文件和我的实际文件(隐去了部分密码信息)。
官方示例文件:

# Configure the VMware vSphere Provider
provider "vsphere" {
  user           = "fill"
  password       = "fill"
  vsphere_server = "fill"

  # if you have a self-signed cert
  allow_unverified_ssl = true
}

# Deploy 2 linux VMs
module "example-server-linuxvm" {
  source    = "Terraform-VMWare-Modules/vm/vsphere"
  version   = "X.X.X"
  vmtemp    = "VM Template Name (Should Alrerady exist)"
  instances = 2
  vmname    = "example-server-linux"
  vmrp      = "esxi/Resources - or name of a resource pool"
  network = {
    "Name of the Port Group in vSphere" = ["10.13.113.2", "10.13.113.3"] # To use DHCP create Empty list ["",""]; You can also use a CIDR annotation;
  }
  vmgateway = "10.13.113.1"
  dc        = "Datacenter"
  datastore = "Data Store name(use datastore_cluster for datastore cluster)"
}

实际使用中我的文件:

# Configure the VMware vSphere Provider
provider "vsphere" {
  user           = "[email protected]"
  password       = "xxxxxxxxxx"
  vsphere_server = "192.X.X.X"

  # if you have a self-signed cert
  allow_unverified_ssl = true
}

# Deploy 2 linux VMs
module "example-server-linuxvm" {
  source    = "Terraform-VMWare-Modules/vm/vsphere"
  version   = "3.7.0"
  vmtemp    = "RockyLinux9-el9-server-static-xxxxxxxxx"
  instances = 3
  vmname    = "CZM-Rocky9-Target-Auto"
  vmrp      = "czm"
  cpu_number = 4
  ram_size = 4096
  cpu_hot_add_enabled = true
  network = {
    "DPortGroup-VTAG_X-X.X.X-10.42.X.X" = ["10.42.X.X1", "10.42.X.X2","10.42.X.X3"]  # To use DHCP create Empty list ["",""]; You can also use a CIDR annotation;
  }
  vmgateway = "10.42.X.1"
  dc        = "Datacenter-730"
  datastore = "XXXX-8TB-03"
  vmfolder  = "czm"
}

配置文件对应的VMware资源参考截图
有点乱,但是有用。
Terraform创建VMware虚拟机(vsphere7.0)_第1张图片

执行terraform创建虚拟机

  1. 初始化并安装模块
terraform.exe init
  1. 验证创建步骤
terraform.exe plan
  1. 实际创建虚拟机
terraform.exe apply #会出现提示确认是否真实执行。
terraform apply --auto-approve #不用再次验证yes,直接执行。
  1. 创建完成。
    成功创建了3台虚拟机,但网络配置没有符合预期。
    Terraform创建VMware虚拟机(vsphere7.0)_第2张图片

Terraform创建VMware虚拟机(vsphere7.0)_第3张图片

此处问题大概率是因为RockyLinux的配置和支持在ESXi 7.0.0版本中不兼容造成。
可根据实际需要解决,但若虚拟机已经创建,满足测试需求,则可选择性忽略。
Terraform创建VMware虚拟机(vsphere7.0)_第4张图片
经测试,使用在ESXi 7.0中支持的CentOS 7虚拟机模板则无此问题,网络配置正常。
可登录RockyLinux手动配置IP,可参考我的文章:【Rocky Linux 9 配置IP并生效】

相关截图

初始化模块
Terraform创建VMware虚拟机(vsphere7.0)_第5张图片
验证创建结果

实际执行创建虚拟机操作
Terraform创建VMware虚拟机(vsphere7.0)_第6张图片

创建RockyLinux虚拟机成功,但配置失败。
Terraform创建VMware虚拟机(vsphere7.0)_第7张图片

结束

你可能感兴趣的:(运维,Linux,运维自动化,terraform,云原生)