Hatobaでコンテナを動かしてみた
みなさん、こんにちは。
富士通クラウドテクノロジーズ Advent Calendar 2019の3日目の記事です。
はじめに
ニフクラからHatobaというコンテナのサービスが提供されています。サービス紹介はこちらから。
Hatobaは、ニフクラから提供されているKubernetesクラスターを簡単に構築・管理できるサービスです。
Hatobaで構築したクラスターは、ニフクラにてマネージメントされています。Kubernetesの標準的な操作で、コンテナ化されたアプリケーションを、クラスター上にデプロイできます。
今日は、このサービスを利用してコンテナをデプロイするところまでをやっていきます。
前準備
操作するための環境をニフクラ上に作成していきます。
今回は、VMware Photon OS 3.0を利用していきます。まずは、docker動くようにしていきます。
ニフクラのコントロールパネルから、VMware Photon OS 3.0を選択してサーバを作成します。
起動したらsshで接続を行い、dockerが動作する環境を作っていきます。
systemctl start docker
ちゃんとdockreコマンドが動作するか確認します。
docker --version
ログインもしておきましょう。
docker login
アプリケーションを用意する
アプリケーションを格納するためのディレクトリを作成します。
mkdir demo-app
cd demo-app
コンテナを作るために簡単なアプリケーションを作ります。
pythonのflaskというフレームワークを使って実装します。
mkdir src
vi src/app.py
最小規模のアプリケーション例があったので、こちらを利用します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello World!"
if __name__ == '__main__':
app.run()
コンテナを用意する
作成したアプリケーションを動作するコンテナを用意します。
pythonのコンテナでFlaskが動作するDockerfileを作ります。
vi Dockerfile
FROM python:3.6
RUN pip install Flask
ARG project_dir=/projects/
ADD src/app.py $project_dir
WORKDIR $project_dir
CMD flask run --host 0.0.0.0 --port 5000
コンテナの動作確認を行います。
コンテナを作成して、動作を確認します。
docker build -t demo-app .
docker run -d -p 5000:5000 demo-app
起動したコンテナに接続してみます。
curl -s http://127.0.0.1:5000
「Hello world!」が表示されました。
作成したコンテナをDockerHubに登録
コンテナをDockerHubに登録します。
docker image tag demo-app <DockerID>/demo-app:v1
docker image push <DockerID>/demo-app:v1
クラスタを作成する
では、このコンテナを動作させてるためのKubernetes環境を作成していきます。
ニフクラにログインしてHatobaを選択します。
左メニューからファイヤーウォールを選択して、以下のアクセスに必要なポートを開けておきます。
ポート番号 | 説明 |
---|---|
6443 | kubectl用 |
31500 | Flaskアプリケーション用 |
左メニューからクラスタを選択して、クラスタを作成していきます。
クラスタを選択すると、以下の画面が表示されます。
クラスタを作成するために、[クラスタ作成]ボタンをクリックします。
必要な項目を入力・選択して、[ノードプールの設定へ]ボタンをクリックします。
必要な項目を入力・選択して、[確認へ]ボタンをクリックします。
内容を確認して、[作成する]ボタンをクリックします。
正常に起動されると、上記の画面が表示されます。
kubectlを動かしてみる
はじめに、コマンドをインストールします。
tdnf -y install kubernetes-kubectl-extras
ln -s /opt/vmware/kubernetes/linux/amd64/kubectl /usr/local/bin
続いて、kubectlを使うための準備をします。
接続のためのクラスター クレデンシャルを登録します。
コントロールパネルからクラスタを選択して、クレデンシャル表示を選択します。
表示されているクレデンシャルをコピーし、~/.kube/config
を作成します。
mkdir ~/.kube
vi ~/.kube/config
kubectlが正しく動作するかを確認します。
kubectl get nodes
作成したノードの情報が取得できれば完了です。
アプリケーションを登録する
作成したクラスタにコンテナを登録していきます。
登録するアプリケーションの定義ファイルを
vi demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-flask
labels:
app: app-flask
spec:
replicas: 3
selector:
matchLabels:
app: app-flask
template:
metadata:
labels:
app: app-flask
version: v1
spec:
containers:
- name: app-flask
image: <DockerID>/demo-app:v1
command: ["flask"]
args:
- "run"
- "--host"
- "0.0.0.0"
- "--port"
- "5000"
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: app-flask
spec:
type: NodePort
selector:
app: app-flask
ports:
- protocol: TCP
port: 5000
name: app-flask
nodePort: 31500
アプリケーションの登録を実施します。
kubectl apply -f demo.yaml --record
アクセスしてみる
ノードプールを表示して設定されているグローバルIPをコントロールパネルから確認して、ローカルで確認した時と同じように接続を行います。
# curl -s http://<PodのIPアドレス>:31500
「Hello world!」が表示されましたでしょうか。
おわりに
いかがでしたでしょうか?
Hatobaを使えば簡単に、Kubernetesを試すことができます。
明日は、 @tmtms さんの MySQL Parameters を拡張した になります。