![見出し画像](https://assets.st-note.com/production/uploads/images/166176554/rectangle_large_type_2_638455f320df0b2e6333e4185d465cba.png?width=1200)
etcd のデータ保存の仕組みとは?「論理キー」と「物理データ」の関係
Kubernetes の心臓部とも言える etcd。この etcd は、Kubernetes クラスターの状態や設定を管理するために使われていますが、「データはどこにどうやって保存されているの?」という疑問を持ったことはありませんか?
実は etcd には、「論理的なデータ」と「物理的なデータ」 という2つの保存形式が存在します。これらがどのように連携してデータを管理しているのか、身近な例え話を交えながら解説します。
論理的なデータとは?(例: /registry/secrets/web-app/database-access)
Kubernetes は etcd にデータを保存する際、論理的なキー という形で管理します。これは「データの住所」のようなもので、どこに何があるのかを示すラベルです。
例えば、web-app という Namespace にある database-access という名前の Secret は、etcd 内では次のような 論理キー で保存されます:
/registry/secrets/web-app/database-access
/registry: Kubernetes のデータが格納される共通のルートパス
secrets: リソースの種類(Secret、Pod、Service、ConfigMap など)
web-app: Namespace(名前空間)
database-access: リソース名
この「キー」があれば、Kubernetes はデータベースの中から必要なリソースの情報を見つけ出し、適切に管理・検索できます。
論理キーの例え話:図書館の目録
論理キーは、まるで図書館の「本の整理番号」や「目録」のようなものです。
図書館では、膨大な数の本が「ジャンル」「著者」「タイトル」などで整理されていますよね?例えば、ある本の情報が次のように整理されているとします:
ジャンル: 技術書
著者: Kubernetes
タイトル: データ管理の基本
図書館の目録では、これを次のような「住所ラベル」として管理します:
/技術書/Kubernetes/データ管理の基本
これにより、図書館員はこの住所ラベルを頼りに目的の本を見つけられます。
Kubernetes では?
同じように、Secret などのデータは論理キー /registry/secrets/web-app/database-access という形で整理され、管理されています。
物理的なデータとは?(例: /var/lib/etcd)
論理キーで整理されたデータは、実際には etcd の物理データベース に保存されます。その保存場所が /var/lib/etcd です。
この中には、BoltDB というバイナリ形式のデータベースがあり、etcd のデータは効率的に保存・管理されています。
/var/lib/etcd の中身の例
/var/lib/etcd
├── member
│ ├── snap # データベースのスナップショット
│ ├── wal # Write Ahead Log(書き込みログ)
└── ...
イメージ
「論理的なキー」がデータの住所ラベルなら、/var/lib/etcd にあるデータベースファイルは「倉庫にしまわれた物理的な箱」のようなものです。
「論理キー」と「物理データ」はどう連携している?
例えば、etcdctl コマンドを使って Secret のデータを取得する場合の流れを見てみましょう。
手順: データ取得の流れ
論理キーを指定
ユーザーが etcdctl コマンドでデータを取得します:etcdctl get /registry/secrets/web-app/database-access
etcd が物理データベースを検索
etcd は /var/lib/etcd 内にあるデータベースファイル(バイナリ形式)を参照し、指定された「論理キー」に対応するデータを探します。JSON形式のデータを返す
見つかったデータを JSON 形式でレスポンスとして返します:
{
"metadata": {
"name": "database-access",
"namespace": "web-app",
"uid": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"creationTimestamp": "2024-06-18T00:00:00Z"
},
"data": {
"username": "YWRtaW4=",
"password": "cGFzc3dvcmQ="
}
}
図書館と倉庫の関係
論理キー /registry/...
図書館の「目録」や「整理番号」:データの場所(住所)を示すラベル。
例: /registry/secrets/web-app/database-access
物理データ /var/lib/etcd
図書館の「倉庫」や「本棚」に保存されている本そのもの:実際のデータが保存されているバイナリファイル。
データの取り出し(etcdctl コマンド)
ユーザーが住所ラベルを指定すると、etcd が倉庫(データベース)から対応するデータを取り出して返します。
まとめ
論理キー(/registry/secrets/web-app/database-access)
→ データの「住所ラベル」。Kubernetes がデータを検索・管理するための識別子。物理データ(/var/lib/etcd)
→ etcd が実際にデータを保存する物理的なデータベースファイル(BoltDB)。データ取得の流れ
ユーザーは論理キーを使ってデータにアクセスする。
etcd は物理データベースからデータを探し、結果を返す。
Kubernetes はこの2つの仕組みを使って、効率的なデータ管理と安全なデータ保存を両立しています。図書館の目録と倉庫を思い浮かべると、その仕組みが少し身近に感じられるかもしれませんね。