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

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

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,100以上のショップ、6,900以上のブランドの取り扱い (2018年9月末時点) ◦ 常時65万点以上の商品アイテム数と毎日平均3,100点以上の新 着商品を掲載 ◦ 即日配送サービス

    / ギフトラッピングサービス / ツケ払い な ど http://zozo.jp/
  4. ◦ 日本最大級のファッションコーディネートアプリ ◦ 1,200万ダウンロード突破、コーディネート投稿総数は800万件以 上(ともに2018年9月末時点) ◦ 全世界(App Store / Google

    playが利用可能な全ての国)でダ ウンロードが可能 ◦ 10万人以上のフォロワーを持つユーザー(WEARISTA)も誕生 https://wear.jp/
  5. ◦ 当社が独自に開発した採寸用ボディースーツ ◦ 全体に施されたドットマーカーをスマートフォンカメラで360度撮 影することで、体型データを計測 ◦ 計測した体型データは、瞬時に3Dモデル化され、ZOZOTOWNア プリに保存。3Dモデルはあらゆる角度に動かすことができ、体型を 360度チェックすることが可能 http://zozo.jp/zozosuit/

    Copyright © ZOZO Technologies, Inc. All Right Reserved.
  6. ◦「ZOZOSUIT」で計測した体型データをもとに、一人ひとりの体型 に合った「あなたサイズ」のアイテム ◦「究極のフィット感」を実現したベーシックアイテムを提供 ◦ グローバルサイト「ZOZO.com」で海外展開 ◦ アイテム : Tシャツ、デニムパンツ、シャツ、ビジネススーツ、 ネクタイ、ボーダーTシャツ、長袖クルーネックTシャツ

    など http://zozo.jp/pb/ Copyright © ZOZO Technologies, Inc. All Right Reserved.
  7. はじめに ・ZOZOTOWN のシステムリプレイスを行い、 Kubernetes を採用した。 ⇒ Kubernetes を採用した経緯、利用方法を紹介。 Copyright ©

    ZOZO Technologies, Inc. All Right Reserved.
  8. ZOZOTOWN システムリプレイス Copyright © ZOZO Technologies, Inc. All Right Reserved.

  9. ZOZOTOWN システムリプレイス経緯 ・長年の運用でレガシーなシステムとなっている。 更なる成長のためモダンな設計による柔軟なリソース確保 が必要と判断し、システムリプレイスを行った。 Copyright © ZOZO Technologies, Inc.

    All Right Reserved.
  10. ZOZOTOWN システムリプレイス経緯 ・長年の運用でレガシーなシステムとなっている。 更なる成長のためモダンな設計による柔軟なリソース確保 が必要と判断し、システムリプレイスを行った。 ⇒ リプレイス完了したのはまだ全体のうちの極僅かであり、 現在も引き続きシステムリプレイスを続けている。 Copyright ©

    ZOZO Technologies, Inc. All Right Reserved.
  11. リプレイス前の問題点 ・オンプレミスのリソース確保は、 機器を購入する必要があるため数か月前から準備が必要。 ・アプリケーションがモノリシックであり、変更時の影響調査、 対応に時間が掛かる。 ・手作業の運用が多く、人手が必要。 Copyright © ZOZO Technologies,

    Inc. All Right Reserved.
  12. システムリプレイスの目的 ・柔軟で堅牢なシステムを作る! ⇒ インフラ、アプリケーション、運用を柔軟に行える システム構成や環境を整える。 Copyright © ZOZO Technologies, Inc.

    All Right Reserved.
  13. システムリプレイスにて行ったこと ・オンプレミスからパブリッククラウドへの移行。 ⇒ 柔軟なリソース確保 ・最先端サービス(技術)の積極的な採用。 ⇒ 手作業の部分を自動化させる。 システム変更に強くする。 Copyright ©

    ZOZO Technologies, Inc. All Right Reserved.
  14. システム構成(リプレイス前) Copyright © ZOZO Technologies, Inc. All Right Reserved. Web

    / Application Server Database Server User オンプレミス
  15. システム構成(リプレイス後) Copyright © ZOZO Technologies, Inc. All Right Reserved. Web

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

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

  18. Kubernetes 導入前の課題 ・デプロイが手作業のため、人的ミスが起こりやすく、 時間が掛かっている。安全に素早くデプロイを行いたい。 ・柔軟にスケールさせたい。 ・運用負荷を減らしたい。 Copyright © ZOZO Technologies,

    Inc. All Right Reserved.
  19. Kubernetes 導入前の課題 ・デプロイが手作業のため、人的ミスが起こりやすく、 時間が掛かっている。安全に素早くデプロイを行いたい。 ⇒ Rolling Update で解決可能 ・柔軟にスケールさせたい。 ⇒

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

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

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

    ・GCP ⇒ Google Kubernetes Engine ・AWS ⇒ Amazon EKS Copyright © ZOZO Technologies, Inc. All Right Reserved. Azure を選定 ・ZOZOオンプレミス環境と親和性が高い。 オンプレミスに近い環境に移行することで 移行コストや移行難易度を下げるのが狙い。
  23. 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.
  24. 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を選択。
  25. 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サポートへ問い合わせができる
  26. システム構成(リプレイス後) Copyright © ZOZO Technologies, Inc. All Right Reserved. Web

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

    API Database Server クラウド 線 Kubernetes(ACS Engine) Namespace: a Namespace: b Pod Pod Pod Pod Pod Pod
  28. 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の複製を 作成し、冗長化することが可能
  29. Kubernetes 設定 Copyright © ZOZO Technologies, Inc. All Right Reserved.

    Kubernetes(ACS Engine) Namespace: a Namespace: b Pod Pod Pod Pod Pod Pod Namespace ⇒ 仮想的なクラスタとして扱うことができる (任意の単位でPodをグループ化できる)
  30. Kubernetes について 「安全にデプロイしたい」、「柔軟にスケールさせたい」、 「運用負荷を減らしたい」という課題を解決するための Kubernetes の機能を紹介。 Copyright © ZOZO Technologies,

    Inc. All Right Reserved.
  31. Kubernetes について ・Namespace ・セルフヒーリング ・水平Podオートスケーリング ・Azure 仮想マシンスケールセット Copyright © ZOZO

    Technologies, Inc. All Right Reserved.
  32. Kubernetes について ・Namespace ・セルフヒーリング ・水平Podオートスケーリング ・Azure 仮想マシンスケールセット Copyright © ZOZO

    Technologies, Inc. All Right Reserved. 安全にデプロイを行うために利用 システムを安定稼働 させるために利用 (スケール・運用負荷低減)
  33. Namespace 利用 ・Namespace により仮想的なクラスタとして扱うことができる。 (任意の単位で Pod をグループ化できる) 例えば、Production 環境、Staging 環境などの切り分けを

    行うことができる。 Copyright © ZOZO Technologies, Inc. All Right Reserved.
  34. 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)と呼ばれるロールを設定する。
  35. セルフヒーリング Copyright © ZOZO Technologies, Inc. All Right Reserved. Kubernetes

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

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

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

    Node Pod Pod ・minReplicas / maxReplicas に最小Pod数、最大Pod数を 設定することで、Podを自動スケールさせることが可能。 User Access Pod スケールアウト
  39. Azure 仮想マシンスケールセット ・Kubernetes は仮想マシン上で、動作している。 そのため、仮想マシンをスケールアウトさせることで、 負荷分散を行うことができる。 Kubernetes 1.12 にて Azure

    仮想マシンスケールセット (VMSS)が安定版となった。 Copyright © ZOZO Technologies, Inc. All Right Reserved.
  40. Azure 仮想マシンスケールセット Copyright © ZOZO Technologies, Inc. All Right Reserved.

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

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

  43. Kubernetes クラスタを分散 Copyright © ZOZO Technologies, Inc. All Right Reserved.

    ・システムを安定稼働させるために、複数リージョンで 冗長化させる。
  44. 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
  45. デプロイについて Copyright © ZOZO Technologies, Inc. All Right Reserved.

  46. デプロイ システムリプレイス以前は、デプロイが手作業でありミスも起こりやすかった。 Kubernetes に変えてからは「canary リリース」「Rolling Update」を利用し、 安全に素早くデプロイを行えるようになった。 Copyright © ZOZO

    Technologies, Inc. All Right Reserved.
  47. 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 ・一部だけにリリースし、問題のないことを確認する。
  48. 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 を利用すると管理しやすくなる。 ・問題があった際は、すぐに切り戻すことで 影響を最小限に抑えられる。
  49. 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 ・全台にリリースを行う。
  50. 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 開始
  51. 監視 Copyright © ZOZO Technologies, Inc. All Right Reserved.

  52. Kubernetes 監視について Kubernetes はセルフヒーリング等である程度、自動運用に なっているが、監視しなくて良いわけではない。 CPU、メモリ、ディスク使用量や、アプリケーションが動作 しているかどうかを監視する必要がある。 監視することで日々の変化を観測し、問題発生時に逸早く 気づき、対処ができる仕組みを作ることが大切。 Copyright

    © ZOZO Technologies, Inc. All Right Reserved.
  53. Kubernetes 監視について ・システムが正常か、異常かを数値で表現する。 ・状態を可視化する。 ・問題発生時の伝達・共有・対処ができる環境を作る。 Copyright © ZOZO Technologies, Inc.

    All Right Reserved.
  54. Datadog Datadog を監視で主に利用している。 Monitoring SaaS であり、 メトリクスの収集・可視化・通知が行える。 閾値を決めアラートをSlackに通知することが可能。 Copyright ©

    ZOZO Technologies, Inc. All Right Reserved.
  55. Datadog 例えば、以下のようなことを監視することが可能。 ・PodのCPU使用率 ・Podのメモリ使用率 ・Podのアクセス数 Copyright © ZOZO Technologies, Inc.

    All Right Reserved.
  56. Datadog グラフの種類も豊富なため、取得した各メトリクスに適した グラフにて作成することが大切。 Copyright © ZOZO Technologies, Inc. All Right

    Reserved.
  57. その他 監視 Datadog の他にオンコールシステムのPagerDuty も利用している。 Kubernetes の情報を Datadog で取得し、 異常があれば、Slack

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

  59. まとめ サービス信頼性の向上 セルフヒーリング等で安定したサービスを提供できている。 また、Kubenertes×クラウドにより柔軟なリソース確保が可能となった。 運用負荷の低減 Kuberntes により手作業だった部分が自動化され運用負荷が低減した。 また、自動化されたことでミスが起こりにくくなった。 Copyright ©

    ZOZO Technologies, Inc. All Right Reserved.
  60. ご清聴ありがとうございました。 Copyright © ZOZO Technologies, Inc. All Right Reserved.