介绍
为了捕获在Proxmox上设置测试基础架构的一些努力,我决定学习一些Terraform,以将Proxmox上的基础架构部署正式为Terraform配置。
。个人目标
- 从源构建Terraform提供商并从本地使用它(如果需要进一步扩展提供商,请使用Proxmox API提供的其他功能) )
- 使用proxmox上的Terraform部署N-LXC容器
提供者
1.建造提供商
我选择Telmate/Proxmox提供商作为Hashicorp上最受欢迎的提供商。
该提供商具有安静的全面友好结构,带有专用于Proxmox的特定逻辑的入门点main.go
和package proxmox
。
并且令人惊讶地安装。在Ubuntu上安装go compiler
和build-essentials
软件包后,make
做到了。
生成的提供商二进制terraform-provider-proxmox
存储在./bin
目录中。
2. Terraform搜索/查找提供商二进制文件在哪里
默认情况下,Terraform将直接从Hashicorp获取提供商,并在~/.terraform/plugins
中缓存。
如果我们想运行自定义构建的提供商,我们该怎么办是将其放在类似于下面的目录结构中。
我们现在可以在Terraform文件中调用该提供商,如下所示。
# lxc-example.tf
terraform {
required_providers {
proxmox = {
source = "terraform.local/telmate/proxmox"
}
}
}
provider "proxmox" {
pm_tls_insecure = true
pm_api_url = "https://localhost:8006/api2/json"
pm_password = "donthackmeplease"
pm_user = "root@hostname"
}
容器
1.最小的LXC容器
在这一点上,为了对我对这个提供商的理解有一点信心,我想创建一个简单的Terraform文件,为我旋转一个LXC容器,在Proxmox上指定的池中。
因此,此练习包括创建一个LXC容器:
- 在选择的池中(池是Proxmox中具有常见管理政策的资源分组,因此创建了此池,因为Proxmox允许视觉上将资源分组为池中,因此主要是出于美学目的) )))
- 使用1024MB的RAM
- 2vcpu
- 通过虚拟交换机连接到Internet
vmbr0
- 创建后立即开始。
- 基于LXC Ubuntu 22.04模板
为了实现此目的,我们可以读取示例Terraform文件terraform-provider-proxmox/examples/lxc_example.tf
来旋转代码库提供的LXC容器。但是,我们可以从Terraform的角度直接读取File terraform-provider-proxmox/proxmox/resource_lxc.go
,从而有助于我们直接阅读文件terraform-provider-proxmox/proxmox/resource_lxc.go
,因为它是对LXC资源的架构定义,这将有助于我们实现要求(基本上是按照方式映射的方式),这将有助于我们实现要求。 Terraform了解LXC容器对Proxmox的理解是什么)。
类似地,文件terraform-provider-proxmox/proxmox/resource_pool.go
提供了Pool
的架构定义。
- 创建池
TestPool1
# lxc-example.tf
resource "proxmox_pool" "pool-test" {
poolid = "TestPool1"
comment = "Just a test pool"
}
- LXC容器
resource "proxmox_lxc" "lxc-test" {
pool = proxmox_pool.pool-test.poolid # depends on pool-test
target_node = "pve" # node of your cluster on which deployment should be done
cores = 2
memory = 1024
hostname = "bot"
password = "rootroot"
network {
name = "eth0"
bridge = "vmbr0"
ip = "dhcp"
}
start = true # start after creation
# using ubuntu container template
ostemplate = "local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst"
rootfs {
storage = "local-lvm"
size = "8G"
}
}
-
ostemplate
指向找到容器的LXC模板的卷,并遵循某种promox的地址符号。
此特殊符号最终解析为本地文件系统路径,如下所示,对于我们的ubuntu-22.04-standard_22.04-1_amd64.tar.zst
模板的地址存储表示法。
-
rootfs
指定storage
(将存储VM磁盘的位置)及其size
测试:
$ terraform init
$ terraform plan # just to check
$ terraform apply
我通过研究此代码基础开发了一个过于简单的心理模型,如果您发现自己需要扩展/添加对某些Proxmox功能的支持,这可能很有用,
-
terraform cli
取决于Telmate/terraform-provider-proxmox
用于架构定义。 -
Telmate/terraform-provider-proxmox
使用Telmate/proxmox-api-go
将模式定义与Promox JSON API结合 -
Telmate/proxmox-api-go
最终通过其API与Proxmox服务器进行交互。
整个Telmate Codebase中使用的统一命名约定,使模式指令的名称与Proxmox Core API完全相同。
因此,我们直接向Proxmox API文档提到自己,以获取有关模式指令的角色/目的的描述/信息。
2.旋转20 LXC容器
我们旋转n=20
容器,我们可以使用Terraform的count
meta-argument。
resource "proxmox_pool" "pool-test" {
poolid = "TestPool1"
comment = "Just a test pool"
}
resource "proxmox_lxc" "lxc-test" {
count = 20 # create 20 lxc containers
pool = proxmox_pool.pool-test.poolid # depends on pool-test
target_node = "pve" # node of your cluster on which deployment should be done
cores = 1
memory = 512
hostname = "bot-${count.index}"
password = "rootroot"
network {
name = "eth0"
bridge = "vmbr0"
ip = "dhcp"
}
start = true # start after creation
# using ubuntu container template
ostemplate = "local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst"
rootfs {
storage = "local-lvm"
size = "8G"
}
}
运行terraform apply
后,我们得到
我们有它们,在池中创建了20个容器13
就像我们创建它们一样容易,我们可以使用terraform destroy