はじめに
Kubernete(以降K8s)では「クラスター」と「名前空間(ネームスペース)」が似たような意味で利用されるケースがあり、初学者の人が困惑する場合があります。
本記事ではそれらの違いを適宜コマンドを押下しながら分かりやすく説明しました。
コマンド実行環境
- Windows 10 Enterprise
- Docker Desktop 2.2.0
Clusterとは?
クラスターとはNode群を管理するMasterNode(≒API Server)の情報を指しています。
KubernetesではコンテナをアプリケーションとしてWokerNodeの上で起動させますが、その時に具体的なWokerNode(サーバ)を指定するのではなくクラスターであるMasterNodeを指定することで、MasterNodeが管理下においているWokerNodeを選定してコンテナをデプロイします。
この接続先であるClusterをコマンドで確認する場合は、config get-clusters
と打つことでconfigファイルの中に格納されている接続先クラスター情報が表示されます。
$ kubectl config get-clusters NAME xx/xx xx/xx ...
現在の接続先になっているクラスター情報の詳細はcluster-info
でも確認可能。
> kubectl cluster-info Kubernetes master is running at https://kubernetes.docker.internal:6443 KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
というわけで、分かりやすく考えるのであれば、Kubernetesを利用するユーザがkubectlコマンドを発行する接続先がクラスターとなります。
ちなみに「コンテキスト」は「クラスター&ユーザ」です。同一クラスターでも接続ユーザが異なればそれは異なるコンテキストとして扱われます。
> kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * docker-desktop docker-desktop docker-desktop
名前空間とは?
上記のクラスターですが、1つのK8sクラスタを複数チームで独立に利用したい場合があります。
そのような場合に分けるのが「Namespace(名前空間)」。
本用語はもともとはコンテナの世界での用語ですが、それがそのままKubernetesの用語にもなっています。
kubectlコマンドを利用すれば以下のように接続先クラスター上で作成済のNamespaceの一覧が表示でき
> kubectl get namespace NAME STATUS AGE default Active xd docker Active xd kube-node-lease Active xd kube-public Active xd kube-system Active xd kubernetes-dashboard Active xd
例えばそれぞれのサービスがどの名前空間に属しているかは以下コマンドで確認できます。
> kubectl get sa --all-namespaces=true
Namespaceが割り当てられていないリソースにはNamespaceが「default」と表示されます。
終わりに
クラスターはコンテナをデプロイする際に指定する情報でそれらはノード群として物理的な情報を指し、名前空間は同一クラスターを論理的に分けるための情報を指します。
さらにクラスターとユーザをセットで扱う情報がコンテキストです。
ややこしい言葉ですが、それぞれが持つ言葉のイメージが本記事で掴める方がいれば幸いです。