Traffine I/O

日本語

2022-07-10

KubernetesのNamespace

KubernetesのNamespaceとは

Kubernetesにおいて、Namespaceは同じ物理クラスタ内で複数の仮想クラスタを存在させるための高レベルの抽象化です。Namespaceは、クラスタリソースを複数のユーザーやチーム間で分割するための仕組みです。Namespaceは名前のスコープを提供し、同じクラスタ内でリソースを管理し分離することを容易にします。

Namespaceの目的と利点

NamespaceはKubernetesクラスタでさまざまな目的に使用されます。Namespaceを使用することで、リソースのパーティション分割、アクセス制御の管理、クラスタリソースを論理的に名前付けられたグループに分割する手段が提供されます。これは特に、クラスタを複数のチームやプロジェクトで共有する場合に便利です。

Namespaceの使用にはいくつかの利点があります。まず、大規模なクラスタでのリソースの割り当てと使用状況の管理を支援します。また、プロセスを分離することで、1つのNamespace内のプロセスが別のNamespace内のプロセスに干渉しないようにします。これは、多くのユーザーやチームが1つのKubernetesクラスタを共有するマルチテナント環境で特に有用です。

Namespaceの作成

Minikubeの起動

Namespaceを作成する前に、Kubernetesクラスタが実行されていることを確認する必要があります。ローカルでKubernetesを実行するためのツールであるMinikubeは、次のコマンドで起動できます。

bash
$ minikube start

このコマンドを実行すると、Minikubeは仮想マシンを起動し、その上に単一ノードのKubernetesクラスタをインストールします。

現在のNamespaceの確認

新しいNamespaceを生成する前に、クラスタ内の現在のNamespaceを特定する必要があります。次のコマンドを実行することで確認できます。

bash
$ 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を作成するには、次のコマンドを使用します。

bash
$ kubectl create namespace staging

namespace/staging created

上記のコマンドにより、クラスタにstagingという名前の新しいNamespaceが作成されます。

Namespace内でアプリケーションをデプロイ

アプリケーションの実行

Namespaceが確立されたら、そのNamespace内にアプリケーションをデプロイすることができます。この例では、helloworldというサンプルアプリケーションをデプロイします。

次のコマンドを使用して、kubectl runコマンドを実行してデプロイを行います。

bash
$ kubectl run \
    --image gcr.io/google-samples/hello-app:1.0 \
    --restart Never \
    --namespace staging \
    helloworld

pod/helloworld created

このコマンドを実行すると、stagingNamespace内にhelloworldアプリケーションの新しいデプロイが開始されます。

stagingでのデプロイの確認

次のコマンドにより、stagingNamespace内で実行中の全てのPodがリストされ、helloworldアプリケーションのデプロイが成功したかどうかが確認できます。

bash
$ kubectl get pod --namespace staging

NAME         READY   STATUS    RESTARTS   AGE
helloworld   1/1     Running   0          14s

defaultNamespaceでは何も表示されないため、Podが作成されていないことがわかります。

bash
$ kubectl get pod --namespace default

No resources found in default namespace.

Namespaceの削除

特定のNamespaceが不要になった場合は、削除することができます。Kubernetesでは、kubectl delete namespaceコマンドに続けてNamespaceの名前を指定することで、削除できます。例えば、staging Namespaceを削除するには、次のコマンドを使用します。

bash
$ kubectl delete namespace staging

namespace "staging" deleted

Namespaceを削除すると、そのNamespace内の全てのリソースも削除されます。したがって、この操作を実行する前に、重要なデータやアプリケーションを安全にバックアップしたり、別のNamespaceに移動したりする必要があります。staging Namespaceが削除されると、このNamespace内で実行されていたhelloworldアプリケーションの全てのPodも削除されます。

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!