etcd
概要

データはキーと値の組み合わせとして管理される。設定値や接続先情報、稼働中のノード一覧といったデータをキーで識別し、対応する値を登録する仕組みである。リレーショナルデータベースのような階層的なテーブル構造は持たず、シンプルな構造で高速なアクセスを実現している。
データはAPIを通じて取得や更新ができ、必要な情報を各プログラムが共通して参照できる。値の変更を監視する機能も備えており、設定が更新されると利用中のソフトウェアが変更を検知して動作を切り替えることも可能である。
複数のサーバ間でデータの整合性を保つために、「Raft」と呼ばれる合意形成アルゴリズムを採用している。クラスタを構成するノードの中から一つをリーダーとして選出し、リーダーがデータの書き込みを受け付けて他のノードに複製する。過半数のサーバが正常に稼働していれば処理を継続できるため、ネットワーク障害やサーバの停止が発生した場合でも、データの整合性を維持したまま運用を続けられる。
Kubernetesでは、クラスタ内のノードやPod、サービスといった管理情報の保存先としてetcdが採用されている。APIサーバはetcdから必要な情報を取得し、更新内容もetcdに記録する。クラスタ全体の動作がetcdの状態に依存するため、その可用性とバックアップが運用上の重要な要素となる。
etcdはもともと2013年に米コアOS(CoreOS)社のエンジニアによって開発が始められた。その後CoreOS社は米レッドハット(Red Hat)社に(現IBM社傘下)買収され、現在は業界団体のCloud Native Computing Foundation(CNCF)のプロジェクトとして開発が続けられている。Go言語で実装されており、サービスディスカバリや分散ロック、リーダー選出など、複数のシステムが連携して動作するための基盤としても利用されている。