はじめて GCP/GKE で サービスを運用するまでの話
by
m-yoshimo
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
はじめて GCP/GKE で サービスを運用するまでの話 Masanori Yoshimoto (@m_yoshimo)
Slide 2
Slide 2 text
Name: “Masanori Yoshimoto“, Nickname: “よしも“, Job: “フリーランスエンジニア“, Twitter: “@m_yoshimo“, Skills: { “WebRTC“, “Key value store“, “Onpremiss 2 Cloud Migration“, }, Career: “Search LinkedIn by name“ 自己紹介
Slide 3
Slide 3 text
今日のお話するテーマ
Slide 4
Slide 4 text
Kubernetes を使ったことがない僕が GCP/GKE でサービスを本番運用できるよ うになるまでに何を勉強したか
Slide 5
Slide 5 text
・これから Kubernetes をやりたい人 ・Kubernetes を運用している人で 新規メンバーにどう学習してもらうか 悩んでいる人 おもな視聴者ターゲット
Slide 6
Slide 6 text
・Vagrant、Docker、Packer の使用経験あり ・OpenStack on オンプレでサービス運用経験あり ・AWS 使用経験あり ・GCP 使用経験なし 僕のインフラ技術のバックグランド (仮想化&クラウド関連)
Slide 7
Slide 7 text
Kubernetes との出会い
Slide 8
Slide 8 text
フリーランスになって 初めて参画した会社で使われていた
Slide 9
Slide 9 text
Kubernetes さっぱりなんだけど。。。
Slide 10
Slide 10 text
とりあえずドキュメントを読んでみた
Slide 11
Slide 11 text
よー分からん。。。^ ^;;;
Slide 12
Slide 12 text
Pod って何やねん? Service?アプリケーションのこと? でも ClusterIP とか書いてるし。。。 Ingress!某位置情報ゲーム?(違う!) 昔、僕もやってました (だから違う!!)
Slide 13
Slide 13 text
手を動かせば分かるだろう
Slide 14
Slide 14 text
公式チュートリアルやってみた ・日本語のアーキテクチャ説明 ・対話型チュートリアル (チュートリアルの説明文は英語) ・Cloud Console (ローカルに環境用意しなくて良い) https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/ 最初にやったこと
Slide 15
Slide 15 text
チュートリアルで覚えたこと ・kubectl コマンド ・基本的なアーキテクチャ ・Pod はコンテナを入れる箱 ・Node は Pod を入れる箱 (= VM) ・Service は Pod 間や外部との 通信方式を定義するもの
Slide 16
Slide 16 text
Rails アプリをローカルの Minikube で 構築してみる https://qiita.com/ttiger55/items/215cab36da848fba156b 2つ目にやったこと
Slide 17
Slide 17 text
・Rails app な Pod ・mysqld な Pod + Persistent Volume ・Ingress + Nginx Ingress Controller + ConfigMap
Slide 18
Slide 18 text
Minikube 使って覚えたこと ・NodePort とか ClusterIP の理解 ・PersistentVolume などの永続化 ・Ingress の使い方 (理解はまだ)
Slide 19
Slide 19 text
本番サービス同等のものを ゼロから GCP/GKE に構築してみる 3つ目にやったこと
Slide 20
Slide 20 text
すると、色々なところで詰まった ・Docker イメージはどこに置けば良いのか? ・Cloud SQL にアクセスできない ・外部公開 (外部 IP アドレス) どうするの? ・git push 時にデプロイしたい ・Ingress 立てたけどバックエンドサービスが ないって怒られる。。。 ・etc...
Slide 21
Slide 21 text
問題のほとんどは Kubernetes ではなく GCP 依存な部分
Slide 22
Slide 22 text
・Container Registry ・Service Account ・VPC ネットワークと外部 IP アドレス ・Cloud DNS ・Cloud Build
Slide 23
Slide 23 text
一つ一つは難しい問題ではない ぐぐればすぐに解決する (Ingress だけ少し嵌ったけど。。。
Slide 24
Slide 24 text
GCP でやることと GKE でやることの 違いが分かってくる → 全体のアーキテクチャが 何となく見えてくる
Slide 25
Slide 25 text
k8s への理解も進む
Slide 26
Slide 26 text
・Cloud SQL Proxy ・Ingress の設定と Pod の ClusterIP ・Ingress と GCP Load Balancer の関係
Slide 27
Slide 27 text
GKE 上でノードを増減させたりして遊ぶ では、その次は
Slide 28
Slide 28 text
遊ぶ上で重要なこと ・ワークロード画面やサービス画面を 見ながらやること ・mackerel などのモニタリング入れる
Slide 29
Slide 29 text
やったこと ・手動でノードの増減 ・Pod の Replica の数の設定変更 ・Rails の sidekiq コンテナ入れる ・CronJob 作ってみたり
Slide 30
Slide 30 text
ワークロードや Pod の詳細
Slide 31
Slide 31 text
mackerel 等のモニタリングツール
Slide 32
Slide 32 text
リアルタイムに状況が可視化される → 実際に何が起きているのか 理解しやすくなる
Slide 33
Slide 33 text
ここまできたら、 Kubernetes への拒否感はなくなってる
Slide 34
Slide 34 text
おさらい (学習したこと) 1. 公式チュートリアル 2. Minikube でローカルにアプリ構築 3. GCP/GKE にアプリを構築 4. GCP/GKE で遊ぶ!
Slide 35
Slide 35 text
実際に本番のサービスを運用して 発生した問題を解決していけば 自ずと成長する
Slide 36
Slide 36 text
・アプリでもつ秘密鍵の管理 ・ワーカーサービス (sidekiq) をアプリと 同居させたら CPU 詰まった話 ・cloudsql proxy を別 Pod にしたら CPU Request 無駄に使っちゃった
Slide 37
Slide 37 text
この辺りの話を聞きたい方は 是非、次の Cloud Native Kansai で!