はじめに
Kubernete(以降K8s)では「クラスター」「名前空間(ネームスペース)」が似たような意味で利用されるのでこんがらがります。
本記事ではそれらの違いを適宜コマンドを押下しながら分かりやすく説明しました。
コマンド実行環境
- Windows 10 Enterprise
- Docker Desktop 2.2.0
Clusterとは?
K8sクラスターとはNode群を管理するMasterサーバの情報を指し、我々はアプリケーションの展開先に具体的なサーバを指定するのではなくクラスターを指定することでコンテナをデプロイします。
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」と表示されます。
まとめ
クラスターはコンテナをデプロイする際に指定する情報でそれらはノード群として物理的な情報を指し、名前空間は同一クラスターを論理的に分けるための情報を指します。
さらにクラスターとユーザをセットで扱う情報がコンテキストです。
ややこしい言葉ですが、それぞれが持つ言葉のイメージが本記事で掴める方がいれば幸いです。