Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ZOZOTOWNリプレイスにおけるKubernetes活用 / zozotown replac...

tsurumi
December 04, 2018

ZOZOTOWNリプレイスにおけるKubernetes活用 / zozotown replace kubernetes

ZOZOTOWNシステムリプレイスでのKubernetes利用についてご説明します。

tsurumi

December 04, 2018
Tweet

More Decks by tsurumi

Other Decks in Programming

Transcript

  1. Copyright © ZOZO Technologies, Inc. All Right Reserved. 株式会社ZOZOテクノロジーズ 開発部

    ZOZOリプレイスチーム リーダー 鶴見 純一 ZOZOTOWN システムリプレイス における Kubernetes 活用
  2. アジェンダ  はじめに  ZOZOTOWN システムリプレイス  Kubernetes 利用 

    デプロイ手法  監視  まとめ Copyright © ZOZO Technologies, Inc. All Right Reserved.
  3. ◦ 日本最大級のファッションコーディネートアプリ ◦ 1,200万ダウンロード突破、コーディネート投稿総数は800万件以 上(ともに2018年9月末時点) ◦ 全世界(App Store / Google

    playが利用可能な全ての国)でダ ウンロードが可能 ◦ 10万人以上のフォロワーを持つユーザー(WEARISTA)も誕生 https://wear.jp/
  4. システム構成(リプレイス後) Copyright © ZOZO Technologies, Inc. All Right Reserved. Web

    / Application Server Database Server User オンプレミス API Database Server クラウド 専用線
  5. システム構成(リプレイス後) Copyright © ZOZO Technologies, Inc. All Right Reserved. Web

    / Application Server Database Server User オンプレミス Database Server クラウド 専用線 API Kubernetes 利用
  6. Kubernetes 導入前の課題 ・デプロイが手作業のため、人的ミスが起こりやすく、 時間が掛かっている。安全に素早くデプロイを行いたい。 ⇒ Rolling Update で解決可能 ・柔軟にスケールさせたい。 ⇒

    水平Podオートスケーリングで解決可能 ・運用負荷を減らしたい。 ⇒ セルフヒーリング、Rolling Update で解決可能 Copyright © ZOZO Technologies, Inc. All Right Reserved.
  7. Kubernetes 選定 コ ン テ ナ オ ー ケ ス

    ト レ ー シ ョ ン ツ ー ル が 多 々 あ る 中 、 Kubernetesを選んだ理由。 ・Kubernetes がコンテナオーケストレーションの デファクトスタンダードとなっている。 ・大手パブリッククラウドでマネージドサービスを提供している。 Copyright © ZOZO Technologies, Inc. All Right Reserved.
  8. Kubernetes マネージドサービス ・Azure ⇒ ACS / AKS / ACS Engine(OSS)

    ・GCP ⇒ Google Kubernetes Engine ・AWS ⇒ Amazon EKS Copyright © ZOZO Technologies, Inc. All Right Reserved.
  9. Kubernetes マネージドサービス ・Azure ⇒ ACS / AKS / ACS Engine(OSS)

    ・GCP ⇒ Google Kubernetes Engine ・AWS ⇒ Amazon EKS Copyright © ZOZO Technologies, Inc. All Right Reserved. Azure を選定 ・ZOZOオンプレミス環境と親和性が高い。 オンプレミスに近い環境に移行することで 移行コストや移行難易度を下げるのが狙い。
  10. Azure マネージドサービス ・Azure Container Service(ACS) ⇒ Kubernetes、DC/OS、または Docker Swarmを サポートするマネージドサービス。

    ・Azure Kubernetes Service(AKS) ⇒ Kubernetes に特化したマネージドサービス。 ・ACS Engine ⇒ ACS / AKS と同等の環境を構築できるOSS。 最新機能が優先的に導入される。 Copyright © ZOZO Technologies, Inc. All Right Reserved.
  11. Azure マネージドサービス ・Azure Container Service(ACS) ⇒ Kubernetes、DC/OS、または Docker Swarmを サポートするマネージドサービス。

    ・Azure Kubernetes Service(AKS) ⇒ Kubernetes に特化したマネージドサービス。 ・ACS Engine ⇒ ACS / AKS と同等の環境を構築できるOSS。 最新機能が優先的に導入される。 Copyright © ZOZO Technologies, Inc. All Right Reserved. ACS Engine 利用 ・当初(2017年末)ACS、AKSを利用しようと 考えたが、VNETが使えないことがあり、 ACS Engineを選択。
  12. Azure マネージドサービス ・Azure Container Service(ACS) ⇒ Kubernetes、DC/OS、または Docker Swarmを サポートするマネージドサービス

    ・Azure Kubernetes Service(AKS) ⇒ Kubernetes に特化したマネージドサービス。 ・ACS Engine ⇒ ACS / AKS と同等の環境を構築できるOSS。 最新機能が優先的に導入される。 Copyright © ZOZO Technologies, Inc. All Right Reserved. はじめて使う場合は、AKSがお勧め。 ・公式ドキュメントに使い方が載っている ・MSサポートへ問い合わせができる
  13. システム構成(リプレイス後) Copyright © ZOZO Technologies, Inc. All Right Reserved. Web

    / Application Server Database Server User オンプレミス Database Server クラウド 専用線 API Kubernetes 利用
  14. Kubernetes 設定 Copyright © ZOZO Technologies, Inc. All Right Reserved.

    API Database Server クラウド 線 Kubernetes(ACS Engine) Namespace: a Namespace: b Pod Pod Pod Pod Pod Pod
  15. Kubernetes 設定 Copyright © ZOZO Technologies, Inc. All Right Reserved.

    Kubernetes(ACS Engine) Namespace: a Namespace: b Pod Pod Pod Pod Pod Pod Pod ⇒ 1個、または2個以上のコンテナの集まり 複数Pod ⇒ 違うPodを複数設置することが可能 ⇒ ReplicaSetという仕組みで、Podの複製を 作成し、冗長化することが可能
  16. Kubernetes 設定 Copyright © ZOZO Technologies, Inc. All Right Reserved.

    Kubernetes(ACS Engine) Namespace: a Namespace: b Pod Pod Pod Pod Pod Pod Namespace ⇒ 仮想的なクラスタとして扱うことができる (任意の単位でPodをグループ化できる)
  17. Kubernetes について ・Namespace ・セルフヒーリング ・水平Podオートスケーリング ・Azure 仮想マシンスケールセット Copyright © ZOZO

    Technologies, Inc. All Right Reserved. 安全にデプロイを行うために利用 システムを安定稼働 させるために利用 (スケール・運用負荷低減)
  18. Namespace 利用 Copyright © ZOZO Technologies, Inc. All Right Reserved.

    Kubernetes Namespace : Staging Ver2.0 Pod Pod Pod Namespace : Production Ver1.0 Pod Pod Pod ・Namespace を利用し、Staging 環境、Production 環境と分けた場合、 Staging 環境だけにデプロイすることができる。 ・分離性を高めるためには、Network Policy や RBAC(Role Based Access Control)と呼ばれるロールを設定する。
  19. セルフヒーリング Copyright © ZOZO Technologies, Inc. All Right Reserved. Kubernetes

    Node Pod Pod ・ Replicas を設定し、Pod複製を作成する。 起動している Pod 数が Replicas に設定した数を下回った 場合、自動復旧する。 User Access 高負荷 設定値 Replicas:2 ※Kuberntes Node = Azure 仮想マシン
  20. Kubernetes Node セルフヒーリング Copyright © ZOZO Technologies, Inc. All Right

    Reserved. Pod Pod ・ Replicas を設定し、Pod複製を作成する。 起動している Pod 数が Replicas に設定した数を下回った 場合、自動復旧する。 User Access Pod セルフヒーリング
  21. 水平podオートスケーリング Copyright © ZOZO Technologies, Inc. All Right Reserved. Kubernetes

    Node Pod Pod ・minReplicas / maxReplicas に最小Pod数、最大Pod数を 設定することで、Podを自動スケールさせることが可能。 User Access 高負荷 設定値 minReplicas:2 maxReplicas:3
  22. 水平podオートスケーリング Copyright © ZOZO Technologies, Inc. All Right Reserved. Kubernetes

    Node Pod Pod ・minReplicas / maxReplicas に最小Pod数、最大Pod数を 設定することで、Podを自動スケールさせることが可能。 User Access Pod スケールアウト
  23. Azure 仮想マシンスケールセット Copyright © ZOZO Technologies, Inc. All Right Reserved.

    Kubernetes Node Kubernetes Node Pod Pod Pod Pod ・Kubernetes Node(仮想マシン)を自動スケールさせることが可能。 Access User 高負荷
  24. Azure 仮想マシンスケールセット Copyright © ZOZO Technologies, Inc. All Right Reserved.

    Kubernetes Node Kubernetes Node Pod Pod Pod Pod ・Kubernetes Node(仮想マシン)を自動スケールさせることが可能。 Access User Kubernetes Node Pod Pod スケール アウト
  25. Kubernetes クラスタを分散 Copyright © ZOZO Technologies, Inc. All Right Reserved.

    ・システムを安定稼働させるために、複数リージョンで 冗長化させる。
  26. Kubernetes クラスタを分散 Copyright © ZOZO Technologies, Inc. All Right Reserved.

    西 日 本 Kubernetes 東 日 本 ・クラスタ分散させることでSPOF(単一障害点)を回避できる。 Kubernetes Namespace Pod Pod Pod Namespace Pod Pod Pod Kubernetes Namespace Pod Pod Pod Namespace Pod Pod Pod Kubernetes Namespace Pod Pod Pod Namespace Pod Pod Pod Namespace Pod Pod Pod Namespace Pod Pod Pod
  27. Canaryリリース Copyright © ZOZO Technologies, Inc. All Right Reserved. Kubernetes

    Namespace : a version : 2 Namespace : b version : 1 Pod Pod Pod Pod Pod Pod Namespace : c version : 1 Namespace : d version : 1 Pod Pod Pod Pod Pod Pod ・一部だけにリリースし、問題のないことを確認する。
  28. Canaryリリース Copyright © ZOZO Technologies, Inc. All Right Reserved. Kubernetes

    Namespace : a version : 2 Namespace : b version : 1 Pod Pod Pod Pod Pod Pod Namespace : c version : 1 Namespace : d version : 1 Pod Pod Pod Pod Pod Pod ・一部だけにリリースし、問題のないことを確認する。 ・Namespace を利用すると管理しやすくなる。 ・問題があった際は、すぐに切り戻すことで 影響を最小限に抑えられる。
  29. Canaryリリース Copyright © ZOZO Technologies, Inc. All Right Reserved. Kubernetes

    Namespace : a version : 2 Namespace : b version : 2 Pod Pod Pod Pod Pod Pod Namespace : c version : 2 Namespace : d version : 2 Pod Pod Pod Pod Pod Pod ・全台にリリースを行う。
  30. Rolling Update ・稼働したまま安全にPodの入れ替えが行える。 Copyright © ZOZO Technologies, Inc. All Right

    Reserved. Kubernetes Node Pod Kubernetes Node Pod Pod Kubernetes Node Pod Pod 入れ替えのため新しい Pod が立ち上がる 古い Pod が削除される Rolling Update 開始
  31. その他 監視 Datadog の他にオンコールシステムのPagerDuty も利用している。 Kubernetes の情報を Datadog で取得し、 異常があれば、Slack

    にアラート通知を行う。 さらに、PagerDutyでオンコールという 仕組みにより、システム異常にすぐに気付ける。 Copyright © ZOZO Technologies, Inc. All Right Reserved.