Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Namespace でクラスタを論理的に分割する

Kubernetes では、Namespace リソースを作ることで複数の作業空間を構築し、各作業空間ごとに独立したリソース管理ができます。 検証・本番環境のように権限やネットワーク接続性の要件が異なる環境を運用したい場合や、複数のチームで利用する場合に有用です。

PFCP では、Namespace リソースの作成機能を提供しています。 ただし、PFCP の Kubernetes クラスタはマルチテナント型で構成されているため、Namespace リソースの作成に関して一般の Kubernetes クラスタとは異なる以下の制約があります。

ネームスペースの制約

  • 各組織には、ルートネームスペースとして 1 つの Namespace リソースが提供されます。
  • 追加の Namespace リソースは、このルートネームスペースに従属するサブネームスペース1として作成します。
  • ルートネームスペースのリソース名は、org-<組織名> です。
  • サブネームスペースのリソース名は、org-<組織名>-- が接頭辞として付きます。
  • ルートネームスペースは、PFCP の全クラスタで事前に作成されます。削除できません。
  • サブネームスペースは、PFCP の各クラスタごとに個別に作成します。削除可能です。
  • kubectl などを利用して直接 Namespace リソースを作成することはできません。2
  • サブネームスペースに従属するサブネームスペース(孫ネームスペース)を作成することはできません。

以下では、サブネームスペースを管理する方法を説明します。

サブネームスペースの作成

以下の手順で、サブネームスペースを作成します。

  1. ポータルのネームスペースにアクセスします。
  2. ネームスペースの作成 画面を開きます。
  3. クラスタ名ネームスペース名、説明を入力します(説明は任意項目です)。
  4. 組織内の他の Namespace からの通信を許可しない場合は、 オプション2にチェックを入れてください。
  5. 作成 ボタンをクリックすると、サブネームスペースが作成されます。

作成したサブネームスペースは、通常の Namespace リソースとして使用できます。

# サブネームスペース `org-<組織名>--foo` を作成した場合
$ kubectl get all -n org-<組織名>--foo
No resources found in org-<組織名>--foo namespace.

組織管理者は、作成したサブネームスペースに対して org-admin Role の権限が自動で付与されます。 一般ユーザは、サブネームスペースに対して自動での権限付与がされないため、RoleBinding を作成して権限を付与する必要があります。 RoleBinding の詳細は、権限設定をご確認ください。

サブネームスペースの変更

  1. ポータルのネームスペースにアクセスします。
  2. 変更したいサブネームスペースの変更画面を開き、設定を修正します。クラスタ名、ネームスペース名は変更できません。
  3. 更新 ボタンをクリックすると、サブネームスペースが変更されます。

Info

ルートネームスペースの変更はできません。

サブネームスペースの削除

  1. ポータルのネームスペースにアクセスします。
  2. 削除したい Namespace を選択し、削除します。

Warning

サブネームスペースを削除すると、Namespace リソース内で作成された全リソースが削除されます。

Info

ルートネームスペースの削除はできません。

参考: コマンドラインツールでサブネームスペースを操作する

サブネームスペースの機能は、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-<組織名>

  1. サブネームスペース機能を提供するために、Hierarchical Namespaceを採用しています。

  2. Hierarchical Namespace のカスタムリソースである SubnamespaceAnchor を使用すれば、サブネームスペースとして Namespace リソースを作成できます。 ↩2