Kubernetes CORE CONCEPTS - NAMESPACES
Namespaceとは
Kubernetesでは同一の物理クラスター上で複数の仮想クラスターの動作をサポート(DNSのネットワークのソリューション等)しており、この仮想クラスターをNamespaceと呼ぶ。
Podのセット、クラスターを作ると自動でデフォルトのNamespaceが作成される。
Kubernetesの起動時には4つの初期Namespaceが作成される。
default
他にNamespaceを持っていないオブジェクトのためのデフォルトNamespacekube-system
Kubernetesシステムによって作成されたオブジェクトのためのNamespacekube-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の指定はフルパスを使用。
教材はこちら>>>