【連載】Cybozu.comクラウド基盤の全貌

イントロダクション

クラウド基盤本部の吉川拓哉です。「Cybozu.comクラウド基盤の全貌」と題して私たちが運用している基盤を連載形式で紹介することになりました。第1回となる本記事はイントロを兼ねたサイボウズのクラウド基盤の概要説明です。

サイボウズのクラウド

サイボウズが自社クラウド「cybozu.com」でサービス提供を開始したのは2011年。パッケージ提供していたグループウェア製品であるOfficeやGaroon、メールワイズをクラウド版として移植し、業務アプリケーションを手軽に開発できるkintoneをクラウド製品として新たに開発するなど、クラウドを通じてより多くのユーザーにサービスを届けられるよう努めてきました。

その土台となる基盤を構築しているのがクラウド基盤本部のエンジニアであり、サービスを24/365で安定稼働させつつ、ビジネス成長に合わせてアーキテクチャレベルでの基盤刷新を実現するなど、開発から運用まで幅広い業務を担当しています。

本連載では、そのような活動の成果としてNecoプロジェクトによりアップデートされたクラウド基盤のアーキテクチャをご紹介します。デジタル赤字との関連においても、オンプレミスによるクラウド運用に注目が集まっていますので、サイボウズがKubernetesをどのように導入して活用しているか、エンジニアの皆さまの参考になれば幸いです。

クラウド基盤の階層

初回のイントロでは、後続記事を読み進めるためのマップとなるよう、クラウド基盤の全体像を階層的に描いて概説します。

クラウド基盤の階層

データセンター管理とネットワーク設計

Cybozu.comのクラウド基盤は国内複数拠点にあるデータセンター上にオンプレミスで構築されています。電力や空調、セキュリティから将来に向けてのラックの拡張可能性まで、複雑な要件を総合的に満たせるデータセンターを選定し、数百、数千という規模のサーバーを収容します。これらがセキュアで冗長化されたネットワークにより接続されることで、初めてソフトウェアエンジニアが利用可能な計算リソースとなります。

Kubernetesの導入とクラスタ構築

利用可能になったサーバーはソフトウェアにより自動的に管理され、Kubernetesクラスタのノードとして統合されます。サーバーリソースの管理をKubernetesに任せることで、アプリケーションの開発者は抽象化された計算リソースを宣言的に要求するだけで良くなり、より本質的なロジックに集中することが可能になります。

このようにして構築したKubernetesクラスタのコンテナネットワーク実装にはCiliumというプラグインを採用しており、高性能でサイボウズのオンプレミス特有の要件に合ったネットワーク設計を実現しています。

データの永続化とKubernetes上のストレージ

Kubernetes上で稼働させるアプリケーションの多くはデータベースやオブジェクトストレージにデータを保存して利用します。このような永続化されたデータをKubernetes上で扱えるよう、サイボウズではローカルストレージを切り出してpodにボリュームとして提供できるようにするCSIプラグインTopoLVMを実装し、さらにRookによりCephによる分散オブジェクトストレージを構築して利用しています。

MySQLクラスタ

アプリケーションが利用するデータベースをセットアップするため、OSS開発したKubernetesのためのMySQLオペレーターMOCOを利用しています。これにより、Kubernetesクラスタ上で3ノード構成で冗長化されたMySQLクラスタが自動的にセットアップ可能となり、cybozu.comの複数の用途に合うよう、MySQLインスタンスを柔軟に提供することができています。この際、MySQLクラスタのノードとして稼働するpodに割り当てられる永続ボリュームは先ほど解説したTopoLVMにより切り出されています。

アプリケーション実行環境

kintoneやGaroonといった製品アプリケーションを実行するプログラムを稼働させているのはAPと呼ばれているpod群です。ユーザーが製品を利用するとロードバランサーを介してこれらにクライアントからのリクエストが振り分けられ、先に解説したデータベースなどのコンポーネントとの連携などを含めてサーバー側での処理が進みます。Kubernetesによる実装においては、サービス成長に伴うユーザー数の増加やリクエストの集中にも耐えられるよう、スケーラビリティを意識した設計を心がけています。

まとめ

初回の本イントロでは、cybozu.comのクラウド基盤がKubernetesを中心にどのように構成されているか、その概要を知る上で必要と思われるものを選んで階層的に整理する形で説明しました。実際には、ここで取り上げたもの以外にも、製品に保存されたテキストデータを検索可能にするための基盤やログデータを保存・分析するための基盤など、多数のコンポーネントが存在しますが、将来に向けて十分にスケールする仕組みを自動的に構築管理しようとする設計思想は共通です。

パブリックなクラウドサービスプロバイダーが提供する汎用的なマネージドサービスとは違い、自社で開発した製品をコストパフォーマンスの良い形で開発運用できるようにすることを重視したプラットフォームではありますが、基盤そのものは、将来のニーズに合わせて必要な機能をいつでも追加実装できるよう設計されています。その点で、本連載がオンプレミス以外の環境をお使いの方も含めて多くのエンジニアにとって参考になればと思っています。

次回以降は今回概説した各層の内容を専門のエンジニアが深堀りして解説していきます。各回は独立した内容として読むことが可能ですので、ご興味に合わせて自由にお読みください。