Proxmox VE 5.2でCloud-Initが使えるようになったので使う話
Posted on 2018/09/16(Sun) 23:05 in technical
サマリー
Proxmox VE 5.2からCloud-Initが使用できるようになりました。
これで、各ディストリビューションから提供されているクラウド用イメージを簡単に使用することができるので、仮想マシンをポコポコ立てては壊すのが少し簡単になります。
手順としてはほとんど https://pve.proxmox.com/wiki/Cloud-Init_Support に書いてある通りですが、一応手習いしてみましょう。
前提条件
- Proxmox VEが5.2以降であること
利用手順
- ベースとなる仮想マシンテンプレートの作成
- クローンして、新しい仮想マシンの動作確認
1. ベースとなる仮想マシンテンプレートの作成
特に追加のパッケージなどは無いので、そのままベースとなる仮想マシンテンプレートを構成していきます。
PVEの対象ノードにログインして、コマンドラインから設定します。
今回は Ubuntu 18.04 のクラウドイメージを使用します。(CPUとかメモリとかネットワーク設定は環境に合わせてどうぞ)
# wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img # qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0 --cpu Skylake-Client # qm importdisk 9000 bionic-server-cloudimg-amd64.img local-lvm # qm set 9000 --name Ubuntu18.04 # qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-1
ここまでは普通の仮想マシンの設定なので、更にCloud-initデバイスの追加、起動順位の変更、シリアルコンソールの追加をして、テンプレートとして登録します。
# qm set 9000 --ide2 local-lvm:cloudinit # qm set 9000 --boot c --bootdisk scsi0 # qm set 9000 --serial0 socket --vga serial0 # qm template 9000
通報
Cloud-Initの初期化の際に、シリアルポートが必要になるのでシリアルポート設定をしていますが、 Proxmox VEではシリアルポートが設定されていると仮想ホスト間を移動できないという問題があるため、 一度デプロイしたのちに停止してシリアルインターフェースを削除して再度起動すると言う手順が必要です。
2. クローンして、新しい仮想マシンの動作確認
これはGUIを使ってやってみましょう。
まず、テンプレートのCloud-Initを確認します。(これはテンプレートなので、とりあえず設定は空です。もちろん、デフォルトのユーザー名やDNSサーバを設定することも可能です)

テンプレートを右クリックしてCloneを選択。

とりあえずFull Cloneにします。(僕は良くテンプレートを更新するので)

出来上がった仮想マシンのCloud-Initの設定を、下図のようにします。(IPアドレスを起動前に設定できるのが嬉しいところですよね)

起動して少し待つと、Cloud-Initの処理が終わってログインできるようになります。(古いイメージを使うとapt upgradeとかで結構時間を使うかも)

作ったばかりの仮想マシンにsshでアクセスしてみます。

はい、オッケーです。
2. クローンして、新しい仮想マシンの動作確認(コマンドラインの場合)
まぁ簡単にやるならこうですよね。(Linked Cloneの場合)
# qm clone 9000 1999 --name example # qm set 1999 --ciuser example --ipconfig0 ip=192.168.122.199/24,gw=192.168.122.1 --nameserver 8.8.8.8 --sshkeys /tmp/example_id_rsa.pub # qm start 1999
通報
cp ~/.ssh/id_rsa.pub /tmp/example_id_rsa.pub されていると思ってください。
警告
もちろん、このままだとテンプレートのディスクサイズで起動してきてしまうので qm start する前にスケールを設定する必要があります。
例えば qm resize 1999 scsi0 16G みたいにね。
ユーザー名や公開鍵など、自分で使うならほとんど変わらない設定は、テンプレートを作った時に登録しておくともっと楽ですね。
このコマンドを普段使ってるPCからワンライナーで放り込めるようにしておくことで、そこそこ楽になるですよ。
Full Cloneの場合は --full オプションを追加します。その場合はクローン先のストレージを選択する必要がありますので、以下のような感じでしょうか。
# qm clone 9000 1999 --name example --full --storage rdb_vm
おまけ(CentOS-7-1808の場合)
CentOS 7の場合も同様ですが、どうせなのでフルセットコマンドをペタリしておきます。
wget https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1808.qcow2 qm create 9001 --memory 2048 --net0 virtio,bridge=vmbr0 --cpu Skylake-Client qm importdisk 9001 CentOS-7-x86_64-GenericCloud-1808.qcow2 local-lvm qm set 9001 --name CentOS-7-1808 qm set 9001 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9001-disk-1 qm set 9001 --ide2 local-lvm:cloudinit qm set 9001 --boot c --bootdisk scsi0 qm set 9001 --serial0 socket --vga serial0 qm set 9001 --ciuser example --nameserver 8.8.8.8 --sshkeys /tmp/example_id_rsa.pub qm template 9001 qm clone 9001 1998 --name example --full --storage rdb_vm qm set 1998 --ipconfig0 ip=192.168.122.198/24,gw=192.168.122.1 qm resize 1998 scsi0 32G qm start 1998
おしまい
Proxmox VEのような自分で雑に立てて使える仮想ホストでもCloud-Initが使えると、作業がグッと楽になりますので、是非使っていきましょう。
終わり。