はじめに
クラウド基盤本部で、インフラ基盤「Neco」の開発と運用を担当している三村と竹村です。
サイボウズでは、Kubernetesを用いたオンプレミスのインフラ基盤「Neco」の開発・運用をしています。 Necoは、kintoneやGraoon、サイボウズOfficeなど、サイボウズの製品を提供するための基盤で、旧基盤からの移行が進み本格的な稼働を行っています。 2025年4月現在でサーバー数千台規模のKubernetesクラスタとなっています。
今回と次回の2記事に渡って、「Neco」について紹介していきます。
1つ目の記事(この記事)では、Necoの概要と、運用自動化の取り組みについて紹介します。
2つ目の記事では、Necoのネットワーク周りの構成について紹介します。
Necoの概要
以下にNecoのKubernetesクラスタの概要を示します。

NecoはオンプレミスのKubernetesクラスタとなっており、データセンターには管理用のサーバーとKubernetesノード用のサーバーが配置されています。管理用のサーバーではKubernetesクラスタの構築や物理サーバーの管理などを行うソフトウェアが稼働しており、これらによってNecoの様々な仕組みが管理されています。
Necoでは利用者に、以下の仕組みを提供しています。
- 1つのKubernetesクラスタを複数のチームで共有して利用するための仕組み
- 開発環境、本番環境といった複数のKubernetesクラスタの提供
- ストレージ、ネットワーク、監視、CI/CD, データベースなどのコンポーネント
これらの仕組みを組み合わせることで、利用者は効率的にサービスの構築、運用ができるようになっています。
Necoの特徴として、コンテナを初めとした様々なクラウドネイティブな技術によって、運用を自動化しています。そして、自社で開発したソフトウェアは、OSSとして公開しています。
以下の章では、Necoを構成する重要コンポーネントである、SabakanとCKE(Cybozu Kubernetes Engine)について、簡単に紹介します。
Sabakan
Sabakanとは、サーバーの管理のための自社開発のソフトウェアです。 Necoは、物理サーバーを用いたオンプレミスのKubernetesクラスターのため、サーバーの管理やOSのプロビジョニングのシステムが必要です。 そのために、Sabakanというソフトウェアを開発しています。 Sabakanは以下のような機能を提供します。
- 物理サーバーの台帳管理、ライフサイクル管理
- IPアドレスの自動付与、ハードウェア(BIOSやBMC)とOSの自動設定
- コンテナ特化OS Flatcar Container Linuxのネットワークブート機能
SabakanにはUEFI HTTP Bootを用いてネットワークブートする機能が実装されており、Necoではこの機能でFlatcar Linuxをブートしています。 Flatcar Linuxはコンテナ向けに最適化されたOSで、以下のような特徴があります。
- コンテナ特化でイメージサイズが小さい
- immutableなファイルシステム
- 宣言的なプロビジョニングシステム
Flatcar LinuxのプロビジョニングにはIgnitionという仕組みが用いられており、OS起動時にJSON形式で書かれた設定ファイルを読み込み、OSの設定を行います。システムとしてはcloud-initに似ていますが、Ignitionは宣言的な書き方をするという特徴があります。変更が必要な場合は、Ignitionファイルを変更してOSのセットアップからやり直す必要があります。Necoでは、Flatcar Linuxをネットブートしており、rootfsをディスクではなくメモリ上に保持しているため、再起動を行うだけで設定変更が可能になっています。この仕組みにより、同じ設定ファイルを使用すれば同じ環境を再現できるため、環境の再現性が高くなり、運用がしやすくなります。
Sabakanにはネットワークブート時に、対象のサーバー用の設定ファイルを提供する機能やOSセットアップ時に必要となる各種ファイルを提供するファイルサーバーが搭載されており、インターネットに出ずにデータセンター内の通信だけでセットアップ処理が完了するようになっています。
Sabakanは、サーバーのライフサイクル管理も行います。Sabakanには運用状態を示すステータスや故障状況を示すステータスなど、いくつかのステータスが用意されており、サーバーのハードウェアからの情報や死活監視の結果によって自動的にステータスの変更が行われます。 さらに、サーバーが故障した場合、CKEと連携して自動的に回復を試みる機能も提供しています。この機能については、後述します。
CKE
CKE(Cybozu Kubernetes Engine)は、Kubernetesクラスタを構築・運用するためのソフトウェアで、kubeadmやRKE(Rancher Kubernetes Engine)に相当するソフトウェアとなっています。 サイボウズでは、運用の自動化まで一貫して行いたいといった独自の要件を満たすために自社でこのようなソフトウェアを開発しました。
CKEは以下のような機能を備えています。
- 宣言的な設定ファイルによるKubernetesクラスタの構築と運用の自動化
- インプレイスでのKubernetesのアップグレード
- 任意のKubernetesリソースを管理する機能
- サーバー管理ツール(Sabakan)との連携機能
- クラスタ内の全ノードを再起動する機能
- 故障が発生した際に、自動で予備サーバーをKubernetesクラスタに追加する機能
- Sabakanで検知された故障サーバーの自動修復
Necoでは、SabakanによってセットアップされたサーバーにCKEが設定を注入し、Kubelet等のコンポーネントの起動を行うことでKubernetesクラスタを構築しています。
CKEの概要に関しては以下のブログ記事をご参照ください。
CKEの運用を自動化する機能の1つとして、全台再起動と呼ばれるクラスタ内の全ノードを再起動する機能があります。 Kubernetesクラスタの全てのサーバーを安全に再起動するためには、事前にPodをノードから退避させる必要があります。 全台再起動を利用することで、これらの処理をCKEが自動で行います。 Necoでは、ファームウェアの更新やOSのアップデートなどを行うために、全台再起動を利用しています。 また、Kubernetesクラスタ上で動作するサービスが、ノード障害に耐えられるかの確認にもなっています。
全台再起動に関しては、以下のブログ記事で詳しく紹介していますのでぜひご参照ください。
また、全台再起動の運用を続ける中で見つけた課題を解決する取り組みも行っています。 詳細に関しては以下のブログ記事をご参照ください。
運用自動化の取り組み - 自動修復
NecoはオンプレミスのKubernetesクラスタのため、オンプレミス特有の解決しなければならない課題が存在します。Necoで取り組んでいる運用の自動化の中で、特に面白いと思われる、自動修復と呼ばれる仕組みを紹介します。
CKE・Sabakanの章で軽く紹介させていただきましたが、Necoではサーバーの故障を検知し自動で修復を試みる機能を実装しています。
故障検知には以下のような手法を用いています。
- BMC(Baseboard Management Controller)によるハードウェア故障診断
- Hashicorp Serfのゴシッププロトコルによるネットワーク分断検出
- Node ExporterによるOSから取得した情報による故障判断
まず、BMCの情報を用いることでディスク故障、メモリ異常、CPU温度の異常、電源の故障など、さまざまなハードウェア故障を取得することができます。これらの情報はRedfishを用いて取得しています。Redfishはベンダーに依存しないサーバーのハードウェア管理のための標準プロトコルで、BMCからハードウェアの情報を取得するためのAPIを提供しています。 ネットワーク的に疎通できなくなるような故障に関しては、クラスタ管理用のツールであるSerfを用いて監視しています。また、メトリクスによる故障検知も行っており、Node Exporterを使用して、OS上から見て異常があった場合の検知も行っています。
サーバーの故障が発生した際、OSの再起動やBMCのリセット、サーバーのリセットで回復することがあります。そのため、故障を検知した際に自動的にこれらを試みる機能を実装しています。この機能を自動修復と呼んでいます。 自動修復を試みて復旧できない場合は、リセット等では回復しない故障と判断され、人力によるサーバーの修理が行われます。
今まではサーバー故障の際は手動での対応を行っていましたが、サーバーの台数が増えるにつれて、故障頻度も増えるため、苦労していました。自動修復の導入により、故障対応にかかる時間を大幅に短縮することができ、運用の効率化につながっています。
おわりに
本記事では、サイボウズのKubernetes基盤「Neco」について、概要と主要なコンポーネントであるCKE・Sabakanについて紹介しました。
また、オンプレミスならではの運用の自動化についても紹介しました。
Kubernetesというとクラウド環境での利用が多い中、サイボウズではオンプレミスのクラスタを運用しています。大変な側面もありますがオンプレミスでしか得られない運用の知見というのもあり、日々挑戦的な課題解決をしています。
Necoで公開しているOSSや過去の記事は下記ページで公開しています。ぜひご参照ください。
次回はNecoのネットワーク周りの紹介記事が予定されています。お楽しみに!