Neco プロジェクト完了したので人材募集します!

Neco プロジェクト責任者の ymmt です。

Neco プロジェクトは、2018年に開始したサイボウズのクラウドサービス基盤を刷新するプロジェクトです。 三年半の期間を経て、この度プロジェクトの目標をすべて達成できました。

そこで今回は社内で完了報告をした資料を抜粋して、改めて Neco プロジェクトの概要と成果についてお伝えします。

また、プロジェクトは完了しましたが、作り上げた新基盤「Neco」の活用はまだまだこれからの段階です。 基盤は使ってなんぼなのでこれからが仕事としては大変かつ面白いことになります。

そのようなわけで、クラウドサービス基盤の開発・運用に携わりたい方をしています! 今後の計画についても触れていますので、ぜひご一読いただければ幸いです。

f:id:cybozuinsideout:20191105145211p:plain:w240

プロジェクトのまとめ

Neco プロジェクト概要

サイボウズのクラウドサービス cybozu.com は 2011 年にサービス提供を開始しました。 国内データセンターで構築した独自基盤で稼働していますが、アーキテクチャが古く様々な問題を抱えるに至ったため、2018 年に抜本的な改善を開始しました。それが Neco プロジェクトです。

主な目標として、以下の三項目を掲げました。

  • 数千台のサーバーの容易な管理
  • スケーラビリティの大幅な向上
  • サービスのダウンタイムの大幅な削減

目標達成状況

まずサーバーの容易な管理については、ネットブートとコンテナ実行に最適化された OS を採用することで更新作業を大幅に簡略化しました。 また、Kubernetes クラスタに組み込むサーバーについても自動で選択・入れ替えできる機能を開発しました。

スケーラビリティ面では、ストレージデバイスは原則として NVMe SSD にすることで I/O 性能を大幅に向上しました。 また、分散オブジェクトストレージ Ceph を導入してサーバー台数を増やせばストレージシステムの容量と性能を増やせるようにしました。

ダウンタイムの削減に関しては、MySQL は MOCO というソフトウェアで冗長化と自動運用を実現しました。 その他のミドルウェア群も冗長化した結果、今では毎週全サーバーを再起動してもサービスが継続できるようになっています。

成果紹介

Neco のアーキテクチャ

Neco のシステムはデータセンター全体を Kubernetes クラスタとして管理します。 実際利用者は kubectl や Argo CD といった Kubernetes 用のソフトウェアで Neco を使います。

Kubernetes クラスタを自動運用する CKE や高機能なネットワークブートサーバーである sabakan を自社開発した結果、数千台のサーバーも楽に運用できるようになっています。 例えばサーバーを退役して適切な別のサーバーを選択して入れ替える処理は、コマンド一つで実行できるようになっています。

Kubernetes を稼働したままサーバーを安全に順次再起動する仕組みやファームウェアを自動で更新する仕組みも開発しました。

マルチテナンシー

サイボウズは多数の開発チームを抱えています。 これらの開発チームが他のチームのリソースに影響を与えないように、Neco の Kubernetes は各種のマルチテナンシー機能を実装しています。

上の画像は Teleport という認証プロキシで Kubernetes にアクセスしている様子です。 上下の画像は異なる開発チームがアクセスしている様子で、利用可能なサーバーが異なっていることがわかります。

全ての開発チームが共通で利用できる仕組みも多数用意しています。 Teleport もそうですし、後述するモニタリング基盤や Argo CD などは各自が用意しなくてもすぐに使えるようになっています。

ネットワーク機能

クラウドサービスを動かす基盤であるため、ロードバランサや NAT 機能をオンデマンドに利用できるようになっています。 もちろん、TLS 証明書も自動で発行・更新できます。

監視基盤

Neco で力が入っているのが監視基盤と呼んでいる仕組みです。 運用とはすなわち監視のことである、と言いたいくらいサービスの稼働状況の監視は大事です。

そこで Neco では Loki, VictoriaMetrics operator, Grafana operator による監視基盤を用意して開発チームが簡単にサービスを監視できるようにしました。 詳しくは以下の記事をご覧ください。

blog.cybozu.io

オートスケール機能

Kubernetes の強力な機能の一つがオートスケール機能です。 簡単にいうと、負荷に応じて Pod を自動的に増減してくれる機能です。

Neco は prometheus-adapterkube-metrics-adapter を利用しているので CPU やメモリ使用量に加え、cAdvisor の提供するコンテナ単位のメトリクスや、PromQL による任意のクエリで Pod をオートスケールできます。

また、拡張可能なボリュームについてもファイルシステムの空き容量を見て自動的に拡張する pvc-autoresizer を開発し、利用者に提供しています。

MySQL (MOCO)

サイボウズでは 400 以上の MySQL のインスタンスを動作させています。 これらを Kubernetes 上でクラスタ化し、自動的にフェイルオーバーやバックアップするためのソフトウェア MOCO を開発しました。

詳しくは以下の記事をご覧ください。

blog.cybozu.io

分散オブジェクトストレージ

前述の通り、スケールアウトする分散オブジェクトストレージとして Ceph を導入しました。 正確に言うと Ceph を Kubernetes 上で自動運用する Rook を改良して導入しています。

その取り組みが認められ、Neco チームのメンバーが Rook のメンテナに就任しています

Elasticsearch / Kibana

MySQL 同様、Elasticsearch のクラスタも Kubernetes 上で自動運用しています。 こちらは Elastic 社の Elastic Cloud on Kubernetes (ECK) という製品を導入しました。

オープンソース

ここまで紹介してきたソフトウェアの大半はオープンソースです。 Neco の成果物もほぼ 100% オープンソースライセンスで公開していて、どなたでも利用可能です。

実際 github.com/cybozu-go/necogithub.com/cybozu-go/neco-apps の組み合わせはほぼ Kubernetes ディストリビューションに相当します。 どなたでも、この記事に紹介してきたような Neco クラスタを構築できるわけです。 (ただし運用するのは大変でしょう)

そのほかの成果

(picture by CloudNative Computing Foundation under CC-BY-NC 2.0)

Kubernetes および CloudNative 技術のカンファレンスである KubeCon + CloudNativeCon で弊社メンバーが計3回登壇できました。 KubeCon は 10,000 人規模の参加者が集うオープンソース系では世界最大規模のカンファレンスです。

その他にも国内で多数発表・登壇しています。

現状と今後の予定

Neco の利用状況

Neco アーキテクチャのデータセンターは現在 3 箇所で稼働しています。

各データセンターで Pod 数にして約 800 個、データ量にして数テラバイト単位のワークロードが動いていますが、Neco 基盤への移行はほんの序盤です。 データを持つワークロードの移行は今年後半から本格化していきます。

今後の体制

Neco は今後は基盤・プロダクトとして継続的に開発・発展させていきます。

具体的には以下3チーム体制になります。全チーム、絶賛人員募集中です!

  • Neco (Kubernetes) チーム

    マルチクラスタ連携、高度な L4 ロードバランサ、Serverless 基盤、CI/CD システムの改善などなど今後も取り組むべき課題がたくさんあります。

    Kubernetes 専門家として腕を磨きたい方、社内に最高のインフラを提供したい方はぜひ応募してください。

  • CSA (ストレージ) チーム

    ストレージコンポーネントの設計・開発・運用を行うチームです。 今後の大きな仕事は、旧基盤からのペタバイトクラスのデータの移行作業です。

    ソフトウェア、ハードウェアを問わず不具合調査・評価・チューニングを繰り返していく作業に興味がある方はぜひ応募してください。

  • Maneki (移行) チーム

    旧基盤からの移行作業を統括して進めるチームです。現在ElasticsearchやMySQLなどのミドルウェアの移行を進めています。 利用者向けのトレーニングも担当しており部署横断的な仕事が多くあります。

    Kubernetes 専門家である必要は必ずしもありません。業務内容にご関心がある方はぜひ応募してください。

以上、Neco プロジェクトは完了したけれど Neco の発展はこれからというお話でした。 今後も折々に情報をお伝えしていきます。