RancherのProjectとKubernetesのNamespaceは何が違う?
Rancherの画面には、ProjectとNamespaceが階層で表示されます。 どちらもアプリケーションや利用者を分けるために使われますが、同じものではありません。
Rancherの画面には、ProjectとNamespaceが階層で表示されます。
どちらもアプリケーションや利用者を分けるために使われますが、同じものではありません。
NamespaceはKubernetes標準の分離単位
Namespaceは、Kubernetesリソースを論理的に分けるための仕組みです。
kubectl get namespaces
kubectl get deployments -n development
kubectl get pods -n production
Deployment、Pod、Service、Secret、ConfigMapなど、多くのリソースはNamespaceに所属します。
例えば、developmentとproductionを分けると、同じ名前のDeploymentをそれぞれのNamespaceに作成できます。
Cluster
├── Namespace: development
│ └── Deployment: web
└── Namespace: production
└── Deployment: web
NamespaceはRancherを利用しないKubernetesクラスタにも存在します。
ProjectはRancherが追加する管理単位
Projectは、複数のNamespaceをまとめて管理するためのRancher独自の概念です。
Cluster
├── Project: shopping-service
│ ├── Namespace: shopping-dev
│ ├── Namespace: shopping-staging
│ └── Namespace: shopping-prod
│
└── Project: platform
├── Namespace: monitoring
└── Namespace: logging
Projectを利用すると、同じチームや用途に属するNamespaceをまとめ、その単位でメンバーや権限を整理できます。

最大の違いは「どこから見えるか」
| 項目 | Namespace | Project |
|---|---|---|
| 提供元 | Kubernetes | Rancher |
kubectl getで直接確認 |
できる | 通常のKubernetesリソースとしては扱わない |
| 主な用途 | リソースの論理分離 | 複数Namespaceのグループ化 |
| 権限管理 | RoleBindingなど | Project Roleを配下へ適用 |
| Rancherを外した後 | そのまま残る | Rancher側の管理概念としては利用しない |
RancherのProjectを使っていても、実際のワークロードはNamespace内に作成されます。
Projectは何を基準に分けるべきか
Projectの分け方に一つの正解はありません。次の境界を基準にすると整理しやすくなります。
- 管理するチームが異なる
- 閲覧・変更を許可するユーザーが異なる
- リソース割り当てや運用責任を分けたい
- 同じアプリケーションの複数環境をまとめたい
例えば、同じ開発チームが開発・検証環境を管理する場合は、次の形が考えられます。
Project: application-team
├── Namespace: application-dev
└── Namespace: application-test
本番環境だけ運用担当者を分けるなら、Project自体を分ける方が権限を説明しやすくなります。
Project: application-nonprod
├── Namespace: application-dev
└── Namespace: application-test
Project: application-prod
└── Namespace: application-prod
「環境ごとにProjectを作る」が常に正しいわけではない
Projectを細かく分けすぎると、メンバー設定や運用ルールが増えます。逆に、一つのProjectへ多くのNamespaceを集めすぎると、権限の境界が曖昧になります。
先に次の2点を書き出してから設計すると、過度に複雑になりにくくなります。
- どのNamespaceが必要か
- 誰が各Namespaceを管理するか
同じ担当者と同じ運用ルールを適用するNamespaceを、Projectへまとめるのが基本です。
Namespaceを別Projectへ移すときの注意
Namespaceの所属Projectを変更すると、Rancherから適用されるProject単位の権限やリソース管理の前提が変わります。
本番環境では、移動前に少なくとも次を確認します。
- 移動後に誰が参照・変更できるか
- Project Roleに依存している利用者がいないか
- Project単位のResource Quotaを利用していないか
- 自動化や運用手順がProject名を前提にしていないか
まとめ
NamespaceはKubernetesが提供するリソースの分離単位です。Projectは、複数のNamespaceをチームや用途ごとにまとめるRancherの管理単位です。
迷ったときは、次の順番で考えます。
- アプリケーションや環境ごとにNamespaceを整理する
- そのNamespaceを管理するチームと権限を整理する
- 同じ運用境界にあるNamespaceをProjectへまとめる
Comments ()