Slide 1

Slide 1 text

DMMプラットフォームにおける GKE を利用した プラットフォームエンジニアリングへの取り組み @pospome

Slide 2

Slide 2 text

登壇者 名前:pospome(ぽすぽめ) 所属:DMM.com Twitter:@pospome

Slide 3

Slide 3 text

DMMプラットフォーム X プラットフォーム エンジニアリング X GKE 概要

Slide 4

Slide 4 text

役割 DMM の各種サービスに対して、 共通機能を提供する部署 組織規模 エンジニアだけで 120 名以上 開発チームは 15 チーム程度 サービス 規模 ピーク帯で 19,000 RPS 40 程度のマイクロサービスで構成 DMMプラットフォームについて

Slide 5

Slide 5 text

01 プラットフォーム エンジニアリング について

Slide 6

Slide 6 text

● 多種多様なツールの活用 ● 複雑化するテクノロジー ● DevOps による開発と運用の一体化 ソフトウェア開発のコストが高い

Slide 7

Slide 7 text

DMMプラットフォームで カナリアリリース機能についての アンケートを取ったことがある。 DMMプラットフォームの例 ● カナリアリリースを知らない … 16%

Slide 8

Slide 8 text

プラットフォーム エンジニアリングとは、組織に おいて有用な抽象化を行い、 セルフサービス インフラストラクチャを 構築するアプローチです。 ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 プラットフォーム エンジニアリングについて https://cloud.google.com/blog/ja/products/application-development/golden-paths-for -engineering-execution-consistency/

Slide 9

Slide 9 text

● 各チームが責任を持って DevOps などに必要なツールを 構築・運用する。 ● 学習コストや作業工数が高い。 ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 概要

Slide 10

Slide 10 text

● プラットフォームチームが 各チームに対してツールを提供する。 ● 各チームの学習コストや 作業コストを削減することができる。 ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 概要

Slide 11

Slide 11 text

プラットフォーム エンジニアリングとは、「組織 において有用な」抽象化を行い、 セルフサービス インフラストラクチャを 構築するアプローチです。 ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 プラットフォーム エンジニアリングについて https://cloud.google.com/blog/ja/products/application-development/golden-paths-for -engineering-execution-consistency/

Slide 12

Slide 12 text

仕組みの抽象度 デプロイ方法 高い 開発チームが Slack でプラットフォーム チームに デプロイを依頼する。 ~ ~ 低い プラットフォーム チームは技術選定だけ担当し、 開発チームが CD パイプラインをゼロから構築・運用する。 抽象化(例:CD パイプライン)

Slide 13

Slide 13 text

プラットフォーム エンジニアリングとは、 組織において有用な抽象化を行い、 「セルフサービス インフラストラクチャ」を 構築するアプローチです。 ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 プラットフォーム エンジニアリングについて https://cloud.google.com/blog/ja/products/application-development/golden-paths-for -engineering-execution-consistency/

Slide 14

Slide 14 text

● 開発チームが任意のタイミングで任意 の仕組みを利用できること。 ● 可能な限り誰かの承認や 作業待ちが発生しないようにする。 ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 セルフサービス

Slide 15

Slide 15 text

02 当時の DMMプラットフォーム プラットフォーム エンジニアリングに取り組む前の DMMプラットフォームについて

Slide 16

Slide 16 text

● DevOps は高いレベルで実践できていた。 ○ 開発スピードが早いわけではなかった。 各チームの習熟度もバラバラだった。 スタートアップの集合体

Slide 17

Slide 17 text

● プラットフォーム チームを設立し、 開発チームの Ops のコストを削減する。 プラットフォーム エンジニアリングへの取り組み

Slide 18

Slide 18 text

03 テクノロジースタックの統一 プラットフォーム エンジニアリングへのファーストステップ

Slide 19

Slide 19 text

● 開発チームごとに 異なるツールを提供するのは工数的に厳しい。 ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 プラットフォーム チームの負担

Slide 20

Slide 20 text

● 多くのチームの要件を満たす 汎用的なツールの提供が必要になる。 プラットフォーム チームの負担

Slide 21

Slide 21 text

項目 権限設定 コンテナ プラットフォーム GKE アラート / モニタリング Datadog コンテナ レジストリ Artifact Registry CD パイプライン Argo CD ワークフロー エンジン Argo Workflows インシデント管理 PagerDuty 提供しているもの一覧

Slide 22

Slide 22 text

● スタンダード クラスタを採用している。 ● シングルクラスター マルチテナント型 1 つの namespace に 1 つのマイクロサービスを配置している。 クラスター数を抑えてプラットフォーム チームの負担を減らす。 ● プラットフォーム チームがクラスターを運用している。 GKE の採用

Slide 23

Slide 23 text

● アプリケーションの特性によって 最適解が変わるもの。 例:DB ● 各チームで適切に運用できそうなもの。 例:Cloud Functions ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 プラットフォーム チームが提供しないもの プラットフォームチームの Google Cloud プロジェクト 会員チームの Google Cloud プロジェクト

Slide 24

Slide 24 text

● テクノロジー スタックの統一によって、 効率よく各チームの Ops のコストを 削減することができた。 結果

Slide 25

Slide 25 text

プラットフォーム チームを抱える費用 VS 削減できる開発工数 プラットフォーム チームのコスパが重要

Slide 26

Slide 26 text

04 なぜ GKE か? プラットフォーム エンジニアリングと GKE の相性

Slide 27

Slide 27 text

1 2 3 なぜ GKE か? 制約が少ない 多様な要件に対応でき、 中長期的にプラットフォームを 作ることができる。 マルチテナント k8s の namespace によって マルチテナント構成が実現し やすい。 OSSエコシステム k8s 自体が OSS なので、 OSS エコシステムが強力であ る。マルチテナントを考慮され ているものが多い。

Slide 28

Slide 28 text

実現方法の正確な操作や 手順を規定するのではなく、 望ましい状態を宣言する。 https://cloud.google.com/blog/ja/topics/developers-practitio ners/build-platform-krm-part-1-whats-platform ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 Configuration as Data (CaD)

Slide 29

Slide 29 text

● yaml 形式で望ましい状態を宣言する このリソース宣言形式は Kubernetes Resource Model (KRM) という。 ● Controller によって yaml で 定義されたリソース状態を実現する https://github.com/GoogleCloudPlatform/kubernetes-engine-samples/blob/HEAD/ quickstart/deployment.yaml Kubernetes における CaD の実現

Slide 30

Slide 30 text

実現方法の正確な操作や 手順を規定するのではなく、 望ましい状態を宣言する。 yaml と Controller による リソース定義・調整のことであり、 GKE の利用者なら当たり前のものである。 https://cloud.google.com/blog/ja/topics/developers-practitioners/build-platform-krm-part -1-whats-platform ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 Configuration as Data (CaD)

Slide 31

Slide 31 text

1 2 3 KRM のメリット すべてが yaml になる クラスター上のリソースを yaml という統一的なフォー マットで定義することができ る。 GitOps が可能 yaml ファイルを GitHub リポ ジトリにホスティングすること によって、GitOps が可能にな る。 ツールチェーンの統一 yaml を扱うためのツール チェーンを揃えれば、任意の 処理が可能になる。

Slide 32

Slide 32 text

● yaml で定義された状態を 実現するための仕組みである。 ● Go 言語で開発することができる。 クラスター上にデプロイされる。 ● Reconciliation Loop によって GKE を常にあるべき姿に調整する。 回復性を持つリソースを実現できる。 Controller と Reconciliation Loop

Slide 33

Slide 33 text

● リソースを宣言的に定義する yaml と 定義されたリソース状態を実現する Controller が分離している。 CaD によるデータと処理の分離

Slide 34

Slide 34 text

● リソースを任意の状態に設定するために yaml を編集するだけでいい。 利用者の DevOps のハードルが下がる。 CaD によるデータと処理の分離

Slide 35

Slide 35 text

● Controller は Go 言語によるリソース操作によって、 複雑な要件を実現することができる。 要件の実現方法は Controller の開発者だけが知っていればいい。 CaD によるデータと処理の分離

Slide 36

Slide 36 text

● yaml の定義と Controller は自作することができる。 任意のリソースに対して任意の操作ができる。 ● フレームワークである。 ● 当然 OSS もこのフレームワークに乗っている。 Custom Controller と Custom Resource Definition (CRD)

Slide 37

Slide 37 text

項目 できること Argo CD CD パイプラインの定義 Argo Workflows ワークフローの定義 Kyverno ポリシーの定義 Custom Controller と CRD の例

Slide 38

Slide 38 text

● KRM は汎用性の高いリソース管理フレームワーク とみなすことができる。 ● Config Connector は KRM によって Google Cloud リソースを 管理することができるサービスである。 ※画像の置換方法 グレーボックスを選択し、右クリックで「画像を置 換」を選択し、配置したい画像に差し替えてくださ い。 あらゆるリソースを管理できる

Slide 39

Slide 39 text

● Web アプリケーションを動かすコンテナ プラットフォームに収まらない。 あらゆるリソースを一元管理できる巨大な CaD プラットフォームになりうる。 例:Config Connector ● リソースによって利用するツールや仕組みを変えなくてもいい。 DevOps のコストを限りなく下げることができる。 Configuration as Data の可能性

Slide 40

Slide 40 text

● エコシステムの導入・運用するコスト ● CaD プラットフォームの実現 GKE のポテンシャルを活かせるか?

Slide 41

Slide 41 text

05 有用な抽象化 開発チームにどこまで責任を持たせるか?

Slide 42

Slide 42 text

● 開発チームに提供する仕組みの抽象度を適切に設定する必要がある。 ● DMMプラットフォームでは、 既存のツールをそのまま開発チームに提供することが多い。 例:標準リソース(Deployment,HPA など), Kustomize, Argo CD, etc. 有用な抽象化

Slide 43

Slide 43 text

● 各チームにはそれ相応の学習コストをかけてもらう。 ● 「自分たちが利用する技術は自分たちで理解すべき」という思想がある。 理解が浅いと運用ができない(DevOps ができない)。 有用な抽象化

Slide 44

Slide 44 text

06 セルフサービス リードタイムを短縮する

Slide 45

Slide 45 text

● 開発チームが任意のタイミングで 任意の目的を達成できるようにする必要がある。 ● DMMプラットフォームでは各チームが自由にツールを利用できる環境になって いる。 承認や作業待ちは基本的に発生しない。 セルフサービス

Slide 46

Slide 46 text

項目 開発チームの責任 GKE 自分が管理するマイクロサービスの マニフェスト ファイルを管理 Argo CD 自分が管理するマイクロサービスの CD パイプラインを管理 Datadog 自分が管理するマイクロサービスの モニターを管理 GAR 自分が管理するマイクロサービスの リポジトリを管理 開発チームの責任

Slide 47

Slide 47 text

● 開発チームのセルフサービス化が進めば進むほど、 権限管理を考えなければいけない。 ● 管理者権限を与えるのが手っ取り早いが、そうもいかない。 セルフサービスと権限管理

Slide 48

Slide 48 text

項目 権限設定 GKE 自分が管理するマイクロサービスの namespace のみ操作可能 Argo CD 自分が管理するマイクロサービスの 設定のみ操作可能 Datadog 誰でもすべてのリソースを操作可能 GAR 自分が管理するマイクロサービスの リポジトリにのみ push 可能 権限管理

Slide 49

Slide 49 text

項目 権限設定 GKE 自分が管理するマイクロサービスの namespace のみ操作可能 Argo CD 自分が管理するマイクロサービスの 設定のみ操作可能 Datadog 誰でもすべてのリソースを操作可能 GAR 自分が管理するマイクロサービスの リポジトリにのみpush可能 権限管理

Slide 50

Slide 50 text

監査ログとモニターによる検知

Slide 51

Slide 51 text

07 まとめ

Slide 52

Slide 52 text

プラットフォーム エンジニアリングで重要なのは以下である。 ● 組織にとって有用な抽象化 ● セルフサービスなインフラストラクチャ ● プラットフォーム チームのコストを上回る組織の規模感 Configuration as Data を備える GKE が これらをサポートする強力なツールになるかもしれない。 まとめ