NoOps Meetup Tokyo #6 登壇資料 https://noops.connpass.com/event/131553/
NoOps Meetup Tokyo #6物理データセンターでも NoOpsサイボウズ株式会社@ymmt2005
View Slide
自己紹介▌サイボウズ株式会社で20年弱◼ cybozu.com 開発責任者とか◼ メモリ 32 GB おじさんなど◼現在は Neco というプロジェクトの責任者
今日の内容▌cybozu.com が抱える課題▌インフラ刷新プロジェクト Neco の紹介◼ アーキテクチャ◼ 方法論▌今後の予定
サイボウズ & cybozu.com▌グループウェアの開発・販売◼ 「サイボウズ Office」は 20 年以上ベストセラー◼ もともとはパッケージソフトウェア販売▌cybozu.com◼ 自社グループウェアを SaaS で提供◼ 2011年11月からサービス開始
cybozu.com の規模▌契約社数28,000社▌契約ユーザー数100万人以上▌リクエスト数2.6億/日▌サーバー台数2,000台弱
単調に規模が拡大-50000500010000150002000025000300003500040000450002011 2012 2013 2014 2015 2016 2017 2018契約社数契約社数 二次回帰 線形回帰需要予測が容易強気の投資が可能
現在のインフラについて
現在のインフラ概要国内数か所のデータセンターで稼働• いわゆるオンプレミスサーバー数十台の頃からアーキテクチャ変わらず• 数千台を扱うのに無理を重ねている分散システムの基盤は独自開発• OpenStack や Kubernetes を使っていない• ssh で何とかするアレ
抱えている課題手作業・Toil が多い低いスケーラビリティ自作に偏りすぎ
辛い例:プログラムの更新作業▌更新手順書を書き起こす▌手順書をレビュー▌複雑な手順はアドホックに自動化▌開発環境でリハーサル▌本番環境でペアで手動適用▌完了まで何時間も端末前で待機することも数え役満!
こうありたい▌撃ちっぱなし可能な宣言的オペレーション▌継続的なデリバリ▌高速な開発・運用のワークフロー(DevOps)▌数千台の規模を活かせるスケーラブルなシステム▌自作からの脱却
インフラ刷新プロジェクト
Neco プロジェクト概要▌2018年1月から始動, 3ヶ年計画▌内容◼ Kubernetes 中心のアーキテクチャ◼ オンプレミスデータセンター◼ 成果物はほぼすべて OSS 公開▌体制◼ 私含め、現在 10 名
なぜ Kubernetes?▌物理サーバーに直接依存させたくない▌コンテナ・マイクロサービス時代の「勝ち馬」◼ 拡大を続けるエコシステム◼ 自作から脱却するのに好都合▌優れた設計◼ 宣言的 API で大規模分散システムの運用を容易に◼ 拡張性が高く、様々な機能をアドオンできる
データセンター内のシステム論理構成3~5台の管理サーバー群数千台のノードで構成される Kubernetes クラスタElasticsearch や MySQL のマネージドサービステナント テナント テナント …Neco
Neco の設計原則1.Be Declarative• Kubernetes 以外もすべて、宣言的に操作可能にする2.Define by Software• 特定の目的に縛られたサーバー・ネットワークを作らない• サーバー・ネットワークの役割をソフトウェアで変更する3.Test Everything• 継続的なデリバリーには試験は自動化しないといけない• データセンターで動作するすべての機能を自動試験する
ここまでの成果▌宣言的 Kubernetes 管理ツール「CKE」▌BGP 中心で設計されたネットワーク▌仮想データセンターを活用した CI / CD▌ステージング用物理データセンター▌その他いろいろ
CKE
CKE▌Kubernetes クラスタの運用を自動化◼ 望みのクラスタ構成を宣言するだけ◼ CKE が適当な物理サーバーを選んで構築・入れ替え◼ Kubernetes の自動バージョンアップも▌HashiCorp Vault で秘密管理◼ 証明書発行◼ Secret 暗号化
CKE の詳しい話は #CNDT2019 で!
BGP 中心のネットワーク
BGP + BFD + ECMP で経路管理&冗長化▌Linux / Kubernetes から経路を自在に制御可能◼ BIRD と組み合わせ可能な CNI プラグイン「Coil」を開発◼ MetalLB で LoadBalancer を実装▌ルータもソフトウェアで実装可能▌専門的な話はブログをどうぞ
ネットワーク概略図Spine-Leaf アーキテクチャコンテナ間の East-West 通信に最適
仮想データセンター
なぜ仮想データセンター?▌Neco はデータセンターを管理するソフトウェア群▌Neco の開発・試験にはデータセンターが必要◼ 開発者に自分専用データセンターが欲しい◼ データセンターでの動作も自動試験したい▌そこで placemat というツールを開発
placemat▌仮想データセンター構築ツール◼ L2 ネットワーク=Linux ブリッジ◼ ルーター=BIRDコンテナ◼ サーバー=QEMU/KVM▌機能◼ YAML で宣言的に環境構築◼ Virtual BMC (IPMI)◼ UEFI HTTP Bootkind: Networkname: ext-nettype: externaluse-nat: trueaddress: 192.168.1.0/24---kind: DataFoldername: datafiles:- name: sabakanfile: sabakan- name: sabactlfile: sabactl---kind: Imagename: ubuntufile: ubuntu-18.04-server-cloudimg-amd64.img---kind: Nodename: host1interfaces:- ext-netcpu: 1memory: 1Gvolumes:- kind: imagename: rootimage: ubuntucopy-on-write: true- kind: vvfatname: datafolder: data---…
データセンターネットワークまるごと仮想化
宣言的デリバリ
再掲: Neco のシステム論理構成3~5台の管理サーバー群数千台のノードで構成される Kubernetes クラスタElasticsearch や MySQL のマネージドサービステナント テナント テナント …Neco
管理サーバーの構成Ubuntu Ubuntu Ubuntu ………手作業管理はしんどい!etcd etcd etcdVaultSerfetcdpasswdSabakanCKEVaultSerfetcdpasswdSabakanCKEVaultSerfetcdpasswdSabakanCKEデータは etcdクラスタに保存Made by
Neco のデリバリー戦略▌システムを Kubernetes の上と下で分割する◼ Kubernetes 上のアプリは Argo CD で宣言的にデリバリー◼ Kubernetes の下は自作ツールで宣言的にデリバリー▌システム全体をデリバリー前に試験する◼ デリバリー前の状態を仮想データセンターで構築、デリバリー後に壊れないことも試験◼ 全電源停止後の動作回復も試験
Neco as of June 2019GitHubArgo CDNeco CDUbuntu管理サーバーSabakanCKE3~5台管理サーバーを自動更新CoreOSCoilCoreOSCoilCoreOSCoilCoreOSCoilネットブートKubernetes自動管理Argo CD PrometheusMetalLB CalicoContourアプリを自動管理Made bypush…
今後の予定
ストレージ管理▌自社製 CSI プラグイン TopoLVM を開発中◼ LVM でローカルストレージを PVC で利用可能◼ VG 空き容量などを考慮する拡張スケジューラー付き▌Elasticsearch & MySQL オペレーター◼ TopoLVM を活用して自動運用する予定▌Ceph / Rook◼ オブジェクトストレージ用に
テナント管理▌2019年7月に本番データセンター構築予定▌テナント利用者向けの様々な環境整備◼ 各種ポリシー◼ 利用者向けドキュメント◼ 利用者向け開発環境◼ …
以上ご清聴ありがとうございました
Appendix
Neco OSS レポジトリ▌全て github.com 上▌cybozu-go/neco 継続的デリバリーツール▌cybozu-go/neco-ops Argo CD 用▌cybozu-go/cke Kubernetes 自動運用ツール▌cybozu-go/sabakan ネットワークブートサーバー▌cybozu-go/coil BIRD と組み合わせ可能な CNI プラグイン▌cybozu-go/topolvm LVM を使う CSI プラグイン▌cybozu-go/placemat 仮想データセンター構築ツール▌ cybozu/neco-containers 各種コンテナイメージのビルド