ニフクラHatoba（β）を使ってみた

# 1. 概要

ニフクラのHatoba（β）使って、Kubernetesクラスター上に簡単なアプリケーションをデプロイしたところ、想像以上に簡単できて好印象だったため、当初、聴講するだけのつもりで参加した
ニフクラのFJCTさん主催のミートアップイベント（2019/4/24）で急遽飛び入りLTをさせていただきました。

https://fujitsufjct.connpass.com/event/127605/

この記事は、LTで話した内容をまとめたものです。

## Hatoba（β）って何？
Hatobaは、ニフクラのFJCTさんが提供しているKubernetesクラスターを構築・管理できるサービスです。
利用するには、法人での利用申し込みが必要です。現在、β版のため利用料金はかからないのが、素敵です。

https://pfs.nifcloud.com/service/hatoba.htm

# 2. Kubernetesクラスターの作成

クイックスタートを参考にしてKubernetesクラスターの作成をしました。
このクイックスタートはとても分かりやすく、書かれている手順に沿ってHatoba（β）の管理画面から作業を行えば迷うところなくクラスターを作成できるはずです。

[クイックスタート](https://pfs.nifcloud.com/guide/hatoba/quickstart.htm)

- ファイアウォールグループ作成
 - ファイアウォールグループ作成
 - INルール追加  
クライアント端末からクラスターにkubectlで接続するので、そのためにクライアントPCのIPアドレスからの *TCP:6443* のINルールを追加します。
- クラスター作成
 - クラスター作成  
現時点では、クラスターのkubernetesのバージョンは、`v1.11.6` 固定でした。  
masterノードの数を 1 か 3 から選べますが、3 を設定すると、登録時に
「ノード数が作成・設定可能上限に達しています。」
のエラーメッセージが出力されます。
現状、1 しか指定できない模様です。
 - ノードプールの作成  
workerノードのサブセットとなるノードプールを作成します。  
私はノード数に 2 を設定しました。

ここまで設定した内容を、ニフクラの管理画面で見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220817/ae19698a-22e7-c748-b5ca-6c4b142f9999.png)

Hatobaはまだβ版のため機能が少ないという事情もあると思いますが、とてもシンプルで見やすいです。

続いて、Kubernetesクラスターへの接続確認ですが、クライアント端末からコマンドラインツールのkubectlを利用して行いました。私のクライアント端末は Windows 8.1 です。

- kubectlをダウンロード  
https://kubernetes.io/docs/tasks/tools/install-kubectl/
- ダウンロードしたライブラリをPATHに追加
- Hatobaの管理画面からクレデンシャルをコピーし、INルールで許可したクライアント環境の ~/.kube/config に保存
- `kubectl get nodes` を実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220817/05bb9620-cc9b-0266-3dd9-331ac0778860.png)

masterノードと、workerノードの2つがReady状態になったことが確認できます。

# 3. デプロイするアプリケーションの作成

Nginxイメージに独自で作成したHTMLを入れ込んだイメージを作成しました。

[docker の nginx イメージの設定ファイルを眺めながら、独自ページを表示します。](https://qiita.com/mochizukikotaro/items/1d28888b78f401227ed6)
の記事を参考にさせていただきました。

下記のディレクトリ構造で、画像とcssを参照する簡易的なhtmlを作成しました。

```
html
  │─ index.html
  ├─css
  │  └─ style.css
  └─images
     └─ yamasha_eternal_2_TP_V.jpg
```

DockerFileもシンプルです。

```dockerfile:Dockerfile
FROM nginx
COPY ./html /usr/share/nginx/html
```

これでイメージを作成し、Dockerhubに登録しました。

# 4. マニュフェストファイルの作成

マニュフェストファイル（yaml定義ファイル）の構成は下記の通りです。

```yaml:nifnif.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-nifnif
  labels:
    app: nginx-nifnif
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx-nifnif
  template:
    metadata:
      labels:
        app: nginx-nifnif
        version: v1
    spec:
      containers:
        - name: nginx-nifnif
          image: "{dockerhubのurl}"
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-nifnif
spec:
  type: NodePort
  selector:
    app: nginx-nifnif
  ports:
    - protocol: TCP
      port: 80
      name: nginx-nifnif
      nodePort: 32280
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-nifnif
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-nifnif
  minReplicas: 2 # 最小レプリカ数
  maxReplicas: 4 # 最大レプリカ数
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 10
```

デプロイしたアプリケーション（Nginx）が利用するポート番号（今回の例では、32280ポート）をINルールに追加します。

# 5. クラスター上へのデプロイ

下記コマンドを実行して、kubernetesクラスター上にアプリケーションをデプロイします。

`kubectl apply -f nifnif.yaml`

コマンド実行後、Podの状況を確認します。

`kubectl get pods`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220817/509ea278-2041-0818-edb5-54de7ec54081.png)

Podが4つ動作していることが確認できました。
では、実際にアプリケーションが動いているかブラウザで確認してみることにします。
URLは、`http://{masterノードのグローバルIPアドレス}:{Nginxポート番号}` です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220817/4e6066e1-d514-be5c-5632-ca2df9fc602d.png)

無事、Webページが表示されていることが確認できました。
余談ですが、イベント当日にニフクラさんのイメージに合う背景のフリー画像を探すのは大変でしたが、最終的にいい画像に巡り合えたと自己満足しています。

# 6. まとめ

Hatoba（β）を利用してみた感想として、良かった点を３つ挙げます。

- Kubernetesクラスターを管理画面から簡単に作成できる 
- クイックスタートが分かり易い
- デプロイしたPodが安定して動いている

オンプレにKubernetesを導入する場合、masterノードとworkerノードそれぞれに対して、それなりに多くの導入作業が必要となります。その点、Hatoba（β）は管理画面から簡単に作成できるのでとても楽です。
また、オンプレに建てたKubernetesでは、起動したPodが原因不明で急死することがありましたが、Hatoba（β）では今のところそのような事は起きておらず、順調に動いています。
私は、GKSなど他のKubernetesマネージドサービスを利用したことないため、それらと比較した評価はできませんが、少なくともオンプレでやるより楽そうです。

今回は、簡易的なアプリケーションをクラスター上にデプロイしただけでしたが、もっと深くHatoba（β）を使ってKubernetesと戯れてみたいと思います。