在學(xué)習(xí)本節(jié)內(nèi)容前瘦陈,希望你已經(jīng)對(duì)Kubernetes對(duì)象的Names有了基本的了解,具體請(qǐng)參考這篇文章:
Namespace類似于Linux系統(tǒng)中用戶的概念,通過(guò)將系統(tǒng)內(nèi)部的對(duì)象分配到不同的Namespace中,形成邏輯上的分,便于不同的分組在共享集群資源的同時(shí)還能被分別管理姥芥。同一Namespace下的Kubenetes對(duì)象的Name必須唯一。
常見(jiàn)的 pod, service, replication controller 和 deployment 等都是屬于某一個(gè) namespace 的(默認(rèn)是 default)汇鞭,而 node, persistent volume凉唐,namespace 等資源則不屬于任何 namespace。
1. Namespace操作
1.1 查看
$ kubectl get namespaces
NAME STATUS AGE
default Active 1d
kube-system Active 1d
kube-public Active 1d
通過(guò)上述命令霍骄,可以查看到Kubernetes為我們初始化的三個(gè)Namespace:
- default:所有未指定Namespace的對(duì)象都會(huì)被分配在default命名空間台囱。
- kube-system:所有由Kubernetes系統(tǒng)創(chuàng)建的資源都處于這個(gè)命名空間。
- kube-public:此命名空間下的資源可以被所有人訪問(wèn)(包括未認(rèn)證用戶)读整。
1.2 設(shè)置Namespace
通過(guò)--namespace
參數(shù)可以在一條命令中指定Namespace簿训,只對(duì)單條命令有效。
$ kubectl --namespace=<insert-namespace-name-here> run nginx --image=nginx
$ kubectl --namespace=<insert-namespace-name-here> get pods
還可以綁定一個(gè)Namespace到特定的上下文米间,這樣在此上下文中執(zhí)行的kubectl命令都處于綁定的Namespace下强品。
$ kubectl config set-context $(kubectl config current-context) --namespace=<insert-namespace-name-here>
# Validate it
$ kubectl config view | grep namespace:
1.3 Namespace和DNS
當(dāng)你創(chuàng)建一個(gè)Service時(shí),Kubernetes會(huì)自動(dòng)創(chuàng)建一個(gè)形如<service-name>.<namespace-name>.svc.cluster.local
的DNS項(xiàng)屈糊。如果集群中另一個(gè)服務(wù)調(diào)用這個(gè)服務(wù)時(shí)的榛,僅僅指定了<service-name>
,那么Kubernetes會(huì)使用調(diào)用方所在的Namespace將<service-name>
補(bǔ)全逻锐。因此如果調(diào)用方和被調(diào)用方不處于同一個(gè)Namespace夫晌,你必須使用包含Namespace的service name(fully qualified domain name (FQDN))。
參考文章
https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/