Edited at

ニフクラ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(β)の管理画面から作業を行えば迷うところなくクラスターを作成できるはずです。

クイックスタート


  • ファイアウォールグループ作成


    • ファイアウォールグループ作成

    • INルール追加

      クライアント端末からクラスターにkubectlで接続するので、そのためにクライアントPCのIPアドレスからの TCP:6443 のINルールを追加します。



  • クラスター作成


    • クラスター作成

      現時点では、クラスターのkubernetesのバージョンは、v1.11.6 固定でした。

      masterノードの数を 1 か 3 から選べますが、3 を設定すると、登録時に
      「ノード数が作成・設定可能上限に達しています。」
      のエラーメッセージが出力されます。
      現状、1 しか指定できない模様です。

    • ノードプールの作成

      workerノードのサブセットとなるノードプールを作成します。

      私はノード数に 2 を設定しました。



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

image.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

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


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

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

docker の nginx イメージの設定ファイルを眺めながら、独自ページを表示します。

の記事を参考にさせていただきました。

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

html

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

DockerFileもシンプルです。


Dockerfile

FROM nginx

COPY ./html /usr/share/nginx/html

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


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

マニュフェストファイル(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

Podが4つ動作していることが確認できました。

では、実際にアプリケーションが動いているかブラウザで確認してみることにします。

URLは、http://{masterノードのグローバルIPアドレス}:{Nginxポート番号} です。

image.png

無事、Webページが表示されていることが確認できました。

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


6. まとめ

Hatoba(β)を利用してみた感想として、良かった点を3つ挙げます。


  • Kubernetesクラスターを管理画面から簡単に作成できる

  • クイックスタートが分かり易い

  • デプロイしたPodが安定して動いている

オンプレにKubernetesを導入する場合、masterノードとworkerノードそれぞれに対して、それなりに多くの導入作業が必要となります。その点、Hatoba(β)は管理画面から簡単に作成できるのでとても楽です。

また、オンプレに建てたKubernetesでは、起動したPodが原因不明で急死することがありましたが、Hatoba(β)では今のところそのような事は起きておらず、順調に動いています。

私は、GKSなど他のKubernetesマネージドサービスを利用したことないため、それらと比較した評価はできませんが、少なくともオンプレでやるより楽そうです。

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