て活用事例とgke 新機能の導入につい freakout … 自己紹介・会社紹介 freakout...

40
Confidential & Proprietary 株式会社フリークアウト 執行役員 CTO 西口 次郎 FreakOut の広告プロダクトでの GKE 活用事例とGKE 新機能の導入につい

Upload: hoangcong

Post on 28-Apr-2019

248 views

Category:

Documents


0 download

TRANSCRIPT

Confidential & Proprietary

株式会社フリークアウト 執行役員 CTO西口 次郎

FreakOut の広告プロダクトでの GKE 活用事例とGKE 新機能の導入につい

Agenda

● 自己紹介・会社紹介

● FreakOut の広告プロダクト紹介

● プロダクション環境での GKE 運用

● GKE での CI/CD● GKE の新機能を活用した Kubernetes 環境構築

● まとめ

※当発表について

※ 一部 2018/10/31 開催の Google Cloud INSIDE Digital で発表した内容が含まれています

自己紹介

● 西口 次郎

● 株式会社フリークアウト 執行役員 CTO● キャリア: SIer -> Web 系企業 -> フリーランス -> FreakOut● 2013/09 フリークアウトに参画

○ 技術担当執行役員

○ 新規事業開発

○ 組織マネージメント

○ 最近の興味・関心: コンテナ関連技術

会社紹介

● 株式会社フリークアウト

○ 創業: 2010/10● 国内初の DSP● 広告関連プロダクトの開発・販売

● グループ従業員数: 632 名 (2018 年 9 月現在)○ エンジニア約 60 名 (JP)

● 海外拠点: 19 カ国

FreakOut の広告プロダクト紹介

Red (FreakOut DSP)

● 国内初・最大級の DSP○ 350,000 Requests / sec○ 20 Billion Requests / day○ 600 Billion Requests / month

● インフラ: オンプレミスを中心に構成

○ サーバ約 700 台● Server Side: Perl● ML: C++, Scala, etc..

ASE

● 位置情報マーケティングプラットフォーム

○ 位置情報ターゲティング広告

○ オフライン顧客動向分析

● 国内最大規模の位置情報データベースを保有

● インフラ: パブリッククラウド

● Server Side: Ruby (Ruby on Rails)● Analysis: Scala (Apache Spark)

Red for Publishers

● プラットフォーム開発をフルサポート

○ アドプラットフォーム構築支援

○ 販売、オペレーション、コンサルティングまで

● 自社アドネットワーク: Poets● インフラ: GCP

○ Google Cloud Platform Japan Blog での事例紹介

● Server Side: Go, Perl● Analysis: BigQuery

Red for Publishers 事例紹介

https://cloudplatform-jp.googleblog.com/2018/09/freakout-kubernetes-engine.html

LayApp

● アプリエンゲージメントプラットフォーム

● アプリデベロッパーの収益機会の最大化支援

○ 機械学習によるエンゲージメント配信

○ ユーザーエンゲージメントリフト分析

● インフラ: GCP● Server Side: Python● Analysis: BigQuery● Machine Learning: ML Engine

プロダクション環境での

GKE 運用

Overview

GKE

Google Kubernetes Engine

● バージョンは 1.10.11 を使用 (2019/3 現在)● サービス(ワークロード)ごとにクラスタを分割

● 広告配信、UI、バッチ

● CronJob (>= k8s 1.8) を使用 ● カナリアリリース環境を用意

○ 特定の Git のブランチを少量の Pod にデプロイ

● Stackdriver を活用

○ 主に Monitoring, Logging, Profiler を利用

Stackdriver

● Monitoring○ Prometheus と併用

○ Grafana 5.3 で Stackdriver Datasource を利用中

○ Kubernetes Monitoring 導入検討中

● Logging○ コンテナのエラーログ等を集約

○ アラート: Pub/Sub -> Cloud Functions -> Slack● Profiler

○ 常に最新のコードのプロファイルを可視化、比較

Stackdriver Logging

Stackdriver Profiler

BigQuery

● すべてのアクセスログ、アプリケーションログを集約

○ daily 数十億レコード

● fluentd (Side-car container) から Streaming insert○ リアルタイム集計

■ 例: A/B テストの結果をすぐに集計

● 可視化には主に re:dash を使用

● MySQL のマスタデータもインポートしている

Vulnerability scanning (Beta)

● Google Container Registry の機能

● Debian, Ubuntu, Alpine が対象 (2019/3 現在)● 過去 30 日間に pull されたイメージが対象

● 脆弱性が見つかった際 Pub/Sub に Publish される

● Cloud Functions で Subscribe -> Slack 通知

kustomize

● Kubernetes の YAML ファイルのカスタマイズ

● 2019/2 に kubectl のサブコマンドとしてマージされた

● Production/Staging/Canary など、環境ごとの設定を上書き

するように設定している

○ replicas○ 環境変数

○ ConfigMap

Other tools

● stern○ 複数のコンテナのログを素早く確認できる

○ tail -F multiple-containers のようなイメージ

● kubectx○ クラスタ切り替え

○ 複数クラスタ / 開発環境・本番環境の切り替えに

○ kubens でネームスペースの切り替えも可能

GKE での CI/CD

CI/CD に使用しているツール

● GitHub: ソースコード管理

● CircleCI: 継続テスト

● Cloud Build: コンテナのビルド

● Cloud Container Registry: コンテナイメージの保存

● Cloud Pub/Sub: ビルド通知

● Cloud Functions: Slack への通知

● Slack: エンジニアへの通知

CI のフロー

1) GitHub へ Push2) テスト・ビルド

a) CircleCI でのテスト

b) Cloud Build でのビルド

i) master branch: 本番用のイメージ

ii) develop branch: カナリアリリース用イメージ

3) カナリアリリース

エンジニアが手動で 1 Pod 〜 数 Pod にデプロイ

CD のフロー

1. GitHub で Pull Request を Merge2. Build & Deploy (Cloud Build)

2.1. docker build (eg: go install)2.2. docker push (to Container Registry)2.3. kubectl set image (kustomize を使った apply 検討中)

3. Notification3.1. Pub/Sub への Publish (Cloud Build で自動で行われる)3.2. Cloud Functions (Subscriber) で Slack 通知

GKE の新機能を活用した

Kubernetes 環境構築

VPC-native cluster (alias IP)

● VPC-native cluster とは?

○ Scale enhancements○ Hybrid connectivity○ Better VPC integration○ Security checks○ IP address management

● Cloud Memorystore for Redis の利用が可能

● Cloud SQL Private IP に接続可能

Cloud NAT

● マネージドな NAT (利点)● アウトバウンドアクセスのゲートウェイ

● 要 Private cluster● 外部アクセスする IP アドレスを限定する用途で使用

○ 例: IP アドレスの事前登録が必須な外部 API● Region, network, subnetwork に Cloud NAT のものを指定

Network Endpoint Groups (NEGs)

● コンテナネイティブの負荷分散が可能

● Instance Group は iptables を介して Pod へルーティング

● NEGs は Pod を直接ターゲットとする

● ネットワーク パフォーマンスの改善

● 要 VPC-native cluster● Service アノテーション cloud.google.com/neg に '{"ingress":

true}' を指定する

Network Endpoint Groups (NEGs)

https://cloud.google.com/kubernetes-engine/docs/how-to/container-native-load-balancing より

BackendConfig custom resource

● GKE Ingress コントローラのカスタムリソース定義

○ Balancer Settings○ Cloud Armor○ Cloud IAP○ Cloud CDN

● Service と BackendConfig を紐づけて使用する

○ Service アノテーション beta.cloud.google.com/backend-configs

BackendConfig - Balancer Settings

● タイムアウトの設定

● 接続ドレインタイムアウトの設定

● Session affinity の設定

○ 例: Cookie ベースのアフィニティ

BackendConfig - Cloud Armor

● DDoS 攻撃からアプリケーションを保護するサービス

● IP アドレスのホワイトリスト・ブラックリストが利用可能 (2019/3 現在)

● 例: 社内ツールへのアクセス元の IP アドレスを制御

BackendConfig - Cloud IAP

● ロードバランサに認証機能を追加

● 任意の URL に Google 認証を掛けることが可能

● 例: 社内ツールへのアクセス認証

○ Grafana など

BackendConfig - Cloud CDN

● Cloud CDN の構成が可能

● 例: キャッシュポリシーの設定

Google-managed SSL certificates

● マネージド SSL 証明書 (無料)● ベータ (2019/3 現在)● 証明書の発行・管理を行ってくれる

○ 2019/3 現在、発行元は Let’s Encrypt ■ 更新は自動で行われる

● Ingress アノテーションで証明書を紐づけ

○ ingress.gcp.kubernetes.io/pre-shared-cert

まとめ

まとめ

● FreakOut では GCP を活用して広告プロダクトを開発している

● アプリケーションは GKE / Kubernetes 上で稼働している

● 運用には Stackdriver がとても便利

● CI/CD も容易に構築可能 (Cloud Build)● GKE では GCP の最新機能を容易に使用可能

○ NEGs, Cloud NAT, BackendConfig など

Thank you