(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes入門】クラスターと名前空間の違い

スポンサーリンク

はじめに

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」と表示されます。

終わりに

クラスターはコンテナをデプロイする際に指定する情報でそれらはノード群として物理的な情報を指し、名前空間は同一クラスターを論理的に分けるための情報を指します。

さらにクラスターとユーザをセットで扱う情報がコンテキストです。
ややこしい言葉ですが、それぞれが持つ言葉のイメージが本記事で掴める方がいれば幸いです。