vSphere 環境の AlmaLinux を cloud-init 対応にし,テンプレートとして保存する. また,テンプレートからのデプロイ方法
AlmaLinux のインストール,設定自体は省略する.
テンプレートとなる AlmaLinux に cloud-init をインストールする
# dnf install cloud-init
その後仮想マシンを停止し,テンプレートを作成しておく.
もう一台の Linux を用意(操作用)して,適当なディレクトリを作成, 以下のファイルを同じディレクトリ内に作成する
設定ファイルのサンプルは cloud-init をインストールしたサーバの以下のディレクトリにある.
/usr/share/doc/cloud-init/examples
ホスト名などを記述
instance-id: ci-test-01 local-hostname: test01.example.com
初期パスワードや sshd の設定などを記述
1行目の "#cloud-config" は必須,固定行.
例1
#cloud-config password: 'my-P2ssword' chpasswd: {expire: False} ssh_pwauth: True ssh_authorized_keys: - 'ssh-rsa XXXX...xxxx xxxxxxxxxxxx@example.com'
例 2
#cloud-config ssh_pwauth: true users: - name: 'user01' plain_text_passwd: 'my-P2ssword' ssh_authorized_keys: - 'ssh-ed25519 XXXX...xxxx xxxxxxxxxxxx@example.com' groups: user01,wheel shell: '/bin/bash' lock_passwd: false
ネットワークの設定を記述
記述方法は,netplan と同じ書式
例 1
version: 2 ethernets: interface0: match: name: '*ens192*' set-name: ens192 dhcp4: no dhcp6: no addresses: - 192.168.0.51/24 gateway4: 192.168.0.1
例 2
version: 2 ethernets: ens192: dhcp4: false addresses: ["192.168.0.52/24"] gateway4: "192.168.0.1" nameservers: addresses: - "192.168.0.1" - "8.8.8.8"
操作用 Linux に genisoimage をインストール
# dnf install genisoimage
作成したファイル(meta-data 等)を置いたフォルダで iso イメージを作成する. なお,ボリューム名(-volid)は "cidata" の固定名でないといけない
$ genisoimage \ -output ci-test-01.iso \ -volid cidata \ -joliet -rock user-data meta-data network-config
macOS で iso イメージを作成する場合は, ディスクユーティリティで指定したフォルダを
を選んで ci-test-01.cdr ファイルを作成する. その後,
hdiutil makehybrid -iso -joliet \ -joliet-volume-name cidata \ -o ci-test-01.iso ci-test-01.cdr
として iso ファイルを作成する.
作成した iso を ESXi のデータストアに保存する.
その後,テンプレートから仮想マシンを作成し(この時点では起動させない), 最初の起動時にデータストアに保存した iso(上記の例では ci-test-01.iso) を 接続した状態で起動する.
そうすると,起動時に cloud-init が走って各種設定が行われる.
一度 cloud-init でデプロイしたマシンを cloud-init で更新するには meta-data の instance-id
instance-id: ci-test-01
を変更して,最初と同じように iso を接続して再度読み込ませればよい.
cloud-init が実行された記録は
に残骸が残るので
# rm -Rf /var/lib/cloud/instances/ # rm -Rf /var/lib/cloud/instance # rm -Rf /var/lib/cloud/data/
をするか
# cloud-init clean
をした後にシャットダウンして,テンプレートに変換すれば良い.
なお,cloud-init の実行ログは
/var/log/cloud-init.log
に出力されるので,
# grep Writing /var/log/cloud-init.log
とすれば,どのファイルが更新されたかわかる.
更新したくない項目があれば(例えばバックアップから戻した場合など)
# vi /etc/cloud/cloud.cfg
を編集して
cloud_init_modules: - disk_setup - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups # - ssh
コメントアウトすればよい.