Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GKE@AbemaTV
Search
Ryosuke Suto
October 15, 2016
Technology
12
9.4k
GKE@AbemaTV
AbemaTV Developer Conference 2016
Ryosuke Suto
October 15, 2016
Tweet
Share
More Decks by Ryosuke Suto
See All by Ryosuke Suto
横断的なSRE推進と成熟度評価
strsk8
9
8.2k
GKEを利用したサービスの運用
strsk8
1
640
パブリック/プライベートクラウドでつかうKubernetes
strsk8
1
2.4k
re:Invent2015参加レポ
strsk8
0
310
成長し続けるインフラの安定運用事情
strsk8
19
5.2k
ソーシャルゲームDBの危機回避
strsk8
10
14k
Other Decks in Technology
See All in Technology
非同期処理実行基盤 Delayed脱出 → Solid Queue完全移行への旅路。
srockstyle
3
1.3k
Why React!?? Next.jsそしてReactを改めてイチから選ぶ
ypresto
9
3.6k
AIが書いたコードをAIが検証する!自律的なモバイルアプリ開発の実現
henteko
1
230
Go Conference 2025: GoのinterfaceとGenericsの内部構造と進化 / Go type system internals
ryokotmng
3
530
今日から始めるpprof / Pprof workshop for beginners
ymotongpoo
6
780
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
20k
“2件同時配達”の開発舞台裏 〜出前館PMが挑んだダブルピック実現に向けた体験設計〜
demaecan
0
160
BtoBプロダクト開発の深層
16bitidol
0
130
BirdCLEF+2025 Noir 5位解法紹介
myso
0
150
今改めてServiceクラスについて考える 〜あるRails開発者の10年〜
joker1007
20
9k
Goのビルドシステムの変遷 / The history of Go's build system
ymotongpoo
12
3.4k
履歴 on Rails: Bitemporal Data Modelで実現する履歴管理/history-on-rails-with-bitemporal-data-model
hypermkt
0
1.7k
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
54
11k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
Facilitating Awesome Meetings
lara
56
6.6k
How STYLIGHT went responsive
nonsquared
100
5.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
How to Ace a Technical Interview
jacobian
280
23k
Faster Mobile Websites
deanohume
310
31k
Designing for humans not robots
tammielis
254
25k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Scaling GitHub
holman
463
140k
Writing Fast Ruby
sferik
629
62k
Transcript
GKE@AbemaTV Ryosuke Suto 2016/10/15 AbemaTV Developer Conference 2016
@strsk • 須藤涼介(Ryosuke SUTO) • (株)サイバーエージェント • 技術本部 • サービスリライアビリティグループ
Agenda • GKE is... • 選んだ理由 • 設計の話 • 運用、あれこれ
GKE is...
GKEとは • Google Container Engine • Kubernetesのフルマネージドサービス • 略すとGCEとかぶるため、KubernetesのK をとってGKE
Kubernetes くーばねいてぃす
Kubernetes(k8s)とは • Dockerのオーケストレーションツール • コンテナのグルーピングやネットワーク、 監視などをマニフェストファイル(YAML)で 管理する
Node1 Minion1 RC1 Pod1-1 Pod1-2 Pod2-1 Pod2-2 Service1 Service2 Kubernetesの構成
• Master:クラスタを管理 ◦ GKEでは表示されない • Minion:コンテナが起動するノード • Pod:コンテナのグループ • Replication Controller:起動するPod数や 環境変数を管理(Deployments) • Service:Pod郡のエンドポイント
GKE@AbemaTV
iOS GCP Load Balancing Cloud DNS Cloud Storage Compute Engine
Redis Compute Engine MongoDB Stackdriver Monitoring Pub/Sub BigQuery Stackdriver Logging 画像基盤 広告基盤 Client Backend Monitor CDN API/web Container Engine(GKE) Gateway Media Proxy コメント ユーザー 課金 web etc Logging Compute Engine transcoder 社内基盤 ログ基盤 スタジオ/ロケ地 Studio transcoder ここの話
アーキテクチャ • GKE • GCE • GCS • Stackdriver •
BigQuery • Cloud Pub/Sub • Redis, MongoDB • Varnish, Nginx
選んだ理由 ワ ケ
GKE(k8s)を選んだ理由 • GKEがGAに(2015年8月) • k8sのフルマネージドサービス • 活発な開発、アップデート • microservicesとの親和性
設計の話
SPEC • n1-highcpu-16 × 50node ◦ 16 vCPUs, 14.4 GB
memory • 33 Services • 216 Pods
SPEC • default requests & limits ◦ cpu: 4000m ◦
memory: 3Gi
RequestsとLimits • Requests ◦ Pod起動時に必要なリソース • Limits ◦ Podのリソース制限
RequestsとLimits • RequestsとLimitsに開きがあると高負荷 時にMinionのリソースが枯渇する • Podスケール時にスケジュールしていた Limitsを超える可能性がある
RequestsとLimits • kubectl describe node [node]でリソース 全体の何%まで割り当てられているか確 認できる
1(cluster)×N(services) • 追加機能でインフラの準備不要◯ • 運用コストの低減◯ • 各service同士はlocalhostで接続◯
1(cluster)×N(services) • リソース消費の見極めが複雑化△ • レプリカ数が少ないPodは、タイミングに よって同じノードに起動してしまうことが ある△
Docker Image • 基本はAlpine Linux ◦ Docker向きの超軽量OS • デプロイの頻度が少ない、提供されていないパッ ケージがある場合はUbuntu
リリースフロー
Container Registry Container Cluster docker push deploy docker push push
test Docker Hub
kubectl • リソースの作成 kubectl create -f xxx.yml • 設定内容の更新 kubectl
apply -f xxx.yml
kubectl • Rolling-Update kubectl rolling-update xxx -f xxx.yml • Podのスケールアウト
kubectl scale rc xxx --replicas=10
kubectl rolling-updateの課題 • v1.2.0以降、同じタグ指定で Rolling-Updateができない • 途中で失敗するとSelectorが中途半端 な状態で残ってしまう
kubetool
kubetool https://github.com/abema/kubetool • kubectlをラップした補助ツール • 一覧表示の改善 • カナリアリリース
kubetool • Podの一覧 kubetool pods • ReplicationControllerの一覧 kubetool rc
kubetool • Podの再作成 kubetool reload [rc] • RCのイメージ更新 kubetool update
[rc] [version]
kubetool • Podを1台だけ再作成 kubetool reload [rc] --1 • 残りのPodも最新にする kubetool
fix-version [rc]
監視
Stackdriver Monitoring/Logging • 標準で取れるのはリソース状況のみ • Podの標準出力はLoggingへ • 強力なフィルター機能 • ログベースメトリクスの作成が可能
kube-ui • 各コンポーネントの情報一覧 • Podの消費リソース • スケール • YAMLファイルの編集
運用、あれこれ
Terraformとの別離 • TerraformでInstance Templateを編集するとインスタ ンスが全台再作成される • 無停止でスケールアップ/ダウンする場合はテンプ レートを手動で付け替える必要がある • コード化…
ServiceのIPに接続できない • HTTP Load Balancerからは繋がる • LAN内のインスタンスやPodから接続で きない • v1.2.0でのバグ
Nodeアップグレード時に断発生 • 1台ずつアップグレードされるが、Podが 先に落ちないため数秒団が発生 • Node Pool機能で段階的にアップグレー ドする方法が良い
まとめ
GKEをつかってみた感想 • Docker導入の敷居が低くなる • デプロイ簡単 • リソース調整にはコツがいる • DevOpsが捗る
May the Docker be with you.