使用 Terraform 来管理创建 PVE 中的虚拟机

status
Published
type
Post
slug
use-terraform-on-pve
date
Dec 27, 2023
tags
PVE
Linux
Config
Terraform
DevOps
summary
使用 Terraform 在 PVE 中管理虚拟机,实现基础设施即代码(IaaS)。通过配置 Terraform 的 provider,使用 PVE 的 REST API 进行权限校验。可以通过用户名密码或 API Token 来鉴权。配置虚拟机资源的核心参数,包括基础信息、物理节点、cloud-init 模板、CPU、内存、磁盘、网络等。执行 terraform apply 即可创建虚拟机。如果需要销毁虚拟机,执行 terraform destroy 即可。

简介

Terraform 是一种基础设施即代码(IaC)工具,用于创建、更改和管理云基础设施资源。 它允许开发人员使用代码来预置和支持托管基础设施,解决了手动预置基础设施组件的困难和耗时问题。其使用一种名为 HashiCorp 配置语言(HCL)的特定领域语言来编写声明式配置文件。它还提供了自动化基础设施变更管理的机制,支持多云部署,并拥有活跃的开发人员社区。 与Kubernetes相比,Terraform的抽象级别更高,管理云环境中的资源及其配置,而Kubernetes专注于集群中容器的部署和生命周期。
 
借助 terraform-provider-proxmox 项目,可以在PVE中实现自动化快速创建虚拟机,省去繁杂的页面操作。

使用

安装配置

  • 编写 main.tf 文件以初始化项目
保存,执行terraform init ,如出现如下图所示即为初始化完成。
notion image
  • 配置 provider
使用 PVE 的 REST API 是需要权限校验的,可以通过用户名密码或 API Token 两种方式来鉴权,任选其一即可。
先登录到 PVE 宿主机执行命令创建好相应的角色、用户及 API Token:
notion image
用户名密码配置:
API Token 配置:
  • 配置虚拟机资源
这里是创建虚拟机的核心配置,详细参数说明可参阅
以上已经完成了 terraform 文件的编写。

创建虚拟机

执行 terraform fmtterraform validate对上面编写的 main.tf 文件进行格式化和校验,校验通过没什么问题的话就可以执行terraform apply并输入 yes 开始创建虚拟机了
notion image
 
因 PVE API变动,此 provider 会产生错误,如下
Stack trace from the terraform-provider-proxmox_v2.9.14 plugin: panic: interface conversion: interface {} is string, not float64
可使用第三方 Fork 的修复过后的 provider
Error: The terraform-provider-proxmox_v2.9.14 plugin crashed! (Proxmox 8.0.4 latest update)
Updated Jan 7, 2024
 

销毁虚拟机

执行 terraform destroy 再输入 yes 即可
 
 

参考致谢


2020 - 2024 © HK