どこにでもいるSEの備忘録

たぶん動くと思うからリリースしようぜ

【自由研究】Vue.js+Flask+Dockerで普通のWebアプリケーションを作る(その6:マイクロサービス化する)

f:id:nogawanogawa:20190812202110p:plain:w300

前にこんな感じのことをやってました。

nogawanogawa.hatenablog.com

k8sの奥が深すぎて、手間取ってます。 今回は、簡単ではありますがマイクロサービス化していきたいと思います。

nogawanogawa.hatenablog.com

やること

前回はこんな感じになっていたかと思います。

f:id:nogawanogawa:20190817185941j:plain:w500

後で気づいたんですが、これ同じPodにする必要ないですね。 ということで、FlaskとMySQLのコンテナをPodごと分離したいと思います。 イメージとしてはこんな感じですね。

f:id:nogawanogawa:20190819150022j:plain:w800

k8sクラスタ上でマイクロサービスを構築する勉強のイメージでやっていきます。

やってみる

とりあえずやってみます。

1. コンテナ作り直し

MySQL

こちらは前と一緒なので割愛します。

nogawanogawa.hatenablog.com

Flask

次に、Podを分離したのでFlask側はチョット直します。

前回の例に習って、Flaskとnginxをつなげたコンテナを使用しようと思います。 Flaskのエンドポイントの定義を変更します。

$docker image build -t myapp .

こんな感じにimageを作っておきます。

2. k8sのマニフェストファイルを作る

MySQL

こんな感じですね。

PVとかは前の記事をご参照。

これでいまこんな感じですね。

f:id:nogawanogawa:20190819225603j:plain:w500

Flask

deploymentはこんな感じですかね。

こっちはk8sクラスタの外に公開したいので、ServiceのLoadBalancerを使用します。

これでこんな感じですね。

f:id:nogawanogawa:20190819150022j:plain:w700

3. 稼働確認

K8sの稼働確認

Podはこんな感じになってます。

$kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
flask-b55868cc9-25xfv    1/1     Running   0          44s
myapp-6cf9697f98-wspp8   1/1     Running   0          54m

Serviceはこんな感じですね。

$kubectl get service
NAME          TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes    ClusterIP      10.96.0.1       <none>        443/TCP          36h
mysql         ClusterIP      None            <none>        3306/TCP         54m
sample-lb     LoadBalancer   10.109.88.220   localhost     8080:30082/TCP   12h

アクセスしてみる

最後に稼働確認します。

まず、"/"にアクセスしたときは画面が返ってくる想定で、実際にアクセスしてみます。

http://localhost:8080

f:id:nogawanogawa:20190818230811p:plain

次に、DB側にアクセスしてみます。

$curl http://localhost:8080/select
{"results":[{"category":"food","content":"good","index":1,"title":"curry"},{"category":"vegitable","content":"good","index":2,"title":"poteto"},{"category":"vegitable","content":"good","index":3,"title":"onion"},{"category":"meat","content":"good","index":4,"title":"poak"}]}

ちゃんとできてますね。 良かったよかった。

感想

バックエンドの方はあとは、普通のプログラミングですね。 少なくとも自由研究のレベルでは深入りはしないつもりです。

ということで、もうちょっとで自由研究もおしまいです。最後までがんばります。