Slide 1

Slide 1 text

GKE@AbemaTV Ryosuke Suto 2016/10/15 AbemaTV Developer Conference 2016

Slide 2

Slide 2 text

@strsk ● 須藤涼介(Ryosuke SUTO) ● (株)サイバーエージェント ● 技術本部 ● サービスリライアビリティグループ

Slide 3

Slide 3 text

Agenda ● GKE is... ● 選んだ理由 ● 設計の話 ● 運用、あれこれ

Slide 4

Slide 4 text

GKE is...

Slide 5

Slide 5 text

GKEとは ● Google Container Engine ● Kubernetesのフルマネージドサービス ● 略すとGCEとかぶるため、KubernetesのK をとってGKE

Slide 6

Slide 6 text

Kubernetes くーばねいてぃす

Slide 7

Slide 7 text

Kubernetes(k8s)とは ● Dockerのオーケストレーションツール ● コンテナのグルーピングやネットワーク、 監視などをマニフェストファイル(YAML)で 管理する

Slide 8

Slide 8 text

Node1 Minion1 RC1 Pod1-1 Pod1-2 Pod2-1 Pod2-2 Service1 Service2 Kubernetesの構成 ● Master:クラスタを管理 ○ GKEでは表示されない ● Minion:コンテナが起動するノード ● Pod:コンテナのグループ ● Replication Controller:起動するPod数や 環境変数を管理(Deployments) ● Service:Pod郡のエンドポイント

Slide 9

Slide 9 text

GKE@AbemaTV

Slide 10

Slide 10 text

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 ここの話

Slide 11

Slide 11 text

アーキテクチャ ● GKE ● GCE ● GCS ● Stackdriver ● BigQuery ● Cloud Pub/Sub ● Redis, MongoDB ● Varnish, Nginx

Slide 12

Slide 12 text

選んだ理由 ワ  ケ

Slide 13

Slide 13 text

GKE(k8s)を選んだ理由 ● GKEがGAに(2015年8月) ● k8sのフルマネージドサービス ● 活発な開発、アップデート ● microservicesとの親和性

Slide 14

Slide 14 text

設計の話

Slide 15

Slide 15 text

SPEC ● n1-highcpu-16 × 50node ○ 16 vCPUs, 14.4 GB memory ● 33 Services ● 216 Pods

Slide 16

Slide 16 text

SPEC ● default requests & limits ○ cpu: 4000m ○ memory: 3Gi

Slide 17

Slide 17 text

RequestsとLimits ● Requests ○ Pod起動時に必要なリソース ● Limits ○ Podのリソース制限

Slide 18

Slide 18 text

RequestsとLimits ● RequestsとLimitsに開きがあると高負荷 時にMinionのリソースが枯渇する ● Podスケール時にスケジュールしていた Limitsを超える可能性がある

Slide 19

Slide 19 text

RequestsとLimits ● kubectl describe node [node]でリソース 全体の何%まで割り当てられているか確 認できる

Slide 20

Slide 20 text

1(cluster)×N(services) ● 追加機能でインフラの準備不要◯ ● 運用コストの低減◯ ● 各service同士はlocalhostで接続◯

Slide 21

Slide 21 text

1(cluster)×N(services) ● リソース消費の見極めが複雑化△ ● レプリカ数が少ないPodは、タイミングに よって同じノードに起動してしまうことが ある△

Slide 22

Slide 22 text

Docker Image ● 基本はAlpine Linux ○ Docker向きの超軽量OS ● デプロイの頻度が少ない、提供されていないパッ ケージがある場合はUbuntu

Slide 23

Slide 23 text

リリースフロー

Slide 24

Slide 24 text

Container Registry Container Cluster docker push deploy docker push push test Docker Hub

Slide 25

Slide 25 text

kubectl ● リソースの作成 kubectl create -f xxx.yml ● 設定内容の更新 kubectl apply -f xxx.yml

Slide 26

Slide 26 text

kubectl ● Rolling-Update kubectl rolling-update xxx -f xxx.yml ● Podのスケールアウト kubectl scale rc xxx --replicas=10

Slide 27

Slide 27 text

kubectl rolling-updateの課題 ● v1.2.0以降、同じタグ指定で Rolling-Updateができない ● 途中で失敗するとSelectorが中途半端 な状態で残ってしまう

Slide 28

Slide 28 text

kubetool

Slide 29

Slide 29 text

kubetool https://github.com/abema/kubetool ● kubectlをラップした補助ツール ● 一覧表示の改善 ● カナリアリリース

Slide 30

Slide 30 text

kubetool ● Podの一覧 kubetool pods ● ReplicationControllerの一覧 kubetool rc

Slide 31

Slide 31 text

kubetool ● Podの再作成 kubetool reload [rc] ● RCのイメージ更新 kubetool update [rc] [version]

Slide 32

Slide 32 text

kubetool ● Podを1台だけ再作成 kubetool reload [rc] --1 ● 残りのPodも最新にする kubetool fix-version [rc]

Slide 33

Slide 33 text

監視

Slide 34

Slide 34 text

Stackdriver Monitoring/Logging ● 標準で取れるのはリソース状況のみ ● Podの標準出力はLoggingへ ● 強力なフィルター機能 ● ログベースメトリクスの作成が可能

Slide 35

Slide 35 text

kube-ui ● 各コンポーネントの情報一覧 ● Podの消費リソース ● スケール ● YAMLファイルの編集

Slide 36

Slide 36 text

運用、あれこれ

Slide 37

Slide 37 text

Terraformとの別離 ● TerraformでInstance Templateを編集するとインスタ ンスが全台再作成される ● 無停止でスケールアップ/ダウンする場合はテンプ レートを手動で付け替える必要がある ● コード化…

Slide 38

Slide 38 text

ServiceのIPに接続できない ● HTTP Load Balancerからは繋がる ● LAN内のインスタンスやPodから接続で きない ● v1.2.0でのバグ

Slide 39

Slide 39 text

Nodeアップグレード時に断発生 ● 1台ずつアップグレードされるが、Podが 先に落ちないため数秒団が発生 ● Node Pool機能で段階的にアップグレー ドする方法が良い

Slide 40

Slide 40 text

まとめ

Slide 41

Slide 41 text

GKEをつかってみた感想 ● Docker導入の敷居が低くなる ● デプロイ簡単 ● リソース調整にはコツがいる ● DevOpsが捗る

Slide 42

Slide 42 text

May the Docker be with you.