GKE@AbemaTV

Bb7365b9e38b1dc8ccb76d555ee1ddc2?s=47 Ryosuke Suto
October 15, 2016

 GKE@AbemaTV

AbemaTV Developer Conference 2016

Bb7365b9e38b1dc8ccb76d555ee1ddc2?s=128

Ryosuke Suto

October 15, 2016
Tweet

Transcript

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

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

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

  4. GKE is...

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

  6. Kubernetes くーばねいてぃす

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

  8. Node1 Minion1 RC1 Pod1-1 Pod1-2 Pod2-1 Pod2-2 Service1 Service2 Kubernetesの構成

    • Master:クラスタを管理 ◦ GKEでは表示されない • Minion:コンテナが起動するノード • Pod:コンテナのグループ • Replication Controller:起動するPod数や 環境変数を管理(Deployments) • Service:Pod郡のエンドポイント
  9. GKE@AbemaTV

  10. 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 ここの話
  11. アーキテクチャ • GKE • GCE • GCS • Stackdriver •

    BigQuery • Cloud Pub/Sub • Redis, MongoDB • Varnish, Nginx
  12. 選んだ理由 ワ  ケ

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

  14. 設計の話

  15. SPEC • n1-highcpu-16 × 50node ◦ 16 vCPUs, 14.4 GB

    memory • 33 Services • 216 Pods
  16. SPEC • default requests & limits ◦ cpu: 4000m ◦

    memory: 3Gi
  17. RequestsとLimits • Requests ◦ Pod起動時に必要なリソース • Limits ◦ Podのリソース制限

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

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

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

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

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

  23. リリースフロー

  24. Container Registry Container Cluster docker push deploy docker push push

    test Docker Hub
  25. kubectl • リソースの作成 kubectl create -f xxx.yml • 設定内容の更新 kubectl

    apply -f xxx.yml
  26. kubectl • Rolling-Update kubectl rolling-update xxx -f xxx.yml • Podのスケールアウト

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

  28. kubetool

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

  30. kubetool • Podの一覧 kubetool pods • ReplicationControllerの一覧 kubetool rc

  31. kubetool • Podの再作成 kubetool reload [rc] • RCのイメージ更新 kubetool update

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

    fix-version [rc]
  33. 監視

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

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

  36. 運用、あれこれ

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

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

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

  40. まとめ

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

  42. May the Docker be with you.