【ネームスペース】

Namespace(Kubernetes) とは?

最終更新:
💡 1つのクラスタをマンションの部屋のように区切る仕切り

Kubernetesの1つのクラスタで、PodやServiceなどの名前付きリソースを論理的に区分する仕組み。権限や割当量の管理にも使えるが、作成するだけで通信や計算資源が完全に隔離されるわけではない。

📌 このページのポイント
Namespace:名前と管理を区切る1つのKubernetesクラスタNamespace:devService:apiPod・Deploymentなどを管理Namespace:prodService:apiPod・Deploymentなどを管理Node・PersistentVolumeはクラスタ共通Namespaceには属さない権限 → RBAC / 割当量 → ResourceQuota通信制限 → NetworkPolicyと対応実装
論理的な区分であり、Namespaceだけで通信や物理資源が隔離されるわけではありません。
ひよこ ひよこ
Namespaceは、マンションの部屋みたいなもの?
ペンギン先生 ペンギン先生
同じクラスタの中で管理する範囲を分ける、というたとえだね。たとえばdevとprodで、それぞれapiというServiceを作れる。名前は同じでもNamespaceが違うので、別のリソースとして扱えるんだ
ひよこ ひよこ
Kubernetesのものは全部、この部屋に入るの?
ペンギン先生 ペンギン先生
全部ではないよ。Pod、Service、DeploymentなどはNamespaceに属する。一方、NodeやPersistentVolumeなどはクラスタ全体のリソースだから、Namespaceに分けて置くものではないんだ
ひよこ ひよこ
他のチームに触られないようにできる?
ペンギン先生 ペンギン先生
操作の権限はRBACなどで設定するよ。Namespaceに属するRoleを使って、その範囲で何ができるかを管理できる。Namespaceを作っただけで全利用者の権限が自動的に狭まるわけではないんだ
ひよこ ひよこ
CPUやメモリも自動で別々になる?
ペンギン先生 ペンギン先生
Namespaceだけでは上限は付かないよ。ResourceQuotaで、その範囲のPodのCPUやメモリのrequests・limitsの合計や、オブジェクト数などを制限できる。物理的に専用のCPUやノードが与えられる意味とは違うね
ひよこ ひよこ
Namespaceの間では通信できない?
ペンギン先生 ペンギン先生
区切っただけでは通信は遮断されないよ。Serviceを別のNamespaceから参照することもできる。通信を制限したいならNetworkPolicyなどを設定し、それに対応するネットワーク実装も必要。NetworkPolicyを置いただけでは、対応していない実装で効果は出ないんだ
もっと詳しく知りたい人へ

最初からあるNamespaceは?

Kubernetesではdefault、kube-system、kube-public、kube-node-leaseが初期に用意されます。defaultは指定しない場合の既定、kube-systemはシステムのオブジェクト、kube-node-leaseはノードのLeaseなどに使われます。初期Namespaceの役割と、自分のアプリ用に作るNamespaceを区別しましょう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「KubernetesのNamespace」って出てきたら「クラスタ内の名前や管理を区切る仕切り」と思えばだいたいOK!
📖 おまけ:英語の意味
「Namespace」 = 名前空間
💬 プログラミングの名前空間と同じ発想で、同じ名前のリソースが衝突しないように区切る仕組みだよ

参考資料

← 用語集にもどる