We couldn't find a match for given <KEYWORD>, please try again.

Kubernetes ネームスペースとは

ネームスペースは、クラスタを仮想的なサブクラスタに分けて整理する方法です。複数のチームやプロジェクトで 1 つの Kubernetes クラスタを共有する際に役立ちます。1 つのクラスタ内のネームスペースの数に制限はありません。各ネームスペースは論理的に分離されますが、相互に通信できます。ネームスペースをネストすることはできません。

Kubernetes 内に存在するリソースは、default ネームスペース、またはクラスタの運用担当者が作成したネームスペースに存在します。ノードとパーシステント ストレージ ボリュームだけがネームスペース外に存在します。これらの低位リソースは、クラスタ内のすべてのネームスペースから常に認識できる状態になります。

Kubernetes の現状

Kubernetes Up and Running

Kubernetes の「default」ネームスペースとは

Kubernetes には、3 つのネームスペースがあらかじめ用意されています。次のとおりです。

  1. default:その名前のとおり、すべての Kubernetes コマンドがデフォルトで参照するネームスペースであり、すべての Kubernetes リソースがデフォルトで配置される場所です。新しいネームスペースが作成されるまで、クラスタ全体が「default」に存在します。
  2. kube-system:Kubernetes コンポーネント用のため、使用は避ける必要があります。
  3. kube-public:パブリック リソース用です。ユーザーによる使用は推奨されません。

Kubernetes ネームスペースのメリット

Kubernetes ネームスペースには、次のような多くのユースケースがあります。

  • チームやプロジェクトごとに独自の仮想クラスタを使用できるため、互いの作業に影響を与えずに済む
  • ユーザーやプロセスを特定のネームスペースに限定することで、ロールベースのアクセス コントロール(RBAC)を強化できる
  • リソース クォータにより、クラスタのリソースをチーム間やユーザー間で分割できる
  • コンテナ化されたアプリケーションの開発、テスト、デプロイの分離が容易になり、同じクラスタ上でライフサイクル全体に対応できる

複数の Kubernetes ネームスペースが必要になる場合

小規模なチームや組織では、default ネームスペースだけで十分かもしれません。開発者やユーザーを互いに分離する必要がない場合は特にそう言えるでしょう。ただし、複数のネームスペースを使用すると、次のような多くの有益なメリットが得られます。

  • 分離:大規模なチームや拡大中のチームでは、複数のネームスペースを使用して、プロジェクトやマイクロサービスを互いに分離できます。ワークスペースが異なれば、同じリソース名を再利用しても問題ありません。また、あるワークスペースのアイテムに対してアクションを実行しても、その他のワークスペースにはまったく影響しません。
  • 組織:開発、テスト、本番用に単一のクラスタを使用する組織では、複数のネームスペースを使用して開発環境とテスト環境をサンドボックス化できます。これにより、アプリケーションのライフサイクル全体を通して、開発者やテスト担当者がそれぞれのネームスペースで行った変更から、本番環境のコードを保護できます。
  • 権限:ネームスペースによって Kubernetes RBAC を使用できるようになるため、権限や能力のセットを単一の名前でグループ化するロールを定義できます。これにより、指定したネームスペースのリソースへのアクセスを、認可されたユーザーだけに限定できます。
  • リソース制御:CPU やメモリの使用率に関するリソース クォータを定義して、ポリシーベースのリソース制限をネームスペースに設定できます。これにより、すべてのプロジェクトまたはネームスペースで実行に必要なリソースを確保し、1 つのネームスペースが利用可能なすべてのリソースを占有するような状態を防止できます。
  • パフォーマンス:ネームスペースを使用すると、特定のクラスタのパフォーマンスを向上させることができます。1 つのクラスタが複数のプロジェクトに対応して複数のネームスペースに分かれている場合、Kubernetes API で操作を実行する際に検索するアイテムが少なくなります。これにより、そのクラスタで実行されている各アプリケーションについて、遅延が低減し、アプリケーション全体のパフォーマンスが高速化します。

Kubernetes ネームスペース間でポッドが通信する方法

ネームスペースは互いに独立していますが、簡単に互いに通信できます。Kubernetes DNS サービス ディレクトリでは、次のような DNS アドレス指定の拡張形式を使用して、目的のサービスをその名前で簡単に見つけることができます。

..svc.cluster.local

サービス名にネームスペース名を付加するだけで、クラスタ上の任意のネームスペースに含まれるサービスにアクセスできます。たとえば、development ネームスペースの payroll サービスにアクセスするには、次のアドレスを使用します。
payroll.development
production ネームスペースの payroll サービスにアクセスするには、次を使用します。
payroll.production

必要に応じ、ネットワーク ポリシーを利用してネームスペース間のアクセスを制御できます。たとえば、ネットワーク ポリシーで、ほかのネームスペースからのすべてのトラフィックを許可または拒否できます。ネットワーク ポリシーは接続にのみ適用され、パケット検査を実行するファイアウォールの代わりにはなりません。

ネームスペースに関連する基本的な kubectl コマンド

現在の Kubernetes ネームスペースを検索するコマンド

クラスタ内のすべてのネームスペースを表示するには、次のコマンドを使用します。
kubectl get namespace
このコマンドを実行すると、default ネームスペースを含むクラスタ内のすべてのネームスペースのリストに加えて、そのステータスと経過時間が返されます。

新しい Kubernetes ネームスペースを作成するコマンド

ネームスペースは、次のコマンドで簡単に作成できます。
kubectl create namespace
その他の Kubernetes リソースと同様に、YAML ファイルを作成して適用し、ネームスペースを作成することもできます。

newspace.yaml:
kind: Namespace
apiVersion: v1
metadata:
name: newspace
labels:
name: newspacekubectl apply -f newspace.yaml

Kubernetes ネームスペースを切り替える方法

ネームスペースを作成後に指定するには、-namepsace= オプションをコマンドに含める必要があります。これは手間がかかるため、簡単な方法として、kubectl config コマンドでクラスタのコンテキストに目的のネームスペースを設定することにより、default ネームスペースを変更できます。
たとえば、default ネームスペースから「testing」という名前のネームスペースに変更するには、次のように入力します。
kubectl config set-context --current --namespace=testing
これにより、それ以降のすべての kubectl コマンドでデフォルトのネームスペースが「testing」に設定されます。

Kubernetes ネームスペースの名前を変更する方法

Kubernetes ネームスペースの名前を変更するのは標準的な方法ではないため、(default 以外の)ネームスペースは慎重に選択してください。

Kubernetes ネームスペースを削除する方法

ネームスペースを削除するには、次のコマンドを使用します。
kubectl delete namespaces
削除は非同期処理であるため、ネームスペースが削除されるまでは「Terminating」と表示されます。

Kubernetes ネームスペースの削除に関する注意事項

ネームスペースの削除は、元に戻すことができない操作です。すべてのサービス、実行中のポッド、アーティファクトなど、そのネームスペースに含まれるすべての要素が削除されます。そのネームスペース内に存在していた要素に対して、ガベージ コレクションが実行されます。この操作を行う前に、ネームスペース内に必要なものが含まれていないことを確認してください。

関連するソリューションおよび製品

ラボ:アプリケーションのモダナイゼーション

既存のアプリケーションを数週間でクラウドに移行

Tanzu for Kubernetes Operations

最新のマルチクラウド コンテナ インフラストラクチャの基盤

Tanzu Application Platform

Kubernetes 環境でマルチクラウド対応の優れた開発者体験を提供