Kubernetes CORE CONCEPTS - NAMESPACES

Namespaceとは

Kubernetesでは同一の物理クラスター上で複数の仮想クラスターの動作をサポート(DNSのネットワークのソリューション等)しており、この仮想クラスターをNamespaceと呼ぶ。

Podのセット、クラスターを作ると自動でデフォルトのNamespaceが作成される。

 

Kubernetesの起動時には4つの初期Namespaceが作成される。

  • default 他にNamespaceを持っていないオブジェクトのためのデフォルトNamespace
  • kube-system Kubernetesシステムによって作成されたオブジェクトのためのNamespace
  • kube-public このNamespaceは自動的に作成され、全てのユーザーから読み取り可能です。(認証されていないユーザーも含みます。) このNamespaceは、リソースをクラスター全体を通じてパブリックに表示・読み取り可能にするため、ほとんどクラスターによって使用される用途で予約される。 このNamespaceのパブリックな側面は単なる慣例であり、要件ではない。
  • kube-node-lease クラスターのスケールに応じたノードハートビートのパフォーマンスを向上させる各ノードに関連したLeaseオブジェクトのためのNamespace。

 

公式サイトでチェック>>> Namespace(名前空間)

 

Namespaceをデフォルトではなく名前を指定して作成する事も出来る。

たとえば、開発環境(例dev)と本番環境の両方で同じクラスターを使用したいが、 同時にそれらの間のリソースを分離し、それらごとに異なるNamespaceを作成できる。

 

どのタイミングでNamespaceが作成されるか?

 

Kubectl create -f pod-definition.yml でpodを作成したらデフォルトのNamespaceにpodが作成される。

 

Namespaceを指定してpodを作成する場合は

Kubectl create -f pod-definition.yml --namespace=dev

 

Podを毎回作成する場合にNamespaceを指定しない場合はpodのdefinitionファイルで、"metadata:"配下に"namespace:"を記入。

 

接続方法は?

 

デフォルトのWeb podから同じクラスタ内のデータベースに接続する場合mysql.connect(“db-service”)

デフォルトのWeb podからdevのデータベースに接続する場合

mysql.connect(“db-service.dev.svc.cluster.local”)

 

Namespaceに関するコマンド

 

kubectl get namespaces/ns 幾つNamespaceがあるか

以下の場合10個ある

 

kubectl get pods

kubectl get pods --namespace/-n=<namespace-name>

特定のNamespaceにPodが幾つあるか

デフォルトではデフォルトのNamespaceに入っている為、他のNamespaceのpod一覧を取得するにはその表示したいデフォルト以外のNamespace名を指定する必要がある。

 

デフォルトで入るNamespaceを変えたい場合(例dev)は以下でコンフィグを修正

kubectl config set-context $(kubectl config current-context) --namespace=dev

このコマンドは、最初に現在のコンテキストを識別し($のカッコ内)てから変更内容を識別して設定する。 コンテキストとは、同じ管理から複数の環境で複数のクラスターを管理するために使用される。

 

デフォルトで入るNamespaceを他に変えた場合、デフォルトのpod一覧を取得する為には、もちろんdefaultを指定。

kubectl get pods -n=default

 

kubectl run <name> --image=<image-name> -n=<namespace-name>
以下名前を指定してPodを作成する場合

  • Namespace: finance
  • Name: redis
  • Image Name: redis

 

kubectl get pods --all-namespaces 

kubectl get pods -A

NamespaceとPodが紐づけられた一覧を表示(すべてのpodが表示される)

 

blueアプリケーションがdatabase "db-service"にアクセスするにはどのDNS名とPortを使用すれば良いか?

→ "db-service.dev.svc.cluster.local" とport 6379 

 

以下の場合、db-serviceはmarketing とdevのNamespaceに使われているので、Namespaceの指定はフルパスを使用。

 

 

教材はこちら>>>

www.udemy.com