K8S命名空間

一、簡介

Kubernetes 支持多個虛擬集羣,它們底層依賴於同一個物理集羣。這些虛擬集羣被稱爲命名空間。node

二、如何使用命名空間

  • 命名空間適用於存在不少跨多個團隊或項目的用戶的場景。對於只有幾到幾十個用戶的集羣,根本不須要建立或考慮命名空間。當須要名稱空間提供的功能時,請開始使用它們。nginx

  • 命名空間爲名稱提供了一個範圍。資源的名稱須要在命名空間內是惟一的,但不能跨命名空間。命名空間不能相互嵌套,每一個 Kubernetes 資源只能在一個命名空間中。web

  • 命名空間是在多個用戶之間劃分集羣資源的一種方法(經過資源配額)。shell

  • 在 Kubernetes 將來版本中,相同命名空間中的對象默認將具備相同的訪問控制策略。centos

  • 不須要使用多個命名空間來分隔輕微不一樣的資源,例如同一軟件的不一樣版本:使用 labels 來區分同一命名空間中的不一樣資源。api

三、列出集羣中的當前名稱空間

 [root@k8s-001 k8s]# kubectl get namespaces
 NAME             STATUS   AGE
 default           Active   8h
 kube-node-lease   Active   8h
 kube-public       Active   8h
 kube-system       Active   8h

四、Kubernetes三個初始名稱空間

  • default 沒有其餘名稱空間的對象的默認名稱空間。微信

  • kube-system Kubernetes系統建立的對象的名稱空間。app

  • kube-public該名稱空間是自動建立的,而且對全部用戶(包括未經身份驗證的用戶)可讀。此名稱空間主要保留給集羣使用,以防某些資源在整個集羣中公開可見。此名稱空間的公共方面僅是約定,不是要求。運維

五、獲取默認名稱空間的信息

 [root@k8s-001 k8s]# kubectl get namespaces default
 NAME     STATUS   AGE
 default   Active   3h53m
 
 # 或者使用
 [root@k8s-001 k8s]# kubectl describe namespaces default
 Name:         default
 Labels:       <none>
 Annotations: <none>
 Status:       Active
 No resource quota.
 No LimitRange resource.

六、建立Namespace

 [root@k8s-001 k8s]# cat name-server.yaml 
 apiVersion: v1
 kind: Namespace
 metadata:
   name: ywm
   labels:
     name: ywm
     
 [root@k8s-001 k8s]# kubectl apply -f name-server.yaml 
 namespace/ywm created
 
 [root@k8s-001 k8s]# kubectl get namespaces
 ywm                   Active   3m22s

七、在指定名稱空間上部署應用

 [root@k8s-001 k8s]# kubectl create deployment --image nginx demo-nginx --namespace=ywm
 deployment.apps/demo-nginx created
 [root@k8s-001 k8s]# kubectl describe deployment demo-nginx --namespace=ywm |grep Namespace
 Namespace:             ywm

八、設置Context選擇命名空間

1.默認命名空間

 [root@k8s-001 ~]# kubectl config get-contexts
 CURRENT   NAME                         CLUSTER     AUTHINFO           NAMESPACE
 *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
 # 上圖說明咱們使用了一個名爲Default的context,context沒有指定命名空間,所以使用了默認命名空間

2.想要將該context使用的命名空間修改爲ywm,咱們輸入

 [root@k8s-001 ~]# kubectl config set-context $(kubectl config current-context) --namespace=ywm
 Context "kubernetes-admin@kubernetes"modified.

3.查看context配置來驗證當前是否選擇了ywm

 [root@k8s-001 ~]# kubectl config get-contexts
 CURRENT   NAME                         CLUSTER     AUTHINFO           NAMESPACE
 *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   ywm

4.驗證咱們的kubectl describe命令如今默認使用demo-namespace,它會請求咱們的demo-nginx部署而不須要指定命名空間

 [root@k8s-001 ~]# kubectl describe deployment demo-nginx|grep Namespace
 Namespace:             ywm

九、刪除命名空間並清理

刪除命名空間這一功能很是強大,由於它不只刪除命名空間,還會清理其中部署了的全部資源。這一功能很是方便,可是同時若是你一不當心,也會很是危險ide

1.在刪除以前,最好列出和命名空間相關的資源,肯定想要刪除的對象

 [root@k8s-001 ~]# kubectl get all --namespace=ywm
 NAME                             READY   STATUS   RESTARTS   AGE
 pod/demo-nginx-5595f574b7-dg5gq   1/1     Running   0        88m
 
 NAME                   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)       AGE
 service/nginx-service   NodePort   10.96.90.242   <none>        80:32601/TCP   121m
 
 NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
 deployment.apps/demo-nginx   1/1     1           1          88m
 
 NAME                                   DESIRED   CURRENT   READY   AGE
 replicaset.apps/demo-nginx-5595f574b7   1        1        1      88m

2.一旦肯定了要操做的範圍,能夠輸入下面的命令刪除demo-namespace命名空間和其中的全部資源

 [root@k8s-001 ~]# kubectl delete namespace ywm
 namespace "ywm"deleted

3.命名空間及其資源將從集羣中刪除

 [root@k8s-001 ~]# kubectl get namespace
 NAME                   STATUS   AGE
 default               Active   6h14m
 kube-node-lease       Active   6h14m
 kube-public           Active   6h14m
 kube-system           Active   6h14m
 kubernetes-dashboard   Active   5h57m

十、初始化命名空間

1.若是你以前在kubectl上下文中更改了所選的命名空間,那麼輸入下面的命令清除所選的命名空間

 [root@k8s-001 ~]# kubectl config set-context $(kubectl config current-context) --namespace=
 Context "kubernetes-admin@kubernetes"modified.

2.在清理demo資源時,請記住刪除咱們最初提供給默認命名空間的原始demo-nginx部署

 [root@k8s-001 ~]# kubectl delete deployment demo-nginx
 Error from server (NotFound): deployments.apps "demo-nginx"not found
 [root@k8s-001 ~]# kubectl get deployment 
 No resources found indefault namespace.

如今你的集羣應該處於一開始的狀態了

若是文章有任何錯誤歡迎不吝賜教,其次你們有任何關於運維的疑難雜問,也歡迎和你們一塊兒交流討論。關於運維學習、分享、交流,筆者開通了微信公衆號【運維貓】,感興趣的朋友能夠關注下,歡迎加入,創建屬於咱們本身的小圈子,一塊兒學運維知識。羣主還經營一家Orchis飾品店,喜歡的小夥伴歡迎👏前來下單。



掃描二維碼

獲取更多精彩

運維貓公衆號


有須要技術交流的小夥伴能夠加我微信,期待與你們共同成長,本人微信:


掃描二維碼

添加私人微信

運維貓博主


掃碼加微信

最近有一些星友諮詢我知識星球的事,我也想繼續在星球上發佈更優質的內容供你們學習和探討。運維貓公衆號平臺致力於爲你們提供免費的學習資源,知識星球主要致力於即將入坑或者已經入坑的運維行業的小夥伴。


點擊閱讀原文  查看更多精彩內容!!!


本文分享自微信公衆號 - 運維貓(centos15)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索