はじめに
こんにちは たそ(@taso_int)です。
普段ははてなブログで技術ブログを投稿しております。
良かったら見てください。
https://taso-int.hatenablog.com/archive
今回はアドベントカレンダーということで、Proxmox VEについて書こうと思います。
本当はもうちょい凝ったものを出したかった…
Proxmox VEの説明については省略します。
仮想環境を提供できるプラットフォーム的なものです。
今回TerraformにProxmoxプロバイダーがあるので、それを利用してLXCを作成したいと思います。
LXCだけでなくVMも作成することが可能です。
今おうちK8sを作成しようとしていて、ノード数をTerraform側で制御出来たら面白いなと思った次第です…
環境
- Proxmox VE v8.2.2
- Terraform環境
- WSL(Ubuntu 22.04.3 LTS)
- Terraform(v1.9.8)
- Proxmox Provider(3.0.1-rc6)
WSLからProxmox VEに対してTerraformを動かすイメージを持っていければと思います。
Proxmox プロバイダー
- proxmox_vm_qemu(VM)
- proxmox_lxc(LXC)
仕組みとしてはProxmox側でAPIが提供されているので、それを利用しているものだと思われます。
今回は2番目のLXCを作成するリソースを利用したいと思います。
またドキュメントではTerraform用のProxmoxユーザーとロールを作成する必要がありますが、私しか使わないためrootで実施します。
Terraform コード類
Terraform初心者なので、かなり簡易なつくりになっています。
main.tf
terraform {
required_providers {
proxmox = {
source = "Telmate/proxmox"
version = "3.0.1-rc6"
}
}
}
provider "proxmox" {
pm_api_url = "https://192.168.137.100:8006/api2/json"
pm_user = "root@pam"
pm_password = var.pm_password
pm_tls_insecure = true
}
resource "proxmox_lxc" "k8s_node" {
for_each = var.nodes
target_node = "taso" # Proxmox側ノード名
vmid = each.value.vmid
hostname = each.value.hostname
ostemplate = "local:vztmpl/vzdump-lxc-100-2024_11_18-00_37_13.tar.gz" #普通のコンテナイメージでも可
cores = 2
memory = 2048
swap = 512
password = var.lxc_password
rootfs {
storage = "local-lvm"
size = "10G"
}
network {
name = "eth0"
bridge = "vmbr0"
ip = each.value.ip
gw = "192.168.137.1"
}
}
variables.tf
variable "pm_password" {
description = "Proxmox API password"
type = string
sensitive = true
}
variable "lxc_password" {
description = "Password for LXC container"
type = string
sensitive = true
}
variable "nodes" {
description = "Configuration for LXC nodes"
type = map(object({
vmid = number
hostname = string
ip = string
}))
default = {
"master" = {
vmid = 101
hostname = "k8s-master"
ip = "192.168.137.10/24"
}
"node1" = {
vmid = 102
hostname = "k8s-node1"
ip = "192.168.137.11/24"
}
"node2" = {
vmid = 103
hostname = "k8s-node2"
ip = "192.168.137.12/24"
}
}
}
試してみる
初回実行はTerraform init
が必要になります。
またパスワードを環境変数に登録します。
export TF_VAR_pm_password=<Proxmox側のパスワード>
export TF_VAR_lxc_password=<LXCで設定するパスワード>
Terraform apply
を実行します。
Apply complete!
がでれば成功ですね。
改善ポイント
以下改善したいポイントで機能として追加したいです。
- node側のノード数を増やせる設計(Countとかで増やせるのが理想)
- Terraformのモジュール化(かっこよさそう)
- IP周りの管理(NetBoxと組み合わせてアドレスを管理する)
最後に
ここまで読んでいただきありがとうございました。
おうちK8sを完成して、K8sの勉強をしたいと思います。