NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix CE で Linux ゲストを cloud-init 自動セットアップ。

Nutanix CE で AWS や OpenStack でおなじみの cloud-init を使用して、Linux ゲスト OS を自動セットアップしてみます。Nutanix の Prism & AHV では、VM 作成の標準機能として cloud-init によるカスタマイズができるようになっています。

環境

  • Nutanix CE ce-2017.02.23-stable を使用。
  • cloud-init で自動セットアップするゲスト OS は Oracle Linux 7.3
  • 接続するためのクライアント役の Linux (ホスト名は client01)を別に用意。

 

前提

cloud-init インストール済み VM イメージを用意しておく

cloud-init をインストールした Linux VM を、Acropolis Image Service でイメージ登録しておきます。

Nutanix CE 以外の環境で cloud-init 導入した VM イメージがある場合でも、Image Service でインポートできます。


今回は、下記のような感じで、もともと AHV にある Oracle Linux に cloud-init をインストールしてから・・・
http://gowatana.blogspot.jp/2017/05/ol7-cloud-init.html

下記のように Image Service のディスクイメージを作成しました。

SSH 用の公開鍵/秘密鍵ペアを用意しておく

今回は cloud-init で SSH 用の公開鍵を登録してみようと思うので、あらかじめクライアント役の Linux で、公開鍵/秘密鍵のペアを作成しておきます。あとで公開鍵(ここでのファイル名は id_rsa.pub)の内容を cloud-init のスクリプトに記載します。

[gowatana@client01 ~]$ ssh-keygen -P '' -t rsa -f key/id_rsa
Generating public/private rsa key pair.
Your identification has been saved in key/id_rsa.
Your public key has been saved in key/id_rsa.pub.
The key fingerprint is:
bb:7b:cf:fb:b0:15:02:bd:4c:5c:24:de:a8:da:b6:c2 gowatana@client01
The key's randomart image is:
+--[ RSA 2048]----+
|            ..o  |
|           + =   |
|          . * .  |
|           = .   |
|        S . + .  |
|         +   . . |
|       .o o . .  |
|        Eo.o +   |
|        o+..=o.  |
+-----------------+
[gowatana@client01 ~]$ ls -l key/
合計 8
-rw-------. 1 gowatana gr-gowatana 1679  5月  4 20:06 id_rsa
-rw-r--r--. 1 gowatana gr-gowatana  399  5月  4 20:06 id_rsa.pub

手順

cloud-init は、VM を作成するときに Custom Script として指定します。

それでは、仮想マシンを作成します。

Create VM 画面で、NAME(今回は vm01)、VCPU、MEMORY を適当に指定して、「Add New Disk」 をクリックします。

f:id:gowatana:20170506205008p:plain

ここで cloud-init インストール済みのディスク イメージを追加します。

  • TYPE は DISK
  • OPERATION は Clone from Image Service
  • IMAGE は、cloud-init インストール済みのディスク イメージを指定。

f:id:gowatana:20170506205304p:plain

ディスク イメージを追加したら、仮想 NIC も追加します。

f:id:gowatana:20170506205542p:plain

今回は すでに作成ずみの vlan.0 ネットワークに接続します。ちなみに ゲスト OS のネットワーク設定は DHCP にしてあります。

f:id:gowatana:20170506205750p:plain

「Custom Script」のチェックを ON にしてから「Type or paste script」を選択して、cloud-init の YAML をテキストボックスに入力(というかコピーペースト)します。

f:id:gowatana:20170506210022p:plain

今回の YAML は、下記のような感じです。

  • ホスト名を cloudinit-test-01 に変更。
  • ただのテストファイル /opt/test.f を作成。
  • ntnx-user ユーザを作成して SSH の公開鍵を登録。
    これは、事前に作成した id_rsa.pub ファイルの内容を YAML の中の ssh-authorized-keys に記載する。

VM が作成されたら、Power on します。

f:id:gowatana:20170506210649p:plain

起動した VM のコンソールを「Launch Console」で開いてみていると、cloud-init が動作していることがわかります。ログは、/var/log/cloud-init.log ファイルなどで見ることもできます。

f:id:gowatana:20170506210812p:plain

今回は DHCP の都合で、自動セットアップした Linux の IP アドレスは 192.168.1.47 になったので(Prism の Web UI や Console などあらわかる)、クライアント役の Linux から SSH ログインできることを確認してみます。

事前に作成した秘密鍵(id_rsa)でログインできて、テストファイルが作成されていることが分かります。

[gowatana@client01 ~]$ ssh -i key/id_rsa ntnx-user@192.168.1.47
Warning: Permanently added '192.168.1.47' (ECDSA) to the list of known hosts.
[ntnx-user@cloudinit-test-01 ~]$
[ntnx-user@cloudinit-test-01 ~]$ cat /opt/test.f
cloud-init no
test file
[ntnx-user@cloudinit-test-01 ~]$

おまけ

cloud-init で記載する YAML の構文が間違っていると、Create VM 画面で Save するときに下記のようなエラーになります。インデントがずれていたりしても出るようなので、この場合は YAML をよく確認します。

Error occurred while assembling VM customization config

f:id:gowatana:20170506204605p:plain

以上。