1. 程式人生 > >Kubernetes筆記(四):詳解Namespace與資源限制ResourceQuota,LimitRange

Kubernetes筆記(四):詳解Namespace與資源限制ResourceQuota,LimitRange

前面我們對K8s的基本元件與概念有了個大致的印象,並且基於K8s實現了一個初步的CI/CD流程,但對裡面涉及的各個物件(如Namespace, Pod, Deployment, Service, Ingress, PVC等)及各物件的管理可能還缺乏深入的理解與實踐,接下來的文章就讓我們一起深入K8s的各元件內部來一探究竟吧。下圖是基於個人的理解梳理的一個K8s結構圖,示例了各個元件(只包含了主要元件)如何協同。 ![k8s-struct](https://img2020.cnblogs.com/other/632381/202006/632381-20200603103015299-162772520.png) 後續幾篇文章圍繞該圖涉及元件進行整理介紹,本文主要探究Namespace及與Namespace管理相關的資源限制ResourceQuota/LimitRange部分。 ## Namespace ### 理解 Namespace即名稱空間,主要有兩個方面的作用: 1. 資源隔離:可為不同的團隊/使用者(或專案)提供虛擬的叢集空間,共享同一個Kubernetes叢集的資源。比如可以為團隊A建立一個Namespace ns-a,團隊A的專案都部署執行在 ns-a 中,團隊B建立另一個Namespace ns-b,其專案都部署執行在 ns-b 中,或者為開發、測試、生產環境建立不同的Namespace,以做到彼此之間相互隔離,互不影響。我們可以使用 ResourceQuota 與 Resource LimitRange 來指定與限制 各個namesapce的資源分配與使用 2. 許可權控制:可以指定某個namespace哪些使用者可以訪問,哪些使用者不能訪問 Kubernetes 安裝成功後,預設會建立三個namespace: * default:預設的namespace,如果建立Kubernetes物件時不指定 metadata.namespace,該物件將在default namespace下建立 * kube-system:Kubernetes系統建立的物件放在此namespace下,我們前面說的kube-apiserver,etcd,kube-proxy等都在該namespace下 * kube-public:顧名思義,共享的namespace,所有使用者對該namespace都是可讀的。主要是為叢集做預留,一般都不在該namespace下建立物件 ### 實踐 1.檢視namesapce ```shell kubectl get namespaces kubectl get namesapce kubectl get ns # 三個操作等效 kubectl get ns --show-labels # 顯示namespace的label ``` 使用namesapces,namesapce,ns都是可以的。如下列出了當前叢集中的所有namespace ```shell [root@kmaster ~]# kubectl get ns NAME STATUS AGE default Active 34d develop Active 17d ingress-nginx Active 33d kube-node-lease Active 34d kube-public Active 34d kube-system Active 34d kubernetes-dashboard Active 31d pre-release Active 17d ``` 可以使用 `kubectl describe` 命令來檢視某個namespace的概要資訊,如 ```shell [root@kmaster ~]# kubectl describe ns default Name: default Labels