オンプレミス環境におけるcloud initの使い方

スポンサーリンク

cloud-initはシステム起動時の初期設定を自動化する仕組みです。AWSやAzureなどのパブリッククラウドでの実績が有名ですが、実はオンプレミスの仮想マシンに対してもcloud-initを利用する事ができます。このページではcloud-initを利用して仮想マシンのIPアドレスやホスト名を設定する方法を説明します。

前提

参照資料

公式ドキュメントは以下の通りです。2次情報に当たるRedhat公式ドキュメントは、すでに一部設定がレガシー扱いになっている事に注意ください。

動作確認済環境

  • vCenter 7.0U3f (7.0.3-20051473)
  • ESXi 7.0U3f (7.0.3-20036589)
  • Rocky Linux 8.6

cloud-initのインストール

cloud-initをインストールします。この操作によって、isoファイルなどで与えた初期設定を元に仮想マシンが起動するようになります。

dnf install cloud-init

それではcloud-initによってホスト名とIPアドレスを変更できるかどうかを確かめましょう。念の為、設定変更前のホスト名とIPアドレスをメモに控えます。

[root@linux060 ~]# hostname
linux060.gokatei.go
[root@linux060 ~]# ifconfig ens192
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.20.60  netmask 255.255.255.0  broadcast 192.168.20.255
        inet6 fe80::250:56ff:fe8f:220a  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:8f:22:0a  txqueuelen 1000  (Ethernet)
        RX packets 80  bytes 9119 (8.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 65  bytes 8555 (8.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@linux060 ~]# 

ここまでの操作が完了したら、仮想マシンを停止します。

shutdown -h now

isoファイルの作成

network-config

cloud-initのネットワークの指定方法は以下の3通りがあります。

Redhat公式ドキュメント「3.9. cloud-init を使用した静的ネットワーク設定」で紹介されているのは「ENI(Legacy)」の手法です。このサイトでは「Networking Config Version 2」を紹介します。ですので、このサイトの紹介例はRedhatの例と大きく異なる事に注意ください。

「network-config」という名前のファイルを以下のように作成します。cloud-init公式資料「NoCloud」の説明の通り、任意のファイル名は許容されず、必ず「network-config」というファイル名を使用する必要があります。

「network-config」の記述方法は、Ubuntuなどのディストリビューションで広く使用されているnetplanと全く同じ書式を採用しています。

cat << EOF > network-config
version: 2
ethernets:
  interface0:
    match:
      name: '*ens192*'
    set-name: ens192
    dhcp4: no
    dhcp6: no
    addresses:
      - 192.168.20.70/24
      - fc00:0:0:20::70/64
    gateway4: 192.168.20.1
    gateway6: fc00:0:0:20::1

EOF

user-data

user-dataには初期パスワードやsshdの設定などを記述します。他にも様々な設定が可能ですが、具体的なユースケースはRedhat公式ドキュメント「第3章 cloud-init の設定」が分かりやすいでしょう

cat << EOF > user-data
#cloud-config 
password: P@ssw0rd
chpasswd: {expire: False} 
ssh_pwauth: True 
ssh_authorized_keys:
  - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbQpQXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXcVr xxxxxxxxxxxx@hotmail.co.jp
  - ssh-rsa AAAAB3NzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2nxivJc= yyyyyyyyyyyyyyy@hotmail.co.jp
EOF

meta-data

meta-dataにはホスト名などを記述します。

Network Configuration ENI (Legacy)」ではmeta-dataにIPv4アドレスなどのネットワーク設定を記述します。「Network Configuration ENI (Legacy)」と「Networking Config Version 2」は設定を記述するファイルが異なる事に注意ください。

cat << EOF > meta-data
instance-id: id-ovf
local-hostname: linux070.gokatei.go
EOF

ISOファイルの作成

network-config, user-data, meta-dataの3ファイルの生成が完了したら、これら3ファイルを格納するISOファイルを作成します。ISOファイルの作成はgenisoimageというコマンドラインツールを使うのが便利でしょう。まずはgenisoimageをインストールします。

dnf install genisoimage

以下のような操作例でisoファイルを作成します。

genisoimage \
  -output linux070.iso \
  -volid cidata \
  -joliet -rock user-data meta-data network-config

cloud-initの動作確認

ISOファイルをESXiホストへ転送し、仮想マシンに接続します。

cloud-initの動作確認 01

ISOファイルが接続されている状態で、仮想マシンを起動します。

cloud-initの動作確認 02

起動時のログを眺めると、cloud-initによるIPアドレス設定などを観察する事ができます。

cloud-initの動作確認 03

想定通りのIPアドレスとホスト名が設定された事を確認します。

cloud-initの動作確認 04

タイトルとURLをコピーしました