Hyper-V上にk3osマルチノードクラスタを10分程度で構築する


`k3os`はクラスタを簡単に立てられるということで本当にお手軽かどうか試しました。

# 結論

`server` 1台、`agent` 1台のマルチノードクラスタがお手軽に構築できました。

軽いのでローカル開発用の`Docker Desktop for Windows`の代わりにならないかなと思っています。

# 環境

- Windows 10 Pro バージョン 1809

- Hyper-v

- ksos v0.2.1 [k3os-amd64.iso](https://github.com/rancher/k3os/releases)

# クラスタ構築

## ISOダウンロード(400MB/3分程度)

[k3os-amd64.iso](https://github.com/rancher/k3os/releases) をダウンロードします。

## Hyper-vに仮想マシン構築(2分*2台=4分程度)

- 「Hyper-V マネージャー」を起動し、「新規」→「仮想マシン」を選択します。

![2019-05-23-07-54-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/f9694f8a-f0df-ffb9-edcb-027d35b16499.png)

- 「次へ」をクリックします。

![2019-05-23-07-54-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/c2ed5e0e-6e29-df01-7c39-4ea2d3dfcbe5.png)


- 適当な「名前」を入力して「次へ」をクリックします。

![2019-05-23-07-55-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/9e32a02a-9f3b-a1fe-9695-77bfb6a9755f.png)


- とりあえず「第1世代」で「次へ」クリックします。

![2019-05-23-07-55-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/b97f97e5-f4c7-0a88-a76c-ce0d4f65d7a5.png)


- 適当なメモリを「起動メモリ」に設定し、「次へ」をクリックします。

![2019-05-23-07-56-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/0cecf17f-9542-00ba-af9a-5d90c6830cad.png)

- 「接続」は「Default Switch」にします。ホスト、ゲスト間の通信が可能で、NATでインターネットにも接続できます。

![2019-05-23-07-56-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/08194368-4292-4988-7062-e6ade5cab6d5.png)


- 「名前」「サイズ」に適当な値を入力し「次へ」をクリックします。

![2019-05-23-07-57-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/cc365112-c0cc-c98a-d0ad-d4686c09a4ca.png)


- ブートイメージは先ほどダウンロードした「k3os-amd64.iso」を指定します。「次へ」をクリックします。

![2019-05-23-07-58-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/0a8b841c-04c9-7f43-456c-91cbf54ca67b.png)


- 「完了」をクリックします。

![2019-05-23-07-58-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/fe459472-a833-b48c-d704-a57473d707f0.png)

- 「接続」でコンソールを開き、「起動」します。

![2019-05-23-08-00-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/80d68764-1e5e-2ec6-305d-b4dd48bdcea8.png)

- 「k3OS LiveCD & Installer」を選択します。

![2019-05-23-08-01-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/152db416-441e-4451-7598-4978dcb95abc.png)

- ユーザー「rancher」でログインします。

![2019-05-23-08-02-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/46681d43-0c70-92f7-886b-e9326535b9e9.png)


- ログインできました。

![2019-05-23-08-03-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/b2b38d64-b83e-46aa-d383-7cf6bf7bcd3c.png)


- 以上を繰り返し２台インストールします。

## クラスタセットアップ(2分*2台=4分)

クラスタを以下のようにセットアップします。

以下の2台をセットアップします。NATで外部接続もでき、2台は内部ネットワークで互いに通信できる状態です。

|マシン名|役割|
|---|---|
|k3os-21391|server|
|k3os-29614|agent|

### `server`をセットアップ

- インストール直後はシングルノードクラスタで動作しています。

![2019-05-23-08-14-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/68f81286-9990-50a5-463d-0b18447d1820.png)


- 起動時のメッセージにあるように`sudo os-config`でセットアップを行います。<br>
   時間節約のためディスクへのインストールは行いません。<br>
   このマシンを役割`server`としてセットアップします。<br>
   `cluster secret`は`testcluster`としました。

![2019-05-23-08-16-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/398d01fa-7006-3c29-1809-61f21a85616d.png)


- `agent`からの接続で必要となるので、`ifconfig`で`server`側のIPを調べておきます。

![2019-05-23-08-20-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/8e9986a9-9a4d-a5e1-2377-49241a2200e3.png)


### `agent`をセットアップ

- 最初はシングルノードです。

![2019-05-23-08-17-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/a018f9d5-0be0-0882-11ad-ce503bbf4a23.png)


- `sudo os-config`でセットアップを開始します。<br>
    役割`agent`として設定します。<br>
    `server`のURLは、前の手順で取得したIPアドレスから以下のように指定します。<br>
    `cluster secret`は、`server`セットアップ時に設定した`testcluster`を入力します。<br>

   - `server`のURL(`server`のIPが「172.17.32.86」の場合)
      - https://172.17.32.86:6443

![2019-05-23-08-24-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/c40d17f0-e1c9-34f7-121b-cdb7b89602e1.png)


### ノード追加の確認

- `kubectl get nodes`でクラスタ構成になっていることを確認します。(`server`側のコンソールで実行します。)

![2019-05-23-08-25-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/931ae1be-33d4-7355-2f4b-2568aace8b4a.png)


<h1> 想定通り、2台のクラスタ構成になっています。10分前後でできました！</h1>


## 動作確認(時間計測対象外)

`nginx`をデプロイしてアクセスできるか試してみます。

- `Deployment`をデプロイ

```shell
kubectl run test-nginx --image=nginx --port=80 --replicas=2
kubectl get pods -o wide
```

![2019-05-23-09-10-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/944f74e1-8c63-1f26-afc1-b08bc9cae2cf.png)


2つのノードにスケジューリングされています。

- `service`設定

```shell
kubectl expose deployment/test-nginx --type="NodePort" --port 80
kubectl get service
```

![2019-05-23-09-12-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/a28b894b-fe83-a83d-287d-da4ad16dc0df.png)


- ホスト側から接続

http://172.17.32.86:31264/

![2019-05-23-09-15-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265837/116b2a32-337f-4f9d-360a-be73cd526f15.png)

アクセスできました。ちゃんと動作しているようです。

## 参考URL

[Ahmer's SysAdmin Recipes - Install Lightweight Kubernetes (K3s) Cluster with k3OS](https://ahmermansoor.blogspot.com/2019/05/install-lightweight-kubernetes-k3s-with-k3os.html)