【エトシーディー】
etcd(エトシーディー) とは?
最終更新:
💡 Kubernetesの設定と状態を支える、分散した記憶係
設定や状態をキーと値で保存する分散ストア。Raftで合意を取り、KubernetesではAPIオブジェクトなどのクラスタデータの保存先として使われる。
📌 このページのポイント
- Raftの合意で更新を確定する分散キーバリューストア
- KubernetesではPodやService、SecretなどのAPIオブジェクトを保存する
- 3台構成では2台の合意が必要。過半数を失うと更新を確定できない
- Watchで変更を購読できるが、通知の遅延に上限は保証されない
etcdってKubernetesで何をしているの?
普通のデータベースとは違うの?
複数のサーバーで矛盾しないようにするには?
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」を組み合わせた名前だよ。つまり「分散された設定ストア」という意味が込められているんだ