(O+P)ut

アウトプット



(O+P)ut

Output Log

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

スポンサーリンク

はじめに

Kubernete(以降K8s)では「クラスター」「名前空間(ネームスペース)」が似たような意味で利用されるのでこんがらがります。

本記事ではそれらの違いを適宜コマンドを押下しながら分かりやすく説明しました。

コマンド実行環境
  • Windows 10 Enterprise
  • Docker Desktop 2.2.0

Clusterとは?

K8sクラスターとはコンテナ群の一単位で、我々はアプリケーションの展開先に具体的なサーバを指定するのではなくクラスターを指定することでデプロイします。

K8sではマスターノードがクラスターを管理するので、マスターノード(apiserver)がクラスターと同義のように扱われたりします。例えばMinikubeは1つのノードのみで構成されるクラスターです。

コマンドにてconfig get-clustersと打てばconfigの設定で指定されている接続先クラスター情報が確認できます。

> kubectl config get-clusters                             NAME
docker-desktop

詳細は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'.

上記のようなDockerDesktopやMinikubeといったローカル端末でK8sを利用している場合はマスターノード=クラスター のように見えます

> kubectl get nodes
NAME             STATUS   ROLES    AGE   VERSION
docker-desktop   Ready    master   72d   v1.15.5

実体はノード群をまとめたものがクラスターです。

ちなみに「コンテキスト」は「クラスター&ユーザ」です。同一クラスターでも接続ユーザが異なればそれは異なるコンテキストとして扱われます。

> kubectl config get-contexts                             CURRENT   NAME                 CLUSTER          AUTHINFO         NAMESPACE
*         docker-desktop       docker-desktop   docker-desktop
          docker-for-desktop   docker-desktop   docker-desktop

名前空間とは?

上記のクラスターですが、1つのK8sクラスタを複数チームで独立に利用したい場合があります。
そのような場合に分けるのが「Namespace」です。

ちなみに本用語はコンテナの世界でも登場します。

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

まとめ

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

さらにクラスターとユーザをセットで扱う情報がコンテキストです。

ややこしい言葉ですが、それぞれが持つ言葉のイメージが本記事で掴める方がいれば幸いです。


他の記事を読む