Slide 1

Slide 1 text

モノリスからクラウドネイティブへ 設計思想の違いを知り乗り越える サイボウズ株式会社 山本泰宇 1

Slide 2

Slide 2 text

自己紹介 ▌山本泰宇 @ymmt2005 ▌サイボウズ株式会社で 20 年ほど ▌cybozu.com の立ち上げ責任者 ☞現在は↑のインフラ刷新PjM 2

Slide 3

Slide 3 text

本日のテーマ アーキテク チャスタイル プロジェクト 運営 人材育成 OSS エコシス テムの活用 3

Slide 4

Slide 4 text

cybozu.com ▌2010年、国内 DC で開発開始 ▌現在 150 万契約ユーザー ▌サーバー 2,000 台 4

Slide 5

Slide 5 text

単調に規模が拡大 -10000 0 10000 20000 30000 40000 50000 60000 2011 2012 2013 2014 2015 2016 2017 2018 2019 契約社数 契約社数 二次回帰 線形回帰 需要予測が容易 強気の投資が可能 5

Slide 6

Slide 6 text

抱えた問題 ▌長大な手順書による変更操作 ▌規模に比例する管理コスト ▌乏しい拡張性 6

Slide 7

Slide 7 text

スケールする基盤が欲しい Photo by Carmine Savarese on Unsplash 7

Slide 8

Slide 8 text

2018年、基盤刷新プロジェクト開始 ▌プロジェクト名: Neco ▌当初メンバー ⚫インフラ系開発者×3 ⚫アプリ系開発者×3 ▌Kubernetes経験ほぼゼロ 8

Slide 9

Slide 9 text

2020 2019 2018 9

Slide 10

Slide 10 text

2020年9月時点 ▌クラウドネイティブな DC × 3 が稼働 ▌Neco メンバー 12 名 ▌現行基盤からの移行プロジェクトも開始 ⚫名称:Maneki 10

Slide 11

Slide 11 text

Neco システム図 GitHub Argo CD Neco CD Ubuntu 管理サーバー Sabakan CKE 管理サーバーを自動更新 Node Coil Node Coil Node Coil ネット ブート Kubernetes 自動管理 Prometheus Rook/Ceph MetalLB Teleport Contour アプリを 自動管理 Made by ECK 利用者 OSS 11 プロプライ エタリ

Slide 12

Slide 12 text

主要な開発成果 12 ▌仮想データセンターによる CI/CD ▌実用的なマルチテナント Kubernetes ▌BGPを活用したSDN ▌SDSを実現するための TopoLVM ▌Kubernetes を宣言的に管理する CKE

Slide 13

Slide 13 text

クラウドネイティブに至る道 アーキテク チャスタイル プロジェクト 運営 人材育成 OSS エコシス テムの活用 13

Slide 14

Slide 14 text

アーキテクチャスタイル Photo by Denys Nevozhai on Unsplash 14

Slide 15

Slide 15 text

クラウドネイティブ=スタイル CNCF Cloud Native Definition v1.0 より (前略) このアプローチの代表例に、コンテナ、サービ スメッシュ、マイクロサービス、イミュータブルイ ンフラストラクチャ、および宣言型APIがあります。 これらの手法により、回復性、管理力、および可観 測性のある疎結合システムが実現します。(後略) 16

Slide 16

Slide 16 text

なぜスタイルが重要か ▌Kubernetes != クラウドネイティブ ⚫モニタリングの欠如 ⚫アップグレードが困難 ⚫… ▌なにを使うかより、どう使うか DO IT RIGHT! 17

Slide 17

Slide 17 text

原則駆動開発 (PDD) ▌以下三カ条の設計原則を徹底 ⚫Be Declarative ⚫Define by Software ⚫Test Everything 18

Slide 18

Slide 18 text

誘導された開発成果 ▌仮想データセンターによる CI/CD ⚫Node OS 更新による不具合も検知可能 ⚫Kubernetes 自体 GitOps で更新 ▌ストレージ・ネットワーク on K8S Test Everything から Define by Software から Be Declarative から 19

Slide 19

Slide 19 text

プロジェクト運営 Photo by Patrick Perkins on Unsplash 20

Slide 20

Slide 20 text

開発モデル ▌インクリメンタル+プロトタイピング ▌下層から順次積み上げ開発 ⚫物理サーバー管理⇒k8sインストーラ⇒… ▌コンセプト検証(PoC) ⚫新機能開発時はほぼ実施 21

Slide 21

Slide 21 text

難しいところ ▌工数が読みにくい ⚫PoC 自体に工数がかかるケースも多々 ▌クラウドネイティブ界隈は日進月歩 ⚫作り直しや改良がしばしば求められる 22

Slide 22

Slide 22 text

対策 ▌工数は読まない ⚫何をやるか順番だけ決める ⚫積み上げた成果を利用者に順次提供 ▌カイゼン作業専任のサブチーム ⚫雑多な割り込みを一手に引き受け 23

Slide 23

Slide 23 text

人材育成 Photo by Iñaki del Olmo on Unsplash 24

Slide 24

Slide 24 text

採用 ▌クラウドネイティブ人材 ⚫たくさん採用できるほどいません ☺ ⚫関心がある人を育てていくのが基本 25

Slide 25

Slide 25 text

組織 ▌新基盤には基本的に専任で人員を配置 ⚫クラウドネイティブ専門家として育成 ▌現行基盤から新基盤の移行にも人員を配置 現行基盤 チーム 移行 チーム 新基盤 チーム 26

Slide 26

Slide 26 text

学習 ▌輪講や勉強会を業務時間に組み込み ▌KubeCon に Neco チーム全員派遣 27

Slide 27

Slide 27 text

アウトプット ▌ブログやミートアップで多数成果発表 ⚫アウトプットすることでさらにレベルアップ 28

Slide 28

Slide 28 text

OSSエコシステムの活用 Photo by Dmitry Grigoriev on Unsplash 29

Slide 29

Slide 29 text

魅力的なエコシステム https://landscape.cncf.io/ 30

Slide 30

Slide 30 text

活用する上での課題 ▌アップストリームへの貢献 ⚫不自由なく OSS 活動できる環境の整備 ▌頻繁なアップデートへの対応 ⚫Kubernetes は3か月毎にリリース ⚫更新試験の自動化はほぼ必須 31

Slide 31

Slide 31 text

OSSポリシー&推進チーム ▌OSS活動を支援する目的規定を整備・公開 ⚫https://cybozu-oss-policy.readthedocs.io ▌社員のOSS活動を支援する常設チーム創設 ⚫CNCF 加盟手続きや寄付活動も 32

Slide 32

Slide 32 text

自動テストの整備 ▌Neco の開発活動の半分は自動テスト関連 ⚫仮想データセンター構築ツール ⚫バージョンアップや再起動のシナリオテスト ⚫テストの安定化・高速化 33

Slide 33

Slide 33 text

まとめ 34

Slide 34

Slide 34 text

クラウドネイティブへの方法論 アーキテクチャ スタイル なにを使うかより、どう使うかが重要 プロジェクト 運営 作って終わりではなく、作り続ける 人材育成 専門家を育成する組織作り OSS エコシステ ムの活用 社員の支援と、テストの充実 35