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」 をクリックします。
ここで cloud-init インストール済みのディスク イメージを追加します。
- TYPE は DISK
- OPERATION は Clone from Image Service
- IMAGE は、cloud-init インストール済みのディスク イメージを指定。
ディスク イメージを追加したら、仮想 NIC も追加します。
今回は すでに作成ずみの vlan.0 ネットワークに接続します。ちなみに ゲスト OS のネットワーク設定は DHCP にしてあります。
「Custom Script」のチェックを ON にしてから「Type or paste script」を選択して、cloud-init の YAML をテキストボックスに入力(というかコピーペースト)します。
今回の YAML は、下記のような感じです。
- ホスト名を cloudinit-test-01 に変更。
- ただのテストファイル /opt/test.f を作成。
- ntnx-user ユーザを作成して SSH の公開鍵を登録。
これは、事前に作成した id_rsa.pub ファイルの内容を YAML の中の ssh-authorized-keys に記載する。
VM が作成されたら、Power on します。
起動した VM のコンソールを「Launch Console」で開いてみていると、cloud-init が動作していることがわかります。ログは、/var/log/cloud-init.log ファイルなどで見ることもできます。
今回は 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
おまけ
cloud-init で記載する YAML の構文が間違っていると、Create VM 画面で Save するときに下記のようなエラーになります。インデントがずれていたりしても出るようなので、この場合は YAML をよく確認します。
Error occurred while assembling VM customization config
以上。