Namespace でクラスタを論理的に分割する
Kubernetes では、Namespace リソースを作ることで複数の作業空間を構築し、各作業空間ごとに独立したリソース管理ができます。 検証・本番環境のように権限やネットワーク接続性の要件が異なる環境を運用したい場合や、複数のチームで利用する場合に有用です。
PFCP では、Namespace リソースの作成機能を提供しています。 ただし、PFCP の Kubernetes クラスタはマルチテナント型で構成されているため、Namespace リソースの作成に関して一般の Kubernetes クラスタとは異なる以下の制約があります。
- 各組織には、ルートネームスペースとして 1 つの Namespace リソースが提供されます。
 - 追加の Namespace リソースは、このルートネームスペースに従属するサブネームスペース1として作成します。
 - ルートネームスペースのリソース名は、
org-<組織名>です。 - サブネームスペースのリソース名は、
org-<組織名>--が接頭辞として付きます。 - ルートネームスペースは、PFCP の全クラスタで事前に作成されます。削除できません。
 - サブネームスペースは、PFCP の各クラスタごとに個別に作成します。削除可能です。
 - kubectl などを利用して直接 Namespace リソースを作成することはできません。2
 - サブネームスペースに従属するサブネームスペース(孫ネームスペース)を作成することはできません。
 
以下では、サブネームスペースを管理する方法を説明します。
サブネームスペースの作成
以下の手順で、サブネームスペースを作成します。
- ポータルのネームスペースにアクセスします。
 - ネームスペースの作成 画面を開きます。
 - クラスタ名、ネームスペース名、説明を入力します(説明は任意項目です)。
 - 組織内の他の Namespace からの通信を許可しない場合は、 オプション2にチェックを入れてください。
 - 作成 ボタンをクリックすると、サブネームスペースが作成されます。
 
作成したサブネームスペースは、通常の Namespace リソースとして使用できます。
# サブネームスペース `org-<組織名>--foo` を作成した場合
$ kubectl get all -n org-<組織名>--foo
No resources found in org-<組織名>--foo namespace.
組織管理者は、作成したサブネームスペースに対して org-admin Role の権限が自動で付与されます。
一般ユーザは、サブネームスペースに対して自動での権限付与がされないため、RoleBinding を作成して権限を付与する必要があります。
RoleBinding の詳細は、権限設定をご確認ください。
サブネームスペースの変更
- ポータルのネームスペースにアクセスします。
 - 変更したいサブネームスペースの変更画面を開き、設定を修正します。クラスタ名、ネームスペース名は変更できません。
 - 更新 ボタンをクリックすると、サブネームスペースが変更されます。
 
サブネームスペースの削除
- ポータルのネームスペースにアクセスします。
 - 削除したい Namespace を選択し、削除します。
 
参考: コマンドラインツールでサブネームスペースを操作する
サブネームスペースの機能は、Hierarchical Namespaceの SubnamespaceAnchor カスタムリソースで実現しています。 kubectl-hnsプラグインを導入すると、サブネームスペースの操作をターミナルから行えます。
サブネームスペースの作成
# org-<組織名>--foo サブネームスペース を作成する
$ kubectl hns create org-<組織名>--foo -n org-<組織名>
Successfully created "org-<組織名>--foo" subnamespace anchor in "org-<組織名>" namespace
階層構造の閲覧
$ kubectl hns tree org-<組織名>
org-<組織名>
└── [s] org-<組織名>--foo
Namespaceの削除
$ kubectl delete subnamespaceanchor org-<組織名>--foo -n org-<組織名>
- 
サブネームスペース機能を提供するために、Hierarchical Namespaceを採用しています。 ↩
 - 
Hierarchical Namespace のカスタムリソースである SubnamespaceAnchor を使用すれば、サブネームスペースとして Namespace リソースを作成できます。 ↩ ↩2