ProxmoxでCloud-initを使う

投稿者: | 3月 2, 2025

近所のオーケーでついにゲット。しるこサンド。

名古屋まで行かないと手に入らないのかなぁと思ったら。

 

閑話休題

 

Cloud-init系もこれで大方終了、

ProxmoxでCloud-initを使ってみた。結果としてちゃんと使えるが

  • VMでしか使えない。
  • GUIからは大した設定ができない。
  • コマンドラインから使うと従来通りのuser-dataの設定ができるし、Qemu Guest Agentが最初から使える。(これがベスト!)

という事だった。VMで使うよりコンテナで使いたかったが、CLIインタフェースがProxmox独自なので仕方ないか。

 

GUIからも利用できるCloud-initの設定

あくまでも簡易的に使うというか、Cloud-initを利用して、ホスト名とかIP、ユーザの設定ができるよ。というレベル。本格的に利用するなら、この後のカスタムで設定したほうがいい。

イメージのダウンロード

wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

 

イメージの導入と仮想マシン設定

vmTemplateid=9000
qm create ${vmTemplateid} --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
qm set ${vmTemplateid} --scsi0 local-lvm:0,import-from=/root/noble-server-cloudimg-amd64.img
rm /root/noble-server-cloudimg-amd64.img
qm set ${vmTemplateid} --ide2 local-lvm:cloudinit
qm set ${vmTemplateid} --boot order=scsi0
qm set ${vmTemplateid} --serial0 socket --vga serial0
qm set ${vmTemplateid} --agent enabled=1
qm set ${vmTemplateid} --ipconfig0 ip=dhcp
qm set ${vmTemplateid} --machine q35

 

ここでテンプレートの仮想マシンの設定を行っておく

 

テンプレートの作成

qm template ${vmTemplateid} 

 

テンプレートからデプロイ

vmid=123
qm clone ${vmTemplateid} ${vmid} --name ubuntu1

 

GUIでの設定

Cloud-initの設定をしたら、Regenerate Imageをクリックしてからパワーオン。

 

Cloud-initをカスタムで設定したい場合

実は、こっちの方が便利。qemu-guest-agentも自動でインストールできる。

注意:この設定をするとGUIからこのテンプレートVMのCloud-initの設定は効かなくなるので注意

Snippetsの指定をしてある前提

Storageの「local」にSnippetsの設定を追加するだけだが。

 

イメージのダウンロード

wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

 

イメージの導入と仮想マシン設定

vmTemplateid=9001
qm create ${vmTemplateid} --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
qm set ${vmTemplateid} --scsi0 local-lvm:0,import-from=/root/noble-server-cloudimg-amd64.img
rm /root/noble-server-cloudimg-amd64.img
qm set ${vmTemplateid} --ide2 local-lvm:cloudinit
qm set ${vmTemplateid} --boot order=scsi0
qm set ${vmTemplateid} --serial0 socket --vga serial0
qm set ${vmTemplateid} --agent enabled=1
qm set ${vmTemplateid} --ipconfig0 ip=dhcp
qm set ${vmTemplateid} --machine q35

 

Cloud-initのyamlを作成

デフォルトを参考にして追加した。またパッケージにqemu-guest-agentを追加した。パッケージを追加してもqemu-guest-agentが立ち上がらなかったので、runcmdで起動と有効化をするようにした。これですぐにGUIでIPアドレスが表示されるようになる。

CONTAINER=ubuntu-test1
USER_PASSWD=Password
cat << EOF >/var/lib/vz/snippets/${vmTemplateid}_cloudinit_userdata-custom.yaml
#cloud-config
hostname: ${CONTAINER}
manage_etc_hosts: true
fqdn: ${CONTAINER}
timezone: Etc/UTC
locale: en_US.utf8
package_update: true
package_upgrade: true
packages:
- openssh-server
- qemu-guest-agent
users:
- name: testuser
  shell: /bin/bash
  ssh-authorized-keys:
    - $(cat ~/.ssh/id_rsa.pub)
  sudo: ALL=(ALL) NOPASSWD:ALL
  passwd: "${USER_PASSWD}"
  lock_passwd: false
chpasswd:
expire: false
list:
  - testuser:${USER_PASSWD}
ssh_pwauth: true
write_files:
- content: |
    alias diff='diff --color=auto'
    alias ip='ip -color=auto'
  path: /etc/profile.d/Z99-addedcolour.sh
runcmd:
- systemctl restart qemu-guest-agent
- systemctl enable qemu-guest-agent
EOF
qm set ${vmTemplateid} --cicustom "user=local:snippets/${vmTemplateid}_cloudinit_userdata-custom.yaml"

 

テンプレートの作成

qm template ${vmTemplateid} 

 

テンプレートからデプロイ

vmid=123qm clone ${vmTemplateid} ${vmid} --name ubuntu1

 

パワーオン

Qemu Guest Agentが動作しているはずなので、GUIにVMのIPアドレスが表示されるはず。

 

それにしても、コンテナでもCloud-initが動けばなぁ。というわけで、Proxmoxでのコンテナの利用は、無し寄りの無しになりました。まぁおまけだよなぁ。Proxmoxに普通にVM入れて、そこにLXDを入れた方が便利。(意見には個人差があります。)

コメントを残す