kubernetes中的大部分概念,如Node、Pod、Replication Controller、Service等都可以看做是一種 “資源對象”,幾乎所有的資源對象都可以通過kubectl工具(或者API接口)來實現增、刪、改、查等操作,並將其保存在etcd中進行持久化存儲,從這個角度來看,kubernetes其實是一個高度自動化的資源控制系統,它通過對比etcd庫里保存的 “資源期望狀態”與當前環境中的“實際資源狀態”的差異來實現自動控制和自動糾錯。
在介紹資源對象之前,我們先了解一下kubernetes集群中的兩種管理角色:Master和Node
1.Master
kubernetes中的master指的是集群控制節點,每個kubernetes集群里都需要有一個Master節點來負責整個集群的管理和控制,基本上kubernetes的所有控制命令都發給它,它來負責具體的執行過程。Master節點通常會占據一個獨立的服務器(高可用建議用3台服務器),主要原因就是他太重要了,是整個集群的“首腦”。
Master節點上運行着以下關鍵進程:
- kubernetes API Server(kube-apiserver):提供了HTTP Rest接口的關鍵服務進程,是kubernetes里所有資源的增、刪、改、查等操作的唯一入口,也是集群控制的入口進程
- kubernetes Controller Manager(kube-controller-manager):kubernetes里所有資源對象的自動化控制中心,可以理解為資源對象的 “大總管”
- kubernetes Scheduler(kube-scheduler):負責資源調度(pod調度)的進程,相當於公交公司的 “調度室”
另外,在master節點上還需要啟動一個etcd服務,因為kubernetes里的所有資源對象的數據都是保存在etcd里的
2.Node
除了master,kubernetes集群中的其他機器被稱為Node節點,在較早的版本中也被稱為minion。與master一樣,Node可以是物理機也可以是虛擬機,Node節點才是kubernetes集群中的工作負載節點,每個Node節點都會被master分配一些工作負載(docker容器)。
每個Node節點上都運行着以下關鍵進程:
- kubelet:負責Pod對應的容器的創建、啟停等任務,同時與master節點密切協作,實現集群管理的基本功能
- kube-proxy:實現kubernetes Service的通信與負載均衡機制的重要組件
- Docker Engine(docker):Docker引擎,負責本機的容器創建和管理工作
Node節點可以在運行期間動態增加到kubernetes集群中,前提是這個節點上已經正確安裝、配置和啟動了以上關鍵進程。在默認情況下,kubelet會向master注冊自己,這也是官方所推薦的Node管理方式。一旦Node被納入集群管理范圍,kubelet進程就會定時向master節點匯報自身情況,例如操作系統、docker版本、CPU和內存情況,以及當前有哪些Pod在運行等,這樣master就可以知道每個Node的資源使用情況,並實現高效均衡的資源調度策略,長時間失聯的Node會被標記為不可用 “Not ready”,隨后master會觸發 “負載轉移”的自動流程
3.相關命令
- kubectl get nodes:查看集群中有多少個node
- kubectl describe node {node_name}來查看某個Node的詳細信息