8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

最小規模のアプリケーション例があったので、こちらを利用します。

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
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を選択します。

00_ダッシュボード.PNG

左メニューからファイヤーウォールを選択して、以下のアクセスに必要なポートを開けておきます。

01_FW設定.png

ポート番号 説明
6443 kubectl用
31500 Flaskアプリケーション用

左メニューからクラスタを選択して、クラスタを作成していきます。
クラスタを選択すると、以下の画面が表示されます。

02_クラスタ一覧.PNG

クラスタを作成するために、[クラスタ作成]ボタンをクリックします。

03_クラスタ作成.PNG

必要な項目を入力・選択して、[ノードプールの設定へ]ボタンをクリックします。

04_ノードプール作成.PNG

必要な項目を入力・選択して、[確認へ]ボタンをクリックします。

05_設定内容確認.PNG

内容を確認して、[作成する]ボタンをクリックします。

06_起動後.PNG

正常に起動されると、上記の画面が表示されます。

kubectlを動かしてみる

はじめに、コマンドをインストールします。

tdnf -y install kubernetes-kubectl-extras
ln -s /opt/vmware/kubernetes/linux/amd64/kubectl /usr/local/bin

続いて、kubectlを使うための準備をします。
接続のためのクラスター クレデンシャルを登録します。
コントロールパネルからクラスタを選択して、クレデンシャル表示を選択します。

07_クレデンシャル表示.PNG

表示されているクレデンシャルをコピーし、~/.kube/configを作成します。

mkdir ~/.kube
vi  ~/.kube/config

kubectlが正しく動作するかを確認します。

kubectl get nodes

作成したノードの情報が取得できれば完了です。

アプリケーションを登録する

作成したクラスタにコンテナを登録していきます。
登録するアプリケーションの定義ファイルを

vi demo.yaml
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 を拡張した になります。

8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?