「世の中には難しいことが多い!」と感じることが多い私が、様々な用語を、初学者向けにわかりやすく全力で解説します。
今回解説する用語
KubernetesにおけるNamespaceについて解説をします。私はNamespaceについて公式ドキュメントを読んでみてもピンときませんでした。そのような方に向けて、できるだけ分かりやすく解説をします。
Namespace(名前空間)とは?
Namespaceとは、Kubernetesで管理するリソースに名前を付けて、グルーピングすることが出来る設定方法です。別の名前が付けられたそれぞれのグループは干渉しあいません。つまり、Namespaceを設定することで、Namespaceの名前ごとに分離した環境を作成することが出来ます。
具体的に説明するよ
Namespaceについて、詳細に説明をしていきます。Namespaceを理解するために必要なことを一つ一つ解説していきますので、知っている場合は適宜読み飛ばしてください。
Kubernetesとは?
Kubernetes(クバネテェス)とは、複数のコンテナを管理するための技術です。Kubernetsには様々なリソースがあり、このリソースたちがコンテナを管理してくれます。
例えば、Podへの通信を振り分けてくれる、Service(サービス)や
Podの数を管理するReplicaSet、デプロイ関連を管理してくれるDeploymentなどがあります。
ServiceやDeploymentなどをKubernetesリソースと呼びます。Kubernetesを使用すると、ユーザーは様々なKubernetesのリソースを作成して、コンテナを管理することが出来るのです。
もっと詳しく知りたい方は以下の記事を読んでみてください。
Namespaceを使用するとどうなるのか?
ある時、作成したシステムが順調に使われてきたので、もっといろいろな機能を追加することになりました。
しかし、すでに稼働しているKubernetesのリソースたちを修正すると何かあったときに困ります。
例えば、本番環境で障害が発生し、「開発環境で調査したい!」となったとしても、開発のためにKubernetesのリソースの内容を変更してしまっていては調査が進みません。
他にも、複数人で開発をする際にみんながKubernetesリソースを変更していると、なにがなんだか分からなくなる可能性があります。
そこでNamespaceの出番です!
Namespaceを使用するとKubernetesのリソースに名前を付けることが出来ます。同じ名前のものはグルーピングされ、同じ名前のリソース同士で稼働します。
例えば、「グリフィンドール」という名前を付けることで、グリフィンドールのKubernetesリソース同士で稼働します。
逆に、異なる名前がついているリソースは干渉しあいません。これにより、複数の分離した環境を作ることが出来るので、複数人で開発がしやすくなるのです。
例えば、Namespaceに「グリフィンドール」と名前を付けた環境を本番環境としてそのままにして、「ハッフルパフ」という名前の環境で開発を進めることも出来ます。
Podもグリフィンドールとハッフルパフそれぞれに作成されます。
このようにNamespaceを付けることにより、複数人での開発などを効率的に行うことが出来ます。わざわざ別の環境を用意してKubernetesリソースを作成して開発をする、、などをする必要はなくなります。
しかし、小規模開発などの場合は無理に使用しなくてもOKです。Namespaceを使用しないからと言って不具合が発生することはありません。
Kubernetesリソースはdefaultで設定されている
Namespaceを指定しない場合は、KubernetesリソースはdefaultのNamespaceに設定されています。
以下のコマンドでNamespaceを確認することが出来ます。
kubectl get namespace
実行結果として、以下のようにdefaultのNamespaceが作成されているはずです。
NAME STATUS AGE
default Active 1d
kube-node-lease Active 1d
kube-system Active 1d
kube-public Active 1d
Namespaceの作り方
以下のコマンドでNamespaceを作成することが出来ます。
kubectl create namespace [Namespaceの名前]
例えば以下のコマンドを実行するとします、
kubectl create namespace testnamespace
そうすると、testnamespaceというNamespaceが作成されます。getコマンドで確認してみてください。
kubectl get namespace
NAME STATUS AGE
testnamespace Active 1d
default Active 2d
kube-node-lease Active 2d
kube-system Active 2d
kube-public Active 2d
このようにしてNamespaceを作成することが出来ます。しかし、これはあくまでNamespaceを作成する手順です。この後にKubernetesリソースを作成する際に、作成したNamespace名を指定することでリソースをグルーピングしていくことが出来ます。
まとめ
Namespaceとは、Kubernetesリソースをグループに分けて、複数の環境を分けて作ることが出来る設定方法のことです。