KubernetesのNamespaceとは
Kubernetesにおいて、Namespaceは同じ物理クラスタ内で複数の仮想クラスタを存在させるための高レベルの抽象化です。Namespaceは、クラスタリソースを複数のユーザーやチーム間で分割するための仕組みです。Namespaceは名前のスコープを提供し、同じクラスタ内でリソースを管理し分離することを容易にします。
Namespaceの目的と利点
NamespaceはKubernetesクラスタでさまざまな目的に使用されます。Namespaceを使用することで、リソースのパーティション分割、アクセス制御の管理、クラスタリソースを論理的に名前付けられたグループに分割する手段が提供されます。これは特に、クラスタを複数のチームやプロジェクトで共有する場合に便利です。
Namespaceの使用にはいくつかの利点があります。まず、大規模なクラスタでのリソースの割り当てと使用状況の管理を支援します。また、プロセスを分離することで、1つのNamespace内のプロセスが別のNamespace内のプロセスに干渉しないようにします。これは、多くのユーザーやチームが1つのKubernetesクラスタを共有するマルチテナント環境で特に有用です。
Namespaceの作成
Minikubeの起動
Namespaceを作成する前に、Kubernetesクラスタが実行されていることを確認する必要があります。ローカルでKubernetesを実行するためのツールであるMinikubeは、次のコマンドで起動できます。
$ minikube start
このコマンドを実行すると、Minikubeは仮想マシンを起動し、その上に単一ノードのKubernetesクラスタをインストールします。
現在のNamespaceの確認
新しいNamespaceを生成する前に、クラスタ内の現在のNamespaceを特定する必要があります。次のコマンドを実行することで確認できます。
$ kubectl get namespace
NAME STATUS AGE
default Active 8h
kube-node-lease Active 8h
kube-public Active 8h
kube-system Active 8h
このコマンドを実行すると、クラスタ内の全ての既存のNamespaceのリストが表示されます。
新しいNamespaceの作成: staging
既存のNamespaceを把握したら、新しいNamespaceを作成する準備が整いました。kubectl create namespace
コマンドに続けてNamespaceの名前を指定することで、新しいNamespaceを作成できます。staging
という名前のNamespaceを作成するには、次のコマンドを使用します。
$ kubectl create namespace staging
namespace/staging created
上記のコマンドにより、クラスタにstaging
という名前の新しいNamespaceが作成されます。
Namespace内でアプリケーションをデプロイ
アプリケーションの実行
Namespaceが確立されたら、そのNamespace内にアプリケーションをデプロイすることができます。この例では、helloworld
というサンプルアプリケーションをデプロイします。
次のコマンドを使用して、kubectl run
コマンドを実行してデプロイを行います。
$ kubectl run \
--image gcr.io/google-samples/hello-app:1.0 \
--restart Never \
--namespace staging \
helloworld
pod/helloworld created
このコマンドを実行すると、staging
Namespace内にhelloworld
アプリケーションの新しいデプロイが開始されます。
stagingでのデプロイの確認
次のコマンドにより、staging
Namespace内で実行中の全てのPodがリストされ、helloworld
アプリケーションのデプロイが成功したかどうかが確認できます。
$ kubectl get pod --namespace staging
NAME READY STATUS RESTARTS AGE
helloworld 1/1 Running 0 14s
default
Namespaceでは何も表示されないため、Podが作成されていないことがわかります。
$ kubectl get pod --namespace default
No resources found in default namespace.
Namespaceの削除
特定のNamespaceが不要になった場合は、削除することができます。Kubernetesでは、kubectl delete namespace
コマンドに続けてNamespaceの名前を指定することで、削除できます。例えば、staging
Namespaceを削除するには、次のコマンドを使用します。
$ kubectl delete namespace staging
namespace "staging" deleted
Namespaceを削除すると、そのNamespace内の全てのリソースも削除されます。したがって、この操作を実行する前に、重要なデータやアプリケーションを安全にバックアップしたり、別のNamespaceに移動したりする必要があります。staging
Namespaceが削除されると、このNamespace内で実行されていたhelloworld
アプリケーションの全てのPodも削除されます。