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