MAASの環境構築とUbuntuのデプロイ

# はじめに
MAASは、UbuntuのCanonicalが提供している、OSのデプロイ等のツールです。
OSは、Ubuntu、CentOS、Windows Serverやその他Linuxが可能です。
ネットワーク内の新規マシンを自動的に発見し、登録や設定をしてくれます。
Chef、Puppet、SaltやAnsible等のツールと共存も可能です。
特に、Jujuと連携する事で、Kubernetes、OpenStackやSpark等の環境を簡単に構築する事が出来ます。
今回は、MAASに関して記載します。

# 環境
## MAASサーバー
### スペック
CPU: Core i7 3GHz
メモリ: 2GB
HDD: 100GB
OS: Ubuntu Server 16.04.3
### ネットワーク
IPアドレス: 192.168.1.254
ネットマスク: 255.255.255.0
Gateway: 192.168.1.1
DNS: 8.8.8.8
## MAASクライアント
### スペック
CPU: Core i7 3GHz
メモリ: 2GB
HDD: 100GB
OS: Ubuntu Server 16.04.3
BMC: 無い場合は、一部手動になります。
### ネットワーク
下記は、MAASサーバーのDHCPによって設定されます
IPアドレス: 192.168.1.2
ネットマスク: 255.255.255.0
Gateway: 192.168.1.1
DNS: 192.168.1.254
DHCP: 192.168.1.254 
## サービス
ネットワーク内には、**既存DHCPが存在しない事**
なぜなら、MAAS自身がDHCPを提供し、新規マシンへのOSのデプロイの管理等を行うためです。

# ドキュメント
下記の公式ドキュメントを参照しています。
https://www.ubuntu.com/server/maas
https://www.ubuntu.com/download/server/provisioning
https://maas.io/
https://docs.ubuntu.com/maas/2.2/en/

# インストール
## Ubuntu Serverのインストール
Ubuntu Server 16.04 LTSをクリーンインストールして下さい。
また、DNSサーバーとDHCPサーバーは、MAASが提供するので、インストールしないで下さい。
ただし、DNSの設定は、必要です。上記の環境は、Google提供のDNS(8.8.8.8)を設定しています。

## MAASのインストール
パッケージのアップデートとMAASのインンストールを行います。

```
$ sudo apt -y update
$ sudo apt -y upgrade
$ sudo apt install maas
省略
続行しますか? [Y/n] y
```

## 管理者の作成
下記を適当に入力して下さい。
ただし、Import SSH keysは、後からでもOKです。
SSH Keysは、OSをデプロイしたマシンへ自動的に追加されます。

```
$ sudo maas createadmin
Username:
Password:
Again:
Email:
Import SSH keys [] (lp:user-id or gh:user-id):
```

## Web管理画面の表示
下記のURIを参考にWeb管理画面を表示して、上記で設定した Username と Password でログインして下さい。

```
http://192.168.1.254:5240/MAAS/
```

![Login___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/ee137e52-3787-4d2c-53cb-d66b430826ba.jpeg)

## 設定
Welcome to MAASのRegion name、Connectivityの色々な設定は変更不要ですが、状況に応じて変更して下さい。

![Welcome___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/4106a69b-193a-cd4f-f887-df62743326bd.jpeg)

デフォルトでは、16.04 LTS / amd64 のイメージがダウンロードされます。
必要に応じて、その他のイメージにチェックを入れて Save selection をクリックして下さい。
問題なければ、Continueをクリックしてください。

![Welcome___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/cdf9e78f-6ba5-e420-e763-aa89ba5333ac.jpeg)

SSHキーを登録します。 
SourceにUploadを選択してPublic keyをペーストしてImportをクリックして下さい。
問題なければ、Go to dashboardをクリックして下さい。

![Welcome___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/cb6e0334-8b4e-84c0-bfd0-5c254e0ba348.jpeg)

DHCPを有効にします。
SubnetsタブからVLANのuntaggedをクリックします。

![Subnets___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/51cb3112-9ba0-2788-517f-5c064e661806.jpeg)

Take actionからProvide DHCPをクリックします。

![Default_VLAN_in_fabric-0___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/4bf0889b-192e-085c-fc21-d90a04e11aaa.jpeg)

Dynamic range start IPとend IPを設定し、Provide DHCPをクリックします。
今回は、192.168.1.200から192.168.1.253に設定しました。

![Default_VLAN_in_fabric-0___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/e4963158-8b86-094d-b8c6-ba5f75071a69.jpeg)

# イメージ
指定したイメージがダウンロード完了しているかを確認します。

![Images___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/0b5cb50e-5947-e4f3-07a5-47f42fd23e4a.jpeg)

# クライアントのPXE設定
クライアントのPXEを有効にして、起動の優先順位をネットワークを上位、ハードディスクを下位にして下さい。

![ubuntu.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/ef1c6bce-841d-acb3-ddbb-9e775ffa8100.jpeg)

# クライアントのPXE起動
ネットワークカードからPXEで起動が始まります。
MAASから必要なデータ等がダウンロードされます。
完了後、Web画面のNodeにマシンが表示されます。
もし、クライアントがIPMI等に対応して入れば、Powerに電源アイコンが表示されるはずです。
IPMI等に対応していれば、この画面から電源のON/OFFできるようになります。

![Nodes___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/07afc350-5901-67e9-1494-25c92249903e.jpeg)

# クライアントの設定
マシン名を適当に変更して下さい。今回は ubuntu.maas にしました。
また、PowerをManualにしました。もし、IPMI等に対応していれば、適当に選択して下さい。

![スクリーンショット_2017-10-28_21_43_27_png.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/389b658d-a173-2358-984f-10a89dec9e0f.jpeg)

# コミッション
Take actionのCommissionをクリックします。オプションのチェックも特に必要ありません。
Commission machineをクリックしてクライアントの電源を入れて下さい。

![ubuntu_maas___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/14ac79a7-2e02-8319-3147-100f33966b2f.jpeg)

![ubuntu_maas___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/972a8c2d-689a-f790-af18-f92b2960bff2.jpeg)

クライアントの Status が Ready になれば完了です。
これで、いつでもOSのデプロイ / アンデプロイができるようになりました。

![Nodes___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/162560a8-1b9e-3e3e-41db-902f5d97b9f7.jpeg)

# デプロイ
クライアントにチェックを入れて、Take action から Deploy をクリックします。
次に、Choose your imageで適当なイメージを選びデプロイを開始します。
IPMI等に対応していない場合は、電源を手動で入れて下さい。
デプロイが始まると Status が Deploying Ubuntu 16.04 LTS になります。
デプロイが完了すると Status が Ubuntu 16.04 LTS になります。

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/085a014e-611f-b833-5251-fe879e52a802.jpeg)

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/59b186a0-2ea4-a416-abdb-2957fc633a25.jpeg)

# SSHで接続、インターネットへの疎通確認
クライアントのIPアドレスを確認して下さい。
実は、デプロイの前にIPアドレスをStatic / Auto assing等から設定をする事が出来ます。
今回は、Auto assingで192.168.1.4が設定されました。

![ubuntu_maas___maas_MAAS_と_ubuntu.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/6c5c0cff-0cff-e7ae-6820-1e5fecdbe0b5.jpeg)

SSHでアクセスします。最初に設定したSSHキーでアクセスします。
下記は、SSHキーに id_rsa を指定してます。
ユーザー名は ubuntu になります。
IPアドレスは上記で確認した通り、 192.168.1.4 です。

```
$ ssh -i .ssh/id_rsa ubuntu@192.168.1.4
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-97-generic x86_64)
省略
ubuntu@ubuntu:~$

ubuntu@ubuntu:~$ ping maas
PING maas.maas (192.168.1.254) 56(84) bytes of data.
64 bytes from maas.maas (192.168.1.254): icmp_seq=1 ttl=64 time=0.409 ms

ubuntu@ubuntu:~$ ping www.ubuntu.com
PING www.ubuntu.com (91.189.89.118) 56(84) bytes of data.
64 bytes from www-ubuntu-com.nuno.canonical.com (91.189.89.118): icmp_seq=1 ttl=47 time=234 ms
```

# アンデプロイ
マシンにチェックを入れて、Take action から Release をクリックします。
その後、Status が Ready になります。別のOSのデプロイを試して下さい。

![Nodes___maas_MAAS.jpg](https://qiita-image-store.s3.amazonaws.com/0/68632/c6e511dc-4133-2fe9-ac89-73bbb5ec1f4e.jpeg)

# おわりに
今回は、MAASの基本的な使い方を紹介しました。
あと、MAASは、RESTを提供していています。
Jujuは、このRESTを利用してMAASのReady状態のマシンを利用して環境を構築します。
今後は、Jujuと連携してKubernetes、OpenStackやSparkの環境構築をしたいと思います。
あと、MAASの他の機能の確認。IPMI、KVMの活用などをしたいと思います。