okadato の雑記帳

スタートアップでSREとしてはたらくokadatoの雑記です。

マイクロサービス / Kubernetes 入門!シャレオツWebアプリで未来を味わおう!【Hipster Shop 導入編】

f:id:okadato623:20191104112449p:plain



面接官「えーではまず『マイクロサービス』とはなにか、あなたなりの言葉で説明してみてください」



ぼく「アッアッ、マイクロ、アッ、マイクロサービスアッアッ、マイクロサーッアッアッ」

※ ラッパーではなくテンパっている様子です










手に汗握る展開ですね。

マイクロサービスとはなにか。こう聞かれたときに


ぼく「はい、私の考えるマイクロサービスとは(ペラペラペラペラ)」


こうなりたくはないですか!?!?
というわけで今回からしばらく マイクロサービス is ナニ?? を勉強していきます!



はじめに

なにはともあれまずは Google 先生に聞いてみましょう。
「マイクロサービス 勉強」で検索してみると、お、1ページ目から良さそうなサイトが見つかりました!!



f:id:okadato623:20191104103545p:plain



ぼく「アッアッ、カックさアッ、ブログメンタッアッ、今週のノルマアッアッ」







閑話休題

我が師、カックさんが書かれた上記の記事では、Sock Shop という靴下ECサイトの構築を通じてマイクロサービスを体験できるとのことです。
しかも Docker Compose を使ってローカルで動かすことも可能!素晴らしいですね!



藍より青く

ですが今回はその Sock Shop よりちょっと良さそうなサンプルアプリケーションを発見しましたので、あえてそちらの紹介をしたいと思います。
その名も Hipster Shop。



ちなみに weblio の解説によると Hipster とは以下のような意味だそうです。

通(つう)、ジャズ通、ジャズファン、流行の先端を行く人、新しがり屋

要はイケイケな商品を扱うシャレオツECサイトですね!
コチラから実際に動いているサイトにアクセスして動作を確認することも可能です。
トップページのスクショをみても、ぼくには全然興味のない商品が羅列されています。



f:id:okadato623:20191104104023p:plain



しかもサービス連携の図がもうなんかパッと見ただけでブラウザバックしたくなるような仕上がりになっていますね。



f:id:okadato623:20191104104041p:plain



逃げたい。
こんなときぼくの脳裏では弊チームの Mng である @katsuhisa__ が顔をのぞかせます。



――まずは、スタディストさんの会社紹介をしていただけますでしょうか?

北野
まず社名の由来から説明いたします。「スタディ=学習する、勉強する」という意味の言葉と、
人を表す接尾辞の「イスト」。それを繋げて、「スタディスト」という社名になりました。



…… 勉強をすることから逃げて、「私はスタディストの社員です」などとどうして言えようか!!!(自らの首をギュッ♥)



というわけでまずはなぜ「こちらのほうが良さそうかも?」と思ったのかをご紹介〜
ひとことでいうと、マイクロサービスまわりのエコシステムが充実してそうだなという印象を受けたのでした!



Hipster Shop の特徴

README から本サービスの特徴を抜粋し、自分なりに噛み砕いて説明します。





よくわからない!!逃げたい!!!

でも、よくわからないけどなんかすごそうじゃないですか!?!?
とはいえこれは絶対今回の記事だけじゃ紹介しきれないやーつ!!!


と、いうわけで今回は「とりあえずローカルで動かす」までの手順をご紹介します!



前提

Hipster Shop の動作環境としては Docker for Desktop 上の Kubernetes クラスタか、GKE 上で動かすという二択があるようです。
今回はより手軽にできるほうをということで Docker for Mac + Kubernetes 上で検証しました。その手順の説明となっております。また Docker for Mac は導入済みとします。



1. 必要なコマンドのインストール

以下ふたつのコマンドをインストールしておく必要があります。
MacOS であれば、brew コマンドで一発です。

なんの説明も要らないですね。ステキな世の中ですよ、ほんとにさ。



2. Docker for MacKubernetes を有効化

Docker for Mac の設定画面から Kubernetes タブを参照し、Enable にします。

f:id:okadato623:20191104115804p:plain



そして Advanced タブからDocker Engiine に割り当てる CPUs を3 以上に、メモリを 6.0 GiB 以上に設定します(ぼくはとりあえず全振りしてます)

f:id:okadato623:20191104115813p:plain



最後に、Disk タブからディスク容量を32GB 以上に設定します。

f:id:okadato623:20191104115822p:plain



3. いざ、インストール!

git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
cd microservices-demo

さてそして skaffold run というコマンドを実行!
すると、こんな感じで各コンテナのビルドが始まります。

❯ skaffold run
Generating tags...
- emailservice -> emailservice:v0.1.2-4-ga95997b
- productcatalogservice -> productcatalogservice:v0.1.2-4-ga95997b
- recommendationservice -> recommendationservice:v0.1.2-4-ga95997b
- shippingservice -> shippingservice:v0.1.2-4-ga95997b
- checkoutservice -> checkoutservice:v0.1.2-4-ga95997b
- paymentservice -> paymentservice:v0.1.2-4-ga95997b
- currencyservice -> currencyservice:v0.1.2-4-ga95997b
- cartservice -> cartservice:v0.1.2-4-ga95997b
- frontend -> frontend:v0.1.2-4-ga95997b
- loadgenerator -> loadgenerator:v0.1.2-4-ga95997b
- adservice -> adservice:v0.1.2-4-ga95997b
Tags generated in 56.060822ms
Checking cache...
- emailservice: Not found. Building
- productcatalogservice: Not found. Building
- recommendationservice: Not found. Building
- shippingservice: Not found. Building
- checkoutservice: Not found. Building
- paymentservice: Not found. Building
- currencyservice: Not found. Building
- cartservice: Not found. Building
- frontend: Not found. Building
- loadgenerator: Not found. Building
- adservice: Not found. Building
Cache check complete in 21.739171717s
Starting build...
Found [docker-desktop] context, using local docker daemon.
Building [emailservice]...
Sending build context to Docker daemon 101.9kB
Step 1/14 : FROM python:3.7-slim as base
:
:



emailservice -> emailservice:v0.1.2-4-ga95997b
productcatalogservice -> productcatalogservice:v0.1.2-4-ga95997b
recommendationservice -> recommendationservice:v0.1.2-4-ga95997b
shippingservice -> shippingservice:v0.1.2-4-ga95997b
checkoutservice -> checkoutservice:v0.1.2-4-ga95997b
paymentservice -> paymentservice:v0.1.2-4-ga95997b
currencyservice -> currencyservice:v0.1.2-4-ga95997b
cartservice -> cartservice:v0.1.2-4-ga95997b
frontend -> frontend:v0.1.2-4-ga95997b
loadgenerator -> loadgenerator:v0.1.2-4-ga95997b
adservice -> adservice:v0.1.2-4-ga95997b

抜粋すると、全部で 11 個のマイクロサービスから構成されるWebアプリなんですね!



脱線脱線〜

20 〜 30分ほどでインストールが終わります。
その間に以下の記事でも読んでお待ち下さい ☕



記事中から一部を抜粋します。

    :
    :

いや、それは実に簡単だ。Kubernetesのクラスタをセットアップすればいい。

クラスタが必要なのか?

Kubernetesクラスタだ。君の全てのサービスのデプロイを管理してくれる。

僕は1個しかサービスを持ってないよ。

どういう意味だ?アプリがあるんだろ?それなら少なくとも8個から12個のサービスがあるはずだ。

なんだって?いや、1個だけだ。サービスがどんな意味であれ、1個だけだ。

ノー。マイクロサービスについて調べてみろ。未来だ。今はみんなそうやっている。
君のモノリシックなアプリを12個のマイクロサービスに分割しろ。1個のジョブにつき1個のサービスだ。

それはやりすぎじゃないか。

それが信頼性を高める唯一の方法だ。認証サービスがダウンしたとしよう…

     :
     :
 



ぼくは数年前にこの記事を読んだとき、完全なるネタ記事かと思っていました。
が、しかし。もう一度言います。



実際に Hipster Shop は 11 個のマイクロサービスから構成されるWebアプリなのです!

原題は "It's The Future" という2015年に書かれた記事ですが、ぼくたちはいま、この未来に立っているわけです!Amazing!!!





You've made it!

さて、そうこうしているうちにインストールは終わったでしょうか?
以下のコマンドを実行してみて、 12個の pod が稼働していればOKです!



❯ kubectl get pods
NAME READY STATUS RESTARTS AGE
adservice-56d6b86b69-ps58x 1/1 Running 0 12m
cartservice-5b769fbcd-vghph 1/1 Running 0 12m
checkoutservice-76cf7d66c4-9cn26 1/1 Running 0 12m
currencyservice-676c45cbd8-sbndb 1/1 Running 0 12m
emailservice-554cd4f969-lt5hz 1/1 Running 0 12m
frontend-b8454cdfd-s7whb 1/1 Running 0 12m
loadgenerator-545785998f-b78cx 1/1 Running 0 12m
paymentservice-7945c44864-8jtsb 1/1 Running 0 12m
productcatalogservice-dc8b5785-2grmp 1/1 Running 0 12m
recommendationservice-b64fdd8c5-7gpw8 1/1 Running 0 12m
redis-cart-5f5479d755-ncsfn 1/1 Running 0 12m
shippingservice-64c4994bdd-xhlw9 1/1 Running 0 12m



http://localhost:80 にアクセスしてみましょう。
以下のようなトップページが表示されていれば構築完了!です!

f:id:okadato623:20191104103106p:plain





(実は上の画像には一箇所だけおかしなところがあります。ど〜こだ??)



おわりに

というわけで、今回は Hipster Shop をとりあえず動かす!ところまでやってみました。
次回から一歩ずつ遊びつつ、マイクロサービスや Kubernetes の中身を学んでいきましょう!
なにはなくともモニタリング ということで、次回は監視設定の導入を行う予定です!


ちなみに Hipster Shop を動かし続けていると、ぼくの MacBook Pro ちゃんはホットプレートと化します。一通り遊んだら skaffold delete コマンドで終了させておきましょう。






最後に、間違い探しの正解はこの子でした〜



f:id:okadato623:20191104103116p:plain



いまなら 251,011.05円 と大変お買い得!!
というわけで(?)次回もおたのしみに、やぁん♥