前にこんな感じのことをやってました。
k8sの闇奥が深すぎて、手間取ってます。
今回は、簡単ではありますがマイクロサービス化していきたいと思います。
やること
前回はこんな感じになっていたかと思います。
後で気づいたんですが、これ同じPodにする必要ないですね。 ということで、FlaskとMySQLのコンテナをPodごと分離したいと思います。 イメージとしてはこんな感じですね。
k8sクラスタ上でマイクロサービスを構築する勉強のイメージでやっていきます。
やってみる
とりあえずやってみます。
1. コンテナ作り直し
MySQL
こちらは前と一緒なので割愛します。
Flask
次に、Podを分離したのでFlask側はチョット直します。
前回の例に習って、Flaskとnginxをつなげたコンテナを使用しようと思います。 Flaskのエンドポイントの定義を変更します。
$docker image build -t myapp .
こんな感じにimageを作っておきます。
2. k8sのマニフェストファイルを作る
MySQL
こんな感じですね。
PVとかは前の記事をご参照。
これでいまこんな感じですね。
Flask
deploymentはこんな感じですかね。
こっちはk8sクラスタの外に公開したいので、ServiceのLoadBalancerを使用します。
これでこんな感じですね。
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
アクセスしてみる
最後に稼働確認します。
まず、"/"にアクセスしたときは画面が返ってくる想定で、実際にアクセスしてみます。
次に、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"}]}
ちゃんとできてますね。 良かったよかった。
感想
バックエンドの方はあとは、普通のプログラミングですね。 少なくとも自由研究のレベルでは深入りはしないつもりです。
ということで、もうちょっとで自由研究もおしまいです。最後までがんばります。