zaki work log

作業ログやら生活ログやらなんやら

[Proxmox VE] Cloud-Initのvendorデータを使ってサブスクリプション済みRHELのVMをサクッと作成する

Proxmox VEのWeb UIから設定できるCloud-Init項目は以下の通りで、最低限必要な設定はできるけど、追加パッケージの指定とかがデフォルトでは現状できない。

  • ユーザ
  • パスワード
  • DNSドメイン
  • DNSサーバ
  • SSH公開鍵
  • プロビジョニング時のパッケージアップグレード(apt upgradeやdnf update)の実行有無
  • IPアドレス設定 (固定 / DHCP)

ただしCloud-Initの機能そのものにはもっと様々な初期設定を指定でき、例えばRHELのサブスクリプションはrh_subscriptionで設定可能。

cloudinit.readthedocs.io

今回はこれをProxmox VEから処理するための設定を使って、Proxmox VEでサブスクリプション済みのRHELVMをテンプレートとCloud-Initを使ってプロビジョニングする仕組みを確認。

pve.proxmox.com

RHELクラウドイメージ

カスタマポータルのDownloadから、Red Hat Enterprise Linuxへ進む。
リストから普通のイメージでなく、「Virtualization Images」の「Red Hat Enterprise Linux . KVM Guest Image」をダウンロード。

今回は諸事情により8.9を使用。

カスタムCloud-Initの設定

テンプレート作成部分は先日書いた以下のエントリ参照。

zaki-hmkc.hatenablog.com

テンプレートの作成

テンプレート9010の「rhel8.9-template」を作成。

qm create 9010 --name rhel8.9-template --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
qm set 9010 --scsi0 S870QVO2TB:0,import-from=/mnt/pve/pecorino-dev/template/iso/rhel-8.9-x86_64-kvm.qcow2
qm set 9010 --ide2 S870QVO2TB:cloudinit
qm set 9010 --boot order=scsi0
qm set 9010 --serial0 socket --vga serial0
qm template 9010

ここでUIで可能なCloud-Initの設定もセットする。

カスタム設定配置用snippetsの設定

カスタム設定ファイルを置くために、ストレージの設定でスニペットを有効にする。今回はNFSのストレージに設定。
(このストレージはテンプレートのストレージと異なっていても問題ない)

有効にするとディレクトリが作成される。

root@pve:~# ls -al /mnt/pve/pecorino-dev/snippets/
total 8
drwxr-xr-x  2 root root 4096 Apr 14 14:27 .
drwxrwxrwx 13 root root 4096 Apr 14 14:27 ..

vendor設定ファイルの作成

認証情報がplaintextのままなのはちょっと気になるところだけど個人環境なのでとりあえず。
サブスクリプション割り当てのためのrh_subscriptionと、追加パッケージのpackagespodmanを初期状態でインストールされるようにしてみる。

root@pve:~# ls -l /mnt/pve/pecorino-dev/snippets/
total 4
-rw-r--r-- 1 root root 99 Apr 14 17:10 rhel_subscription_vendor_template.yaml
root@pve:~# cat /mnt/pve/pecorino-dev/snippets/rhel_subscription_vendor_template.yaml 
#cloud-config
rh_subscription:
  username: ユーザー名を記載
  password: パスワードを記載
  auto-attach: True

packages:
- podman

vendorデータのセット

作成したvendorデータ定義が書かれたYAMLファイルを、テンプレートのCloud-Initへセットする。
ファイルシステム上のパスでなく、ストレージ名とその中でのパスを指定する。

root@pve:~# qm set 9010 --cicustom "vendor=pecorino-dev:snippets/rhel_subscription_vendor_template.yaml"
update VM 9010: -cicustom vendor=pecorino-dev:snippets/rhel_subscription_vendor_template.yaml

これですべての準備が完了。

※ ただし、Web UIのCloud-Initの画面では、vendor設定に関して現バージョンでは確認はできない。

VMのクローン

とりあえずUIのクローンでVM IDとホスト名を入力してVMを作成し、電源投入

この通りSubscription Managementのログが表示され、(Cloud-Initで更新を有効にしてるので)パッケージアップデートも動作しはじめる。
Red Hatのカスタマポータルでも、システムが登録されていることを確認できる。

パッケージアップデートを有効にしていると処理時間の関係で時間は多少かかるが、podmanも自動的にインストールされる。

[zaki@rhel8-dev ~]$ podman --version
podman version 4.6.1

環境

  • PVE 8.1.10
  • RHEL 8.9 (Virtualization Images)

Proxmox VEのCloud-Initは、vendorデータのカスタム設定でWeb UIから設定・確認できない項目も初期設定として使えることが確認できた。
ちなみにuserもファイルから設定できるが、これをやるとWebのUIから設定ができなくなる(qm set <vmid> --cicustomでセットした内容で上書きされる)ので、画面から設定できない項目は基本的にvendorデータを使用するのが良さそう。

参考URL

ainoniwa.net

ainoniwa.net

この2つの記事は大変参考になりました。
コマンドはCustom Cloud-Init COnfigurationに記載がある。が、確かにわかりづらい…