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 で!