SlideShare a Scribd company logo
1 of 37
Download to read offline
k8s(GKE)をプロダクトに
投入するまでの話
市ヶ谷Geek★Night 2017.12.20
株式会社オプト 柴田幸輝
Agenda
- 自己紹介&前置き
- k8sに惹かれた理由
- 小規模システムにk8sを導入する
- まとめ
(本資料では、Kubernetesの表記をk8sで統一します。)
自己紹介&前置き
- 名前: 柴田 幸輝
- 所属: 株式会社オプト
- 役割: 雑務(Spark / React / GAE(Go) / k8s / マネージャー 他)
- 技術メモ:https://qiita.com/uryyyyyyy
自己紹介
- DevOpsやりたいエンジニア募集!
- 公式サイト: https://www.opt.ne.jp/opttechnologies/
- 技術マガジン: http://tech-magazine.opt.ne.jp/
Opt Technologiesについて
k8sをプロダクトで使っている方 (゚∀゚)ノ
最初に質問
この発表は、
「k8sに興味あるけど導入したことがない方」
向けに
「小規模プロダクトに導入した時のTips」
を伝えることを目指します。
既に運用している方は、
もっといいやり方があればぜひ教えてください
前置き
話さないこと
- k8sについての基礎
- 運用のベストプラクティス(僕が知りたい)
- 中規模以上のプロダクトでの運用ノウハウ
- GCP以外での構成
前置き
k8sに惹かれた理由
以下を実現するのに有用なツールだと思ったからです
- Infrastructure as Code(IaC)
- マイクロサービスアーキテクチャ
k8sに惹かれた理由
- k8sへは「こういう構成にして」という指示だけ出す
- 現在との差分を気にしないので設定がシンプル
- クラッシュなどで構成がズレても勝手に修復する
- コンテナを作って壊すだけなのでImmutableに出来る
- 「スノーフレークサーバー」になりにくい
Infrastructure as Code(IaC)
- コンテナ化による実行環境まで含んだプロセス
- 同じ物理サーバでJava8とJava9が共存するのも容易
- 開発時でも本番時とほぼ同等の環境を再現出来る
- 仮想化のオーバーヘッドが少ない
- サービスを小分けにしても問題ない
- 必要なサービスだけスケールされることが出来る
マイクロサービスアーキテクチャ
いざプロダクトに導入するには考慮することが多い。。
慣れるために、
まずは小規模システムで導入してみましょう。
とはいえ...
セキュリティ アクセス制御
ステージングと本番の差異安全なデプロイ
オートスケール
メトリクス・監視
ネットワーク・SSL DB接続先など環境固有の情報
小規模システムに
k8sを導入する
- とある社内向けサービス
- GCP上で運用している
- アプリサーバー(Play Framework)
- DBサーバー1台(Cloud SQL)
- GCSとのやり取りがある
- (フロントはWebでSPAだけど今回は無視)
対象とするシステム
対象とするシステム
LB GCE
DB
GCS
SSL
1. サンプルアプリを通じて設計・動作確認をする
2. イメージを作成してローカルでの動作確認をする
3. 設定をテンプレート化して本番で動かす
k8s化のステップ
1. サンプルアプリを通じて
設計・動作確認をする
Kubernetes in Actionがわかりやすかったです。
(MEAPで読んでましたが、最終版がリリースされたようですね)
これ一冊でだいたいは作れる気に
なるのでオススメ
k8sをちゃんと学ぶ
構成を考えてみる
Ingress
SSL
Node
Node
Service
Pod
Pod
Web App
SQL proxy
Web App
SQL proxy
Config Map
Secret
Config Map
Secret
Ingressを使うことでGKEが、SSL証明書を使って、GCPで管理しているIP
を使って、LBを用意してくれる
SSL / 外部IPの管理
公式でProxyのDocker Imageが提供されているので
それをpodに載せる
https://cloud.google.com/sql/docs/mysql/connect-docker
Cloud SQLへの接続
↑ここで接続先を切り替える
DB接続先やパスワードなどは環境ごとに異なります。
こういう情報はDocker Imageに含めず、
後から差し込む必要があります。
- 実行時引数で渡す
- 簡単で良いが、数が多いと見にくい
- Containerのenvに列挙する
- https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/
- 同じKeyのenvを何度も記載するのが大変
- Config Mapに含めて配布する
環境固有の情報の管理
- Config Mapに含めて配布する
- ○ 環境変数が一箇所にまとまる
- ✕ pod起動時にconfigMapが読まれるので、同じpodでも立ち上がるタイミング
によっては設定が変わりうる。
環境固有の情報の管理
Cloud SQLへのアクセス権限などは、それ用のCredentialを作りsecretに
含めて配布します。
(secretの作成は、後述のHelmでtemplateから作れます)
Credentialの管理
ログは、GKEが自動で取ってくれます。
メトリクスは、CPUやメモリの類は取ってくれます。
(playアプリのメトリクスを取るために kamon-stackdriverを作ったりしました。ぜひ。)
ログ・メトリクス収集
2. イメージを作成して
ローカルでの動作確認をする
- Docker Imageを作ったら、minikube上で走らせる
- minikubeでローカルのdocker imageを使う
- Ingressは用意出来ないので、Service(Node Port)経由でアクセスす
るか、podにport forwardingする
- Forward a local port to a port on the pod
- ローカルではCloud SQL proxyではなく実DBを用意する
ローカルでの動作確認
ローカルでの動作確認
dockerd
imageimage
DB process
Pod
Web App
Service
ローカル
3. 設定をテンプレート化して
本番で動かす
設定のテンプレート化
k8sの各種設定(pod, service, configMap)は、
ローカル・ステージング・本番で異なることがあります
→ Helm (package manager for k8s) を使うことで、
環境の差異を考慮したテンプレートを作れます
設定のテンプレート化(Pod)
設定のテンプレート化(Secret)
まとめ
インフラ全体像
k8s全体像
Ingress
SSL
Node
Node
Service
Pod
Pod
Web App
SQL proxy
Web App
SQL proxy
Config Map
Secret
Config Map
Secret
まとめ
- 小さい規模で徐々に試していけそう
- 中規模の場合、サブシステムだけ分離するなど
- 一度k8sに載れば、MicroService化していけそう
- IaCを大方実践できるようになった
- k8sを使うことで、設定通りの環境が維持出来る
- ローカルでも本番で同じpodを再現できる
- DeployもHelmコマンド一つでいける

More Related Content

What's hot

Jazug3周年lt deployブランチを追加してみましょう
Jazug3周年lt deployブランチを追加してみましょうJazug3周年lt deployブランチを追加してみましょう
Jazug3周年lt deployブランチを追加してみましょうTadahiro Ishisaka
 
Chainerを使ってプロダクション環境上で推論するには
Chainerを使ってプロダクション環境上で推論するにはChainerを使ってプロダクション環境上で推論するには
Chainerを使ってプロダクション環境上で推論するにはKeisuke Umezawa
 
監視とは何か ~監視エンジニアのスキルと成長~
監視とは何か ~監視エンジニアのスキルと成長~監視とは何か ~監視エンジニアのスキルと成長~
監視とは何か ~監視エンジニアのスキルと成長~真乙 九龍
 
OpenStack Summit in Hong Kong 参加報告
OpenStack Summit in Hong Kong 参加報告OpenStack Summit in Hong Kong 参加報告
OpenStack Summit in Hong Kong 参加報告Akira Yoshiyama
 
ALGYAN git and GitHub online conversation
ALGYAN git and GitHub online conversationALGYAN git and GitHub online conversation
ALGYAN git and GitHub online conversationAtomu Hidaka
 
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話Terui Masashi
 

What's hot (11)

Osc tokyo 2014_0228
Osc tokyo 2014_0228Osc tokyo 2014_0228
Osc tokyo 2014_0228
 
Jazug3周年lt deployブランチを追加してみましょう
Jazug3周年lt deployブランチを追加してみましょうJazug3周年lt deployブランチを追加してみましょう
Jazug3周年lt deployブランチを追加してみましょう
 
Chainerを使ってプロダクション環境上で推論するには
Chainerを使ってプロダクション環境上で推論するにはChainerを使ってプロダクション環境上で推論するには
Chainerを使ってプロダクション環境上で推論するには
 
Argo CD Deep Dive
Argo CD Deep DiveArgo CD Deep Dive
Argo CD Deep Dive
 
監視とは何か ~監視エンジニアのスキルと成長~
監視とは何か ~監視エンジニアのスキルと成長~監視とは何か ~監視エンジニアのスキルと成長~
監視とは何か ~監視エンジニアのスキルと成長~
 
OpenStack Summit in Hong Kong 参加報告
OpenStack Summit in Hong Kong 参加報告OpenStack Summit in Hong Kong 参加報告
OpenStack Summit in Hong Kong 参加報告
 
ALGYAN git and GitHub online conversation
ALGYAN git and GitHub online conversationALGYAN git and GitHub online conversation
ALGYAN git and GitHub online conversation
 
Scalaでもgae
ScalaでもgaeScalaでもgae
Scalaでもgae
 
OpenStack Octavia入門
OpenStack Octavia入門OpenStack Octavia入門
OpenStack Octavia入門
 
Bitbucket Pipelinesについて
Bitbucket PipelinesについてBitbucket Pipelinesについて
Bitbucket Pipelinesについて
 
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
 

Similar to K8s(gke)をプロダクトに投入するまでの話

PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側masahito12
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側Yusuke Naka
 
openstack_neutron-dvr_os5thaniv_20150713
openstack_neutron-dvr_os5thaniv_20150713openstack_neutron-dvr_os5thaniv_20150713
openstack_neutron-dvr_os5thaniv_20150713Takehiro Kudou
 
#CNDT2020 Cloud Foundry on K8sでクラ ウドネイティブ始めませんか?
#CNDT2020 Cloud Foundry on K8sでクラ ウドネイティブ始めませんか?#CNDT2020 Cloud Foundry on K8sでクラ ウドネイティブ始めませんか?
#CNDT2020 Cloud Foundry on K8sでクラ ウドネイティブ始めませんか?Hisazumi Arimoto
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能Yoshifumi Kawai
 
小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016lestrrat
 
st2-docker ことはじめ
st2-docker ことはじめst2-docker ことはじめ
st2-docker ことはじめShu Sugimoto
 
Mackerel x Twilio ~レコチョクの場合~
Mackerel x Twilio ~レコチョクの場合~Mackerel x Twilio ~レコチョクの場合~
Mackerel x Twilio ~レコチョクの場合~recotech
 
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Kubernetes、Flannel、CNIでWindows Container ClusterオーケストレーションKubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Kubernetes、Flannel、CNIでWindows Container ClusterオーケストレーションTakashi Kanai
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~Hideki Takase
 
TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理Yuki Yamashita
 
GitHub Actions で CI/CD
GitHub Actions で CI/CDGitHub Actions で CI/CD
GitHub Actions で CI/CDIssei Hiraoka
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
『フルスタックエンジニアを目指す』ためのOpenStack勉強術 - OpenStack最新情報セミナー 2014年2月
『フルスタックエンジニアを目指す』ためのOpenStack勉強術 - OpenStack最新情報セミナー 2014年2月『フルスタックエンジニアを目指す』ためのOpenStack勉強術 - OpenStack最新情報セミナー 2014年2月
『フルスタックエンジニアを目指す』ためのOpenStack勉強術 - OpenStack最新情報セミナー 2014年2月Nobuyuki Tamaoki
 
Metahub for github
Metahub for githubMetahub for github
Metahub for githubSuguru Oho
 
5月中旬の仮想通貨Re-orgについて
5月中旬の仮想通貨Re-orgについて5月中旬の仮想通貨Re-orgについて
5月中旬の仮想通貨Re-orgについてMasanori Kusunoki
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

Similar to K8s(gke)をプロダクトに投入するまでの話 (20)

PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側
 
2018 07-19dist
2018 07-19dist2018 07-19dist
2018 07-19dist
 
openstack_neutron-dvr_os5thaniv_20150713
openstack_neutron-dvr_os5thaniv_20150713openstack_neutron-dvr_os5thaniv_20150713
openstack_neutron-dvr_os5thaniv_20150713
 
#CNDT2020 Cloud Foundry on K8sでクラ ウドネイティブ始めませんか?
#CNDT2020 Cloud Foundry on K8sでクラ ウドネイティブ始めませんか?#CNDT2020 Cloud Foundry on K8sでクラ ウドネイティブ始めませんか?
#CNDT2020 Cloud Foundry on K8sでクラ ウドネイティブ始めませんか?
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
 
小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016
 
Kubernetes Cluster Adminやってました #con_rider
Kubernetes Cluster Adminやってました #con_riderKubernetes Cluster Adminやってました #con_rider
Kubernetes Cluster Adminやってました #con_rider
 
st2-docker ことはじめ
st2-docker ことはじめst2-docker ことはじめ
st2-docker ことはじめ
 
Mackerel x Twilio ~レコチョクの場合~
Mackerel x Twilio ~レコチョクの場合~Mackerel x Twilio ~レコチョクの場合~
Mackerel x Twilio ~レコチョクの場合~
 
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Kubernetes、Flannel、CNIでWindows Container ClusterオーケストレーションKubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
 
TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理
 
GitHub Actions で CI/CD
GitHub Actions で CI/CDGitHub Actions で CI/CD
GitHub Actions で CI/CD
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
『フルスタックエンジニアを目指す』ためのOpenStack勉強術 - OpenStack最新情報セミナー 2014年2月
『フルスタックエンジニアを目指す』ためのOpenStack勉強術 - OpenStack最新情報セミナー 2014年2月『フルスタックエンジニアを目指す』ためのOpenStack勉強術 - OpenStack最新情報セミナー 2014年2月
『フルスタックエンジニアを目指す』ためのOpenStack勉強術 - OpenStack最新情報セミナー 2014年2月
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
Katib
KatibKatib
Katib
 
5月中旬の仮想通貨Re-orgについて
5月中旬の仮想通貨Re-orgについて5月中旬の仮想通貨Re-orgについて
5月中旬の仮想通貨Re-orgについて
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

K8s(gke)をプロダクトに投入するまでの話