複数のチームやプロジェクトが同じ K8sクラスタ を共有する場合は、Namespaceを使ってクラスタを仮想的なサブクラスタに分割すると便利です。クラスタ内には任意の数のNamespaceを作れますが、それぞれ論理的に独立しつつデータを共有できます。Namespaceを入れ子にすることはできません。
K8sのリソースはシステム全体のデフォルトスキーマか、ユーザーが作成したNamespaceのいずれかに属します。Podや永続的なストレージボリュームより下位のリソースは存在せず、クラスタ内のすべてのNamespaceから常に利用できます。
K8s Namespaceには、次のように多くの使い道があります。
標準の設定として、KubernetesはNamespaceを作成し、3つの機能を提供します。具体的には以下があります。
小規模なチームや企業であれば、default Namespaceだけでも十分な場合があります。開発者やユーザーを厳密に分ける必要がない場合には特にそうです。しかし複数のNamespaceを導入すると、さまざまな利点が得られます。
新しいNamespaceを作成するには、次のコードを入力します。
Namespace creation with kubectl
これらの識別子を作る方法は、ほかのK8sリソースと同様にYAMLファイルでも行えます。
newspace.yaml:
kind: Namespaceapi
Version: v1
metadata:
name:
newspacelabels:
name: newspacekubectl apply -f newspace.yaml
そして “kubectl delete namespaces” コマンドで、Namespaceを削除できます。
削除処理は非同期で進行するため、Kubernetes delete namespace実行後に、完全に削除されるまでは「terminating」と表示されることがあります。
現在使用中のコンテキストとは異なるNamespaceでコマンドを実行する際は、--namespaceフラグを使ってそのNamespaceを明示的に指定できます。
Resource QuotaをNamespaceに設定すれば、クラスタのリソースが期待どおりの形で割り振られます。選んだNamespaceに、リソースの上限として働くオブジェクトを定義できます。例えば、以下のマニフェストはdemoが使うCPUを制限する例です。
Quotaが作成されると、demo Namespace内で生成されるすべてのPodに上記の要求や制限が適用されます。demo NamespaceのPodが一定数を超えると、新たにPodを作れなくなります。
Namespaceの作成と管理は手間がかかることもありますが、多くの利点をもたらします。以下に例を挙げます。
Namespaceを使う最大のメリットは、作業が効率化しやすいことです。チームがそれぞれの作業に専念し、必要時だけ連携すればよいので、全体の管理が容易になり柔軟性も高まります。
KubernetesはNamespaceを設定することで、コンテナやPodへのリソース割り当てを簡単にします。オペレーターは必要なリソース量を正確に把握し、不足があればすぐ補えます。また、マイクロサービスの終了時にはリソースを再割り当てする仕組みも備わっています。
システムに問題や異常が発生した場合、どのNamespaceが原因かを即座に特定できるため、オペレーターはすばやく正確に問題を把握・緩和・解決できます。
必要に応じて運用者やクラスタ管理者がリソースを容易に拡張または縮小できます。Namespaceを仮想的な環境として扱うことで、リソースが不足したときに追加Namespaceを用意し、既存の稼働にほぼ影響なくシステムをスケールできます。
最新情報を購読