今回参考にした記事は、一番下にリンクをおいておく。
ミニPCを手に入れた。GMKtecのNucBox3というやつで、Amazonで1.4万弱で購入した。 スペックは、
| CPU | Celeron J4125 |
| Mem | DDR4 8GB |
| SSD | 128GB |
結構値段の割にいいと思う(中古のシンクラ的なやつのほうがスペックは良さそうだけど、こっちは新品だし、入手も簡単だし)。
届いてから知ったが、CeleronとPentiumを統合した新しいブランドIntel Processorになるらしい。で、今、出始めているN100、N95がコスパめちゃ高そうで次買うならそれらかな~。
とりあえず起動してみる
起動すると、windows11のセットアップ画面にいった。適当にすすめていって、ライセンス認証までできた。

でもwindowsは使わないので、これだけ。
Proxmoxをインストールする
公式ダウンロードページからisoをダウンロードして、適当なUSBに書き込む。
BIOSからUSBでブートさせるようにして、起動。適当にインストーラを進めた。
Hostnameのところはpve.localとした。IPはDHCPで192.168.0.20を与える。DNSはちゃんと使えるDNSサーバーを指定する。8.8.8.8とか1.1.1.1とか、もしかしたら192.168.0.1とか。
5分もせずにインストールが終わった。終わったらUSBを抜いておく。
Proxmoxの初期設定
https://192.168.0.20:8006/からGUIが見れる。そこからshell操作もできる。
aptのリポジトリを無償版にする
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscriptionを追加。
|
|
有償版リポジトリを無効に(コメントアウト)する。
|
|
VMを作る
今回はterraformを使って、VMを作る。
クラウドイメージからVM作成 -> テンプレート化 -> テンプレートからVM作成といった流れ。
テンプレートを作る
ブラウザから、作られていく状況(コマンドの反映)を見ることができる。
以下はブラウザのconsoleで実行した。
# proxmoxノード内でやる(今回は`pve`)
# cloud imageを取得
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img -O ubuntu-22.04-server-cloudimg-amd64.img
# イメージを編集するツールをいれる
apt install libguestfs-tools -y
# qemu-guest-agentを入れる
# ipアドレスをダッシュボードから見たりできるようになる
virt-customize -a ubuntu-22.04-server-cloudimg-amd64.img --install qemu-guest-agent
# vmを作成
qm create 9000 --net0 virtio,bridge=vmbr0
# 名前を付ける
qm set 9000 --name ubuntu-22.04
# ディスクイメージをインポート(qemu-img形式)
qm importdisk 9000 ubuntu-22.04-server-cloudimg-amd64.img local-lvm
# インポートしたディスクをvirtio0としてアタッチ
qm set 9000 --scsihw virtio-scsi-pci --virtio0 local-lvm:vm-9000-disk-0
# ブートデバイスを選択
qm set 9000 --boot order=virtio0
# Cloud-initが使うCD-ROMドライブを追加
qm set 9000 --ide2 local-lvm:cloudinit
# DNSを設定する
qm set 9000 --nameserver 192.168.0.1
# 最後にテンプレート化
qm template 9000
apiトークンを作る
Datacenter -> Permissions -> API Tokens -> Addでトークンを発行できる。
userをroot@pam、Token IDをterraform、Privilege Separationのチェックを外す。
以下のようなトークンが得られる
root@pam!terraform
9b742f84-9a21-4d05-84c3-36d3f6a4c00c
Terraformを使ってテンプレートからVMを作る
環境はこんなかんじ。
❯ terraform -version
Terraform v1.4.2
on darwin_arm64
+ provider registry.terraform.io/telmate/proxmox v2.9.14
main.tfを用意する。その中で、先程取得したtokenなどを使う。
|
|
変数を書いた、vm1.tfvarsも作る。
2コア、メモリ2GB、ディスク20GB、IP192.168.0.51を指定する。
public_keyを正しいものにしないと、ログインできなくなる。
|
|
デプロイする
❯ terraform init
❯ terraform plan -var-file vm1.tfvars
❯ terraform apply -var-file vm1.tfvars
以下のようになって、VMが作られる。ヤッタネ。
❯ terraform apply -var-file vm1.tfvars
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
+ create
Terraform will perform the following actions:
# proxmox_vm_qemu.temp-vm will be created
+ resource "proxmox_vm_qemu" "temp-vm" {
+ additional_wait = 5
+ automatic_reboot = true
+ balloon = 0
+ bios = "seabios"
+ boot = "order=scsi0"
+ bootdisk = (known after apply)
+ ciuser = "testuser"
+ clone = "ubuntu-22.04"
+ clone_wait = 10
+ cores = 2
+ cpu = "host"
+ default_ipv4_address = (known after apply)
+ define_connection_info = true
+ force_create = false
+ full_clone = true
+ guest_agent_ready_timeout = 100
+ hotplug = "network,disk,usb"
+ id = (known after apply)
+ ipconfig0 = "ip=192.168.0.51/24,gw=192.168.0.1"
+ kvm = true
+ memory = 2048
+ name = "temp-vm-testuser"
+ nameserver = (known after apply)
+ onboot = false
+ oncreate = true
+ os_type = "cloud-init"
+ preprovision = true
+ reboot_required = (known after apply)
+ scsihw = "lsi"
+ searchdomain = (known after apply)
+ sockets = 1
+ ssh_host = (known after apply)
+ ssh_port = (known after apply)
+ sshkeys = <<-EOT
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDi41SY7y05u3bt/ntCCSaeu2Sdb/usUI4gkZYFSInyGe4FmHXxuTCqimcKwH08kBP0CgEf8WJIQOG4/foM64iI/8EN2uFYQ5rEPYoIWKgUJbfKEUL5b+gPEd4++tvu3mPX0rvhHUmuVEHKhB+xAlYV8FAzOH0zCkSteRFmaRAbbX2E+fhl1n6Z4ruwdgYmF06Jn8QnHuMw0yKsV/8Wn2nLzBOUR4Du9gf3mD4EluN2POO9FIv0IH14bteLgqyOsTwWV+FRkZGMH1Zi0fE6Y+ewaii0bwf8nFqpIAIVHAZSimtl1mdLg7UcJrDfTM7I4XdMANxYVqIaQEMHQRAcHTBJaDX5B0ed/Y0T3NW0/sdOHZyL3zryw2S+NB9ll9Sq1EyI3IFnEZrAFuQVIip5xQCOZWoUghMDeyOBfx7bvy4bJWtKBC6VfMPIvXiqxEO9mKK3RGLMPepQYT+IIaFmDOXKAqV036dVqIA6DX9KEx8Ey220sG4/dtiGYu2DdshgEo0= user@test
EOT
+ tablet = true
+ target_node = "pve"
+ unused_disk = (known after apply)
+ vcpus = 0
+ vlan = -1
+ vmid = (known after apply)
+ disk {
+ backup = false
+ cache = "none"
+ file = (known after apply)
+ format = (known after apply)
+ iops = 0
+ iops_max = 0
+ iops_max_length = 0
+ iops_rd = 0
+ iops_rd_max = 0
+ iops_rd_max_length = 0
+ iops_wr = 0
+ iops_wr_max = 0
+ iops_wr_max_length = 0
+ iothread = 0
+ mbps = 0
+ mbps_rd = 0
+ mbps_rd_max = 0
+ mbps_wr = 0
+ mbps_wr_max = 0
+ media = (known after apply)
+ replicate = 0
+ size = "20G"
+ slot = (known after apply)
+ ssd = 0
+ storage = "local-lvm"
+ storage_type = (known after apply)
+ type = "virtio"
+ volume = (known after apply)
}
+ network {
+ bridge = "vmbr0"
+ firewall = false
+ link_down = false
+ macaddr = (known after apply)
+ model = "virtio"
+ queues = (known after apply)
+ rate = (known after apply)
+ tag = -1
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
proxmox_vm_qemu.temp-vm: Creating...
proxmox_vm_qemu.temp-vm: Still creating... [10s elapsed]
proxmox_vm_qemu.temp-vm: Still creating... [20s elapsed]
proxmox_vm_qemu.temp-vm: Still creating... [30s elapsed]
proxmox_vm_qemu.temp-vm: Still creating... [40s elapsed]
proxmox_vm_qemu.temp-vm: Creation complete after 40s [id=pve/qemu/100]
Apply complete! Resources: 1 added, 0 changed, 1 destroyed.
このイメージはqemu-guest-agentを追加してあるため、DHCPでIPを割り振っても、webから確認できる。

おわり
ブラウザからも今回作ったテンプレート(ID9000)は使えて、それをもとにcloud-initも使用してGUIから簡単にVMを作成できる。もちろんqmコマンドでもできる。
作って壊してってやってるだけでも面白い。

以下のリンクも要参照。