DevOps
CICD
K8s
Docker
Create a Pod
as follows:
Name: jenkins
Using image: jenkins
In a new Kubernetes namespace
named website-frontend
這題出現了一個新名詞namespace
,那麼namespace
是甚麼呢?
namespace
其實就是實現資源隔離的方式,不同的namespaces
的物件無法互相存取。透過namespace
,邏輯上將不同專案、團隊或使用者分群。
K8s
預設存在的 namespace
有三個:
K8s
集群建立時自動創建,一般對K8s
物件的操作都在default namespace中完成K8s
在集群建立時會為了某些目的創建一系列的Pod
和Service
,例如weave net CNI、DNS Service等,通常是一些維持集群運作的重要物件。為了預防這些物件不小心被使用者刪除或更改導致集群毀損,必須將這些物件獨立於其它物件,因此會將這些物件放置於kube-system
這個namespace
之下namespace
也是由K8s
自動創建,當有些resources需要讓所有user都能access到時,會利用此namespace
namespace
的用武之地在於大型的應用場景,像是一間公司、一個產品開發等,你可能想區隔不同部門或不同階段的開發有不同的資源,那就可以透過assign不同namespace
的資源數量來達到。
剛才我們說到不同的namespaces
的物件無法互相存取,其實這個說法不太精確,它們還是可以透過DNS互相存取的,只是方法不太一樣,舉例來說:
有兩個namespace
: default和database,mess-pod可以透過host name直接存取到相同namespace
的web-service: mysql.connect("web-service")
;若要存取到database namespace中的db-service則無法直接存取,需要透過: mysql.connect("db-service.database.svc.cluster.local")
。下面講解一下這些欄位代表的意義:
cluster.local
:default domain name of kubernetes clustersvc
:sub-domain of servicedatabase
:namespacedb-service
:service name相關namespace
指令如下:
## 查看<namespace-name>下的pod
$ kubectl get po --namespace=<namespace-name>
$ kubectl get po -n <namespace-name>
## 創建namespace
$ kubectl create ns <namespace-name>
## 查看所有namespace下的pod
$ kubectl get po -A
回到這題,這題其實很簡單,步驟如下:
namespace
namespace
下創立Pod
$ kubectl create ns website-frontend
$ kubectl run jenkins --image=jenkins --restart=Never --dry-run=client -o yaml > q4.yaml
$ kubectl apply -f q4.yaml -n website-frontend
今天這題也不難,主要是帶入namespace
的概念,其實namespace
不是K8s
獨有的機制,其他很多地方也能見到,所以有概念的朋友應該很快就能了解了。好啦,今天就到這囉~ 謝謝大家~
You can find me on