【エトシーディー】

etcd(エトシーディー) とは?

最終更新:
💡 Kubernetesの設定と状態を支える、分散した記憶係

設定や状態をキーと値で保存する分散ストア。Raftで合意を取り、KubernetesではAPIオブジェクトなどのクラスタデータの保存先として使われる。

📌 このページのポイント
etcd:合意して状態を保存 Kubernetes APIサーバー 更新の例 etcd 3台構成 フォロワー リーダー フォロワー 複製を保持 複製を送る 複製を保持 3台のうち2台の合意で更新を確定 過半数を失うと、更新を確定できない Secretの保存時暗号化は別途設定
中央のリーダーから左右のフォロワーへ更新を複製する例。分散による合意と、バックアップ・暗号化は別の仕組みです。
ひよこ ひよこ
etcdってKubernetesで何をしているの?
ペンギン先生 ペンギン先生
設定や状態を保存する記憶係だよ。PodやServiceなどのAPIオブジェクトを保存するんだ。アプリが書き出すファイルやログまで、何でもここに入るという意味ではないよ。
ひよこ ひよこ
普通のデータベースとは違うの?
ペンギン先生 ペンギン先生
キーに対して値を読み書きするキーバリューストアの一種だよ。設定や分散システムの調整に使う比較的小さなデータ向けで、SQLで表を検索するデータベースとは使い方が違うんだ。
ひよこ ひよこ
複数のサーバーで矛盾しないようにするには?
ペンギン先生 ペンギン先生
Raftという合意アルゴリズムを使うよ。リーダーが更新を他のノードへ複製し、過半数で合意して確定する。3台なら2台、5台なら3台が必要で、過半数を失うと更新を確定できないんだ。
ひよこ ひよこ
変更があったらすぐに分かるの?
ペンギン先生 ペンギン先生
Watchでキーの変更を購読できるよ。ただし通知は遅れる場合があり、必ず即座に届く保証はないんだ。接続が切れた後の再開や、保存されている履歴の範囲にも気を配る必要があるね。
ひよこ ひよこ
データを分散しておけば、バックアップも暗号化もいらない?
ペンギン先生 ペンギン先生
どちらも別に必要だよ。誤って消したデータも複製されるので、スナップショットの保存と復元確認が大切なんだ。KubernetesのSecretは標準ではetcdへ暗号化せずに保存されるため、保存時の暗号化やアクセス制限も設定するよ。
もっと詳しく知りたい人へ

コンパクションとデフラグは同じもの?

別の処理です。コンパクションは古いリビジョンの履歴を削除し、デフラグは空いた領域をファイルシステムへ返します。稼働中ノードのデフラグはそのノードの読み書きを一時的に止めるため、運用計画が必要です。スナップショットのバックアップと復元確認も行います。

etcdの読み取りはいつも最新?

通常のKV読み取りは線形化可能な一貫性を提供します。ただしserializableモードを指定した読み取りは、過半数への確認を省く代わりに古い値を返す場合があります。WatchもKV読み取りと同じ一貫性や通知時間を保証するものではありません。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「etcd」って出てきたら「Kubernetesの状態を保存する分散キーバリューストア」と思えればだいたいOK!
📖 おまけ:英語の意味
「etcd」 = UNIXの /etc ディレクトリ + distributed(分散)
💬 UNIXで設定ファイルが置かれる「/etc」ディレクトリと「distributed(分散)」の「d」を組み合わせた名前だよ。つまり「分散された設定ストア」という意味が込められているんだ

参考資料

← 用語集にもどる