View
248
Download
0
Category
Preview:
Citation preview
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 カ国
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
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
○ 常に最新のコードのプロファイルを可視化、比較
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 でネームスペースの切り替えも可能
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 通知
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 など
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 など
Recommended