Linux 関係覚え書き

Cloud-init

vSphere 環境の AlmaLinux を cloud-init 対応にし,テンプレートとして保存する. また,テンプレートからのデプロイ方法

参考

テンプレートとなる AlamLinux を用意する

AlmaLinux のインストール,設定自体は省略する.

cloud-init

テンプレートとなる AlmaLinux に cloud-init をインストールする

# dnf install cloud-init

その後仮想マシンを停止し,テンプレートを作成しておく.

デプロイ時に必要な iso ファイルを作成

もう一台の Linux を用意(操作用)して,適当なディレクトリを作成, 以下のファイルを同じディレクトリ内に作成する

設定ファイルのサンプルは cloud-init をインストールしたサーバの以下のディレクトリにある.

/usr/share/doc/cloud-init/examples

metadata

ホスト名などを記述

instance-id: ci-test-01
local-hostname: test01.example.com

user-data

初期パスワードや 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

network-config

ネットワークの設定を記述

記述方法は,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"

ISOファイルの作成

操作用 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 でデプロイしたマシンを 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

コメントアウトすればよい.


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS