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

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

【自由研究】Vue.js+Flask+Dockerで普通のWebアプリケーションを作る(その5:続Kubernetesに書き換える)

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

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

nogawanogawa.hatenablog.com

この記事の内容には一点問題があって、マシンの状態によってはDockerコンテナの状態が不安定です。 理由はわかっていて、MySQLのアプリがコンテナ内で起動する前にFlaskが起動してしまい、コネクションを確立できずにエラーで落ちています。

停止したコンテナを再起動させてあげれば普通に動くんですが、あまりにもイケてないです。 というわけでKubernetesを軽く勉強してました。

前回からk8sへ移行し始めました。今回はその続きです。

nogawanogawa.hatenablog.com

k8s

やること

Dockerの文脈では、そもそも論として、コンテナをコンテナとして使ってなかったので、そこから直していきます。

どういうことかというと、こんな感じに変えます。

f:id:nogawanogawa:20190815220214j:plain:w500

コンテナにはライブラリしか入ってなかったのを、プロダクションコードまでのせます。

k8sの文脈では、前回までの状態はこんな感じでした。

f:id:nogawanogawa:20190817185938j:plain:w500

今回はこんな感じに直します。

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

コンテナの作り方を直す

前はdocker-composeでコンテナを作成していましたが、今回はDocker Imageから定義します。

とは言うものの、Dockerfileをちょっと直してビルドしてあげるだけです。

k8s上に乗せる

すでにPodの中にMySQLのコンテナはできているので、Podの中にFlaskのコンテナを追加します。

flaskのスクリプトも一部書き換えました。

挙動確認

今回はコンテナの中から弄ってみます。

flaskのコンテナの中に入ります。

kubectl exec -it [pod name] bash

とりあえず、flaskが動いてるか確認。

top

top - 13:16:52 up  5:20,  0 users,  load average: 1.14, 1.15, 1.18
Tasks:   3 total,   1 running,   2 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.8 us, 12.6 sy,  0.0 ni, 80.5 id,  0.9 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem :  4042484 total,  1000136 free,  1640628 used,  1401720 buff/cache
KiB Swap:  1048572 total,  1048572 free,        0 used.  2046544 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0  193524  39036  14372 S   0.0  1.0   0:00.87 flask
   18 root      20   0   20252   3800   3356 S   0.0  0.1   0:00.02 bash
   63 root      20   0   38372   3508   3052 R   0.0  0.1   0:00.00 top

flaskが動いていて一安心。 mysqlのコンテナにつながるか確認。

root@myapp-786fcfdf85-tdw5d:~# curl localhost:5000
{"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"}]}

ちゃんと永続化されたデータがflask側から確認できました。

感想

これでようやくアプリケーションがk8s上に乗りました。k8sクラスタの外からアクセスできるようにできてないのは、単純に疲れたから。

しゅごい。