Slide 1

Slide 1 text

Kubernetes in Startup ~UbieのインフラをKubernetesに乗せた話~ Japan Container Days v18.12 MeetUp @sakajunquality

Slide 2

Slide 2 text

- Google Developers Expert - Software Engineer @ Ubie Inc. - やってること #infrastructure #docker #kubernetes - 好きなこと #coffee #beer About @sakajunquality

Slide 3

Slide 3 text

About Ubie - 医療スタートアップ - 創業約1年半 - エンジニア 6名 - 内インフラ: 1

Slide 4

Slide 4 text

Today’s Agenda - PaaSから Kubernetes に移行した話 - Kubernetes 移行で苦労した話 - Kubernetes 移行後苦労した話

Slide 5

Slide 5 text

PaaS から Kubernetes に移行した 話

Slide 6

Slide 6 text

Why Kubernetes? - すでに複数のサービスが動いている、今後もサービスが増える予定 - GCPにはマネージドのKubernetesがある - 個人的に好き

Slide 7

Slide 7 text

- フロント1つ + 複数のバックエンドが稼働 - バックエンドは、Ruby on Rails から Kotlin w/ Spring Boot に移行中 Services in Ubie

Slide 8

Slide 8 text

- フロント1つ + 複数のバックエンドが稼働 - さらにサービスは増える予定 Services in Ubie

Slide 9

Slide 9 text

GCP - Heroku から GCP に移行することが決まっていた - セキュリティやマネージドサービスなどの理由 - GKE - マネージド Kubernetes - CI / CDもマネージド - マネージド Istio など今後も期待

Slide 10

Slide 10 text

個人的に好き - 個人的には結構重要だと思う

Slide 11

Slide 11 text

移行 - 移行 - 新しいバックエンドのサービスの稼働 - 既存のサービスの移行 - スケジュール - 2018年10月にUbie入社 - 2018年11月頭に移行完了 - (本当は10月中に終わらせたかった )

Slide 12

Slide 12 text

PaaS から Kubernetes に載せ替えて - リソースが効率化された - Compute / Memory / Disk - サービス間の通信で無駄に外に行くことがなくなった - インターナルなサービスで通信 - 体感速度も上がった! - プロセスの監視もしっかりできるようになった - デプロイフローも GitOps で統一できた

Slide 13

Slide 13 text

GitOpsの話はシアトルで!

Slide 14

Slide 14 text

Kubernetes is Great!

Slide 15

Slide 15 text

Kubernetes 移行で苦労した話

Slide 16

Slide 16 text

Kubernetes 移行で苦労した話 - Dockernize・環境変数 - なぜか動かないのでデバッグ - Kubernetes 自体

Slide 17

Slide 17 text

Dockernize - そもそものDocker化されていなかった

Slide 18

Slide 18 text

Dockernize - そもそものDocker化されていなかった - → Docker化してもらった

Slide 19

Slide 19 text

Dockernize - そもそものDocker化されていなかった - → Docker化してもらった - → いざ動かしたら動かないw

Slide 20

Slide 20 text

環境変数 - 環境変数がコード化されていない - heroku config すればOK - 本番・ステージで微妙に違ったり・・・

Slide 21

Slide 21 text

環境変数 - 環境変数がコード化されていない - heroku config すればOK - 本番・ステージで微妙に違ったり・・・ - → 泥臭く精査(いらないもの消したり)

Slide 22

Slide 22 text

なぜか動かないのでデバッグ - コンテナにtcpdump入れてリクエストを見てみたり・・・ - kubectl exec をひたすら繰り返す

Slide 23

Slide 23 text

Kubernetes 自体が難しい - アプリケーション開発者には Kubernetes は意識させたくない - が、すぐにそこまで作り込めないので触って貰う必要がある

Slide 24

Slide 24 text

外部でやったハンズオンを社内でやったり https://github.com/sakajunquality/gke-getting-started

Slide 25

Slide 25 text

Kubernetes is Difficult!

Slide 26

Slide 26 text

- 場合によっては、Kubernetes で動かすところまでたどり着くのも難しい - 慣れてないと、Kubernetes 自体難しい Kubernetes is Difficult!

Slide 27

Slide 27 text

Kubernetes 移行後苦労した話

Slide 28

Slide 28 text

Kubernetes 移行後苦労してる話

Slide 29

Slide 29 text

Kubernetes 移行後苦労してる話 - ジョブの実行 - Podがevicted - デプロイの通知 - namespaceの区切り方ミス

Slide 30

Slide 30 text

ジョブの実行 - DBマイグレーションなどの定常的なジョブ - → デプロイのパイプラインに組み込む - → 問題なし

Slide 31

Slide 31 text

ジョブの実行 - 順序を気にするようなアドホックのコマンドを実行する - → batch/v1のJob? - → kubectl exec? - どう自動化に組み込むか? - リッチなCI用意する?

Slide 32

Slide 32 text

Podがevicted - Podの一覧を見るとevictedになっている - 割り当てたディスクを使い果たす - → アプリケーションのバグだったの修正 - 割り当てたメモリを使い果たす - → 調査中

Slide 33

Slide 33 text

デプロイの通知 - ローリングアップデートの通知がわかりにくい - 単純に作ればいいが、時間が取れていない・・

Slide 34

Slide 34 text

- RubyからKotlinへの書き換えをしているので、言語でnamespaceを区切った - → RBACのことを考えると、組織の発展を考えた区切り方にしたほうが良かった namespaceの区切り方

Slide 35

Slide 35 text

Kubernetes is Hard!

Slide 36

Slide 36 text

Kubernetes is Hard! - 本番運用し始めてから気づくことも - 運用の大変なところはコンテナにしてもそうじゃなくても変わらないところが大き い - どう自動化するかとか

Slide 37

Slide 37 text

Kubernetes is still Great?

Slide 38

Slide 38 text

- オーケストレーションとしてよくできていると思う - アプリケーション開発者に意識させない用にするには、結構作り込みがいる気 がする - ただし作り込めば、新しいサービスを増やす際も共通の基盤として使える Kubernetes is still Great?

Slide 39

Slide 39 text

Kubernetes in startup? - リソースが限られているので、作り込みが甘いのは多少しょうがない - Kubernetes を使って実現したい世界をアプリケーション開発者に共有し、協力 を得る

Slide 40

Slide 40 text

Conclusion

Slide 41

Slide 41 text

Conclusion - Kubernetes is Great! - Kubernetes is Difficult! - Kubernetes is Hard! - Kubernetes is Great!

Slide 42

Slide 42 text

Thank you