ONTAP Simulator 9.11 を Linux KVM で動かす(クラスタセットアップ編)

[前回]クラスタセットアップウィザードが起動するところまでをやったので、今回はクラスタセットアップ編になります。

## クラスタの作り方

ONTAPがOSとして起動したあとはストレージクラスタの設定になりますが、設定方法としては主に三種類に分かれます。

- IPアドレスが設定済み
  - REST APIを使う
  - Web GUIを使う
- IPアドレスが設定されていない・アクセスできない
  - ConsoleからCUIを使う

個人的な好みと 自動化の楽ちんさから APIで行いたいと思います。

### REST APIによるクラスタ設定

Cluster作成 APIの詳細については、公式の[POST /cluster](https://library.netapp.com/ecmdocs/ECMLP2856304/html/index.html#/cluster/cluster_create)を参照してください。

#### POSTデータの準備

設定値のうち、必須で必要となるのは、クラスタの名前と管理者パスワードのみです。
ここでは configuration_backupを除いて、推奨されているプロパティを全て設定することにします。

今回、私の環境でポストする内容は以下のようになります。

```json:cluster-create.json
{
    "name": "ontapsim",
    "password": "supersecret1!",
    "location": "my desktop pc",
    "contact": "admin@local.netapp.com",
    "dns_domains": [
        "local.netapp.com"
    ],
    "name_servers": [
        "192.168.255.254"
    ],
    "ntp_servers": [
        "ntp.nict.jp"
    ],
    "license": {
        "keys": [
            "XXXXXXXXXXXXXXAAAAAAAAAAAAAA",
            "XXXXXXXXXXXXXXABGAAAAAAAAAAA",
            "ライセンスを必要な分だけ追加AAA"
        ]
    },
    "management_interface": {
        "ip": {
            "address": "192.168.255.210",
            "gateway": "192.168.255.254",
            "netmask": "255.255.255.0"
        }
    },
    "nodes": [
        {
            "name": "ontapsim-01",
            "management_interface": {
                "ip": {
                    "address": "192.168.255.211"
                }
            }
        }
    ]
}
```

設定値の簡単な説明は以下のようになります。ネットワーク等の設定値は適宜調整してください。

|名前|設定値|
|----|------|
|name| クラスタ名 |
|password| クラスタ管理者のパスワード(英文字以外に数字が最低限１文字必要) |
|location| クラスタを設置する場所等を示す任意の文字列 |
|contact| 管理者のメールアドレス等、連絡先を示す任意の文字列 |
|dns_domains| リスト: 名前解決に使われるドメイン名です。"local"は使えないので注意 |
|name_servers| リスト: DNSサーバをIPv4か IPv6で指定 |
|ntp_servers| リスト: 時刻合わせを行うNTPサーバ名 |
|license.keys| リスト: ライセンスキー文字列 |
|management_interface.ip.address | クラスタ管理IPアドレス |
|management_interface.ip.netmask | クラスタ管理IPアドレス |
|management_interface.ip.gateway | クラスタ管理IPアドレス |
|nodes| リスト: クラスタのノード |
|nodes[0].name | 最初のノードの名前 |
|nodes[0].management_interface.ip.address | 最初のノードの管理IPアドレス(netmask等はクラスタIPをベースに設定される) |

#### REST APIで管理IPを変更したときの注意

暫定的な管理IPが DHCPや Auto IPで自動付与された物(インターフェース名:mgmt_auto)で、management_interface.ipを指定した場合、Cluster APIで設定完了後 自動付与されたアドレスが削除されます。  
APIを投げるのに利用したアドレスではアクセスが出来なくなりますので注意してください。

また、REST APIでクラスタを作るタイミングでは、管理ネットワークのポート等を細かく設定する事が出来ないため、ネットワーク要件等で細かいポート指定等がある場合、ここで指定せずに、クラスタ作成後に適宜設定を入れていく必要があります。

#### license.keysについて

ライセンスのキーについてはダウンロードしたテキストファイルにかかれている 28文字の 文字列です。

Cluster Base Licenseと Feature Licenseを全て記入してしまって構いません。

```text:CMode_licenses_9.x.txt
# Clusterライセンスは以下のような形で 1つ

Cluster Base license = XXXXXXXXXXXXXXAAAAAAAAAAAAAA

# Featureライセンスは以下のような形で 各機能について 2つ＝2ノード分記載されています。

CIFS                   XXXXXXXXXXXXXXXXXAAAAAAAAAAA   CIFS protocol
```

#### 管理IPの確認

管理IPの確認をします。コンソールからadminでログインして、以下のコマンドを実行します。

```bash:管理IPの確認
network interface show
```

![20221008182706-Window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128512/1caa0381-54e7-556a-5087-8c1f09b0ec48.png)

#### 必要なときだけ：作業端末での IP Aliasの設定

私の環境では、ONTAP Simulatorに Auto IPが設定されており、作業端末に Auto IPが無いためこの作業が必要になります。  
DHCP等でIPが与えられていて作業端末から接続が可能な場合は、この項目は飛ばしてください。

Auto IPのアドレスには pingが届かないので、一時的に作業端末に対して 169.254.0.0/16で IP aliasを設定してやります。

作業をしている Linux端末で macvtap1の interfaceが 同じbridgeに接続されています。以下のコマンドでstaticにアドレス[^staticapipa]を設定します。

```bash:add_apipa_static.sh
sudo ip address add 169.254.0.1/16 dev macvtap1
```

Auto IPでの作業が終わったら以下のコマンドで削除します。

```bash:remove_apipa_static.sh
sudo ip address del 169.254.0.1/16 dev macvtap1
```

[^staticapipa]: APIPAがアサインするのは 169.254.1.0以後なので、このアドレスであればAuto IPにはぶつからないと思うのですが、ちょっと安直すぎます。ネットワークが閉じられていない等の理由で安全を考えるなら avahi-autoipd 等を使うべきかもしれません。

#### APIの実行

まず最初に pingで 管理IPへの疎通を確認します。

```console
user@kvm:~/work/ontap9.11.1$ ip address show macvtap1
11: macvtap1@br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 169.254.0.1/16 scope global macvtap1
       valid_lft forever preferred_lft forever

user@kvm:~/work/ontap9.11.1$ ping 169.254.224.62
PING 169.254.224.62 (169.254.224.62) 56(84) bytes of data.
64 bytes from 169.254.224.62: icmp_seq=1 ttl=64 time=0.587 ms
```

curlを使って投げます。ここでは一つのノードしか使いませんので、シングルノードクラスターを指定します。

```bash:cluster-create.sh
curl -s -k -X POST "https://169.254.224.62/api/cluster?single_node_cluster=true" -d "@cluster-create.json" -u admin:
```

以下の様にJob IDが帰ってくればClusterの作成がスタートしています。エラーの場合には、なんらかのメッセージが戻ってきます。

```json
{
  "job": {
    "uuid": "869d4926-46ef-11ed-b130-0ba1a7e2cc91",
    "_links": {
      "self": {
        "href": "/api/cluster/jobs/869d4926-46ef-11ed-b130-0ba1a7e2cc91"
      }
    }
  }
}
```

#### Jobの完了待ち

ClusterセットアップのJob IDが戻ってきたので状況を確認します。

セットアップ中に、DHCPやAuto IPで自動的についていたmgmt_autoのIPアドレスは消去されるため、cluster作成時に指定したIPに対して APIを発行します。

Jobの確認用のAPIについては公式の[GET /cluster/josb/{uuid}](https://library.netapp.com/ecmdocs/ECMLP2856304/html/index.html#/cluster/job_get)をご確認ください。

```bash:job-status.sh
curl -s -k -X GET "https://192.168.255.210/api/cluster/jobs/869d4926-46ef-11ed-b130-0ba1a7e2cc91" -u "admin:supersecret1!"
```

以下のように stateが runningから successになったら完了です。エラーが出た場合はメッセージを確認して対処します。

```console
user@kvm:~/work/ontap9.11.1$ curl -s -k -X GET "https://192.168.255.210/api/cluster/jobs/869d4926-46ef-11ed-b130-0ba1a7e2cc91" -u "admin:supersecret1!"
{
  "uuid": "869d4926-46ef-11ed-b130-0ba1a7e2cc91",
  "description": "POST /api/cluster",
  "state": "success",
  "message": "success",
  "code": 0,
  "start_time": "2022-10-08T09:56:48+00:00",
  "end_time": "2022-10-08T09:58:32+00:00",
  "_links": {
    "self": {
      "href": "/api/cluster/jobs/869d4926-46ef-11ed-b130-0ba1a7e2cc91"
    }
  }
}
```

## クラスタ管理画面(System Manager)へのアクセス

Cluster作成時に設定した管理IPに対して httpsでアクセスするとログイン画面が表示されます。

![20221008191822-Window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128512/07d12029-53d7-96f5-dabc-43d90049db40.png)

ここから設定した adminパスワードでログインできれば完了です。

![20221008192105-Window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128512/ecb251f5-9fc0-56fc-bfa0-d0359e3f3b3c.png)

## この後は……

ここまでで、クラスタが出来たので、あとはRAIDやデータ用のネットワーク・インターフェース、iSCSIやNFS/CIFS等を設定して使っていくだけなのですが、ONTAP Simulatorでは、その前にやっておくと良い設定があるので次回はその説明をします。

[前回]: https://qiita.com/yasuoohno/items/9435618cac23f33184be