RancherのNode Templates機能(OpenStack)

# 動機

* 少し前だが、[Rancher](https://rancher.com/)から[OpenStack](https://www.openstack.org/)用のNode Driver, Node Templatesを使い、VM作成＋Kubernetesクラスタ作成をしてみた。
* Node Templatesに値を埋めていく際、入れる値の確認のために検索してみると、案外、日本語情報が少なかった。
* なので、小ネタではあるが、Node Templatesの各入力値として何を指定したか、メモっておいてもよいかと思いました。

# 環境

* OpenStack : [Queens](https://releases.openstack.org/queens/)
* VMのOS : [Ubuntu Server 18.04](https://www.ubuntu.com/download/server)
* Rancher : [v2.2.3](https://github.com/rancher/rancher/releases/tag/v2.2.3)

# 準備

* RancherのOpenStack用Node Driverは、デフォルトで有効になっていないため、Activateが必要。
* 秘密鍵ファイル、UserDataファイルは、Rancherのコンテナ内でのファイルパスを記載するので、Rancher起動するサーバ内にファイル配置の上、起動時にvolumeをマウントする。

```
$ sudo docker run -d --restart=unless-stopped \
  -v /home/ubuntu/rancher/ssl:/etc/rancher/ssl \
  -v /opt/rancher:/var/lib/rancher \
  -p 80:80 -p 443:443 rancher/rancher
```

# Node Templatesの各設定値

では、本題。実際にVMを作成したときに設定した値を残しておく。

Horizonで、VMを作成しようとしているOpenStackプロジェクトのAPIアクセス画面にて、プルダウン「OpenStack RCファイル (Identity API v3)」を選択すると、各種環境変数が書かれたRCファイルがダウンロードできるので、適宜参照する。

Node Templatesで指定した値は、Docker MachineのOpenStack用driverに渡されてVM作成されるので、[Machine Drivers - OpenStack](https://docs.docker.com/machine/drivers/openstack/)を参照すれば、Rancherの画面でどのような値を入力すればよいかが分かるようになっている。


## activeTimeout
これはデフォルトから変えてない。200のまま。


## authUrl

* Horizonで、VMを作成しようとしているプロジェクトのAPIアクセス画面にある「Identityサービス」に該当するサービスエンドポイントを指定する。
* たとえば、「https://10.200.150.60:5000/v3」


## availabilityZone

* この環境では「nova」というAZを使っていたのでそれを指定した。


## cacert

* 今回、空欄で問題なかったため指定していない


## domainName

* RCファイルのOS_USER_DOMAIN_NAME変数の値を指定した。
* たとえば、「mydomain」
* かわりにdomainIdを指定でもよい


## endpointType

* RCファイルのOS_INTERFACE変数の値を指定した。
* 「public」「admin」「internal」のどれか。今回は「public」だった


## flavorName

* これは特に説明不要でしょう。VMに使いたいフレーバ名をそのまま指定。
* かわりにflavorIdを指定でもよい


## floatingPool

* VMに付与するFloatingIPのアドレスプールを指定。
* Horizonの、プロジェクト　→　ネットワーク　→　Floating IPの画面で、「プール」欄に出ている文字列を指定する。


## imageId

* これも特に説明不要かと。VMのOSイメージのIDなどを指定。
* かわりにimageNameを指定でもよい
* HorizonなどでID値を確認しておく


## insecure

* これはRancherのコンテナにdocker execで入ってauthUrlに対してcurlしたときに以下のようなメッセージが出るようであればチェックが必要。

```
root@cfd748cb3ea9:/tmp# curl https://10.200.150.60:5000/v3
curl: (60) SSL certificate problem: self signed certificate in certificate chain
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
root@cfd748cb3ea9:/tmp#
```

## ipVersion

* これも説明は不要かと。今回はIPv4に相当する「4」を指定


## keypairName

* VM作成時に指定する鍵ペアの名前を指定。あらかじめHorizonなどから作成しておく。
* たとえば「keypair-k8s-node」


## netName

* VM作成時に指定するネットワーク名を指定。あらかじめネットワークは作成しておく。
* たとえば「mynetwork」
* かわりにnetIdを指定でもよい


## password

* OpenStackのプロジェクトへのログインアカウント(username)に対応するパスワード。


## privateKeyFile

* VMへのログインに使用する秘密鍵ファイルを、Rancherのコンテナ内のファイルパスで指定する。
* あらかじめファイルは作成しておき、Rancherのコンテナにマウントしておくこと。
* たとえば、「/etc/rancher/ssl/keypair-k8s-node.pem」


## region

* RCファイルのOS_REGION_NAME変数の値を指定した。


## secGroups

* VM作成時に指定するセキュリティグループ名を指定。これもあらかじめ作成しておく。
* カンマ区切りで複数指定が可能。
* たとえば、「default,rancher-node」


## sslPort
今回、特に変更しなかった。たとえば「22」を指定。


## sshUser
SSHログインに使えるユーザはOSイメージによるが、今回は「ubuntu」だった


## tenantId

* RCファイルのOS_PROJECT_ID変数を指定

## tenantName

* RCファイルのOS_PROJECT_NAME変数を指定

## username

* OpenStackのプロジェクトへのログインアカウントを指定する。


## userDataFile

* VM起動時に指定する、cloud-config形式のyamlファイルをRancherのコンテナ内のファイルパスで指定する。
* * あらかじめファイルは作成しておき、Rancherのコンテナにマウントしておくこと。
* たとえば、「/var/lib/rancher/cloud-config.yaml」

## その他

* たとえばプロキシ環境下において、上記のuserDataFileの中でHTTPによるファイル取得がある場合、Node Templates画面の「Engine Options」においてEngine EnvironmentにてHTTP_PROXY, NO_PROXYといったプロキシに関する環境変数の設定が必要となる。
* 
* Engine Optionsの中に「Docker Install URL」とあるが、OpenStack経由でのVM作成のあと、このURLにあるスクリプトにてDockerをインストールして、kubernetesのインストール、設定まで行うので、たとえばuserDataFileに記載した初期化処理の中にDockerのインストールまで入ってしまっている場合、userDataFileからはDockerインストール処理は除外しておいたほうがよい。

# 参考

* [Managing Node Templates](https://rancher.com/docs/rancher/v2.x/en/user-settings/node-templates/)
* [北大OpenStack環境でRancherを使用してKubernetesクラスタを展開する](https://qiita.com/axi-sugiki/items/5efcb61d3eef9560520e#openstack-driver%E3%81%AE%E6%9C%89%E5%8A%B9%E5%8C%96)