1. 概要
ニフクラのHatoba(β)使って、Kubernetesクラスター上に簡単なアプリケーションをデプロイしたところ、想像以上に簡単できて好印象だったため、当初、聴講するだけのつもりで参加した
ニフクラのFJCTさん主催のミートアップイベント(2019/4/24)で急遽飛び入りLTをさせていただきました。
この記事は、LTで話した内容をまとめたものです。
Hatoba(β)って何?
Hatobaは、ニフクラのFJCTさんが提供しているKubernetesクラスターを構築・管理できるサービスです。
利用するには、法人での利用申し込みが必要です。現在、β版のため利用料金はかからないのが、素敵です。
2. Kubernetesクラスターの作成
クイックスタートを参考にしてKubernetesクラスターの作成をしました。
このクイックスタートはとても分かりやすく、書かれている手順に沿ってHatoba(β)の管理画面から作業を行えば迷うところなくクラスターを作成できるはずです。
- ファイアウォールグループ作成
- ファイアウォールグループ作成
- INルール追加
クライアント端末からクラスターにkubectlで接続するので、そのためにクライアントPCのIPアドレスからの TCP:6443 のINルールを追加します。 - クラスター作成
- クラスター作成
現時点では、クラスターのkubernetesのバージョンは、v1.11.6
固定でした。
masterノードの数を 1 か 3 から選べますが、3 を設定すると、登録時に
「ノード数が作成・設定可能上限に達しています。」
のエラーメッセージが出力されます。
現状、1 しか指定できない模様です。 - ノードプールの作成
workerノードのサブセットとなるノードプールを作成します。
私はノード数に 2 を設定しました。
ここまで設定した内容を、ニフクラの管理画面で見てみます。
Hatobaはまだβ版のため機能が少ないという事情もあると思いますが、とてもシンプルで見やすいです。
続いて、Kubernetesクラスターへの接続確認ですが、クライアント端末からコマンドラインツールのkubectlを利用して行いました。私のクライアント端末は Windows 8.1 です。
- kubectlをダウンロード
https://kubernetes.io/docs/tasks/tools/install-kubectl/ - ダウンロードしたライブラリをPATHに追加
- Hatobaの管理画面からクレデンシャルをコピーし、INルールで許可したクライアント環境の ~/.kube/config に保存
-
kubectl get nodes
を実行
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もシンプルです。
FROM nginx
COPY ./html /usr/share/nginx/html
これでイメージを作成し、Dockerhubに登録しました。
4. マニュフェストファイルの作成
マニュフェストファイル(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の状況を確認します。
Podが4つ動作していることが確認できました。
では、実際にアプリケーションが動いているかブラウザで確認してみることにします。
URLは、http://{masterノードのグローバルIPアドレス}:{Nginxポート番号}
です。
無事、Webページが表示されていることが確認できました。
余談ですが、イベント当日にニフクラさんのイメージに合う背景のフリー画像を探すのは大変でしたが、最終的にいい画像に巡り合えたと自己満足しています。
6. まとめ
Hatoba(β)を利用してみた感想として、良かった点を3つ挙げます。
- Kubernetesクラスターを管理画面から簡単に作成できる
- クイックスタートが分かり易い
- デプロイしたPodが安定して動いている
オンプレにKubernetesを導入する場合、masterノードとworkerノードそれぞれに対して、それなりに多くの導入作業が必要となります。その点、Hatoba(β)は管理画面から簡単に作成できるのでとても楽です。
また、オンプレに建てたKubernetesでは、起動したPodが原因不明で急死することがありましたが、Hatoba(β)では今のところそのような事は起きておらず、順調に動いています。
私は、GKSなど他のKubernetesマネージドサービスを利用したことないため、それらと比較した評価はできませんが、少なくともオンプレでやるより楽そうです。
今回は、簡易的なアプリケーションをクラスター上にデプロイしただけでしたが、もっと深くHatoba(β)を使ってKubernetesと戯れてみたいと思います。