Kubernetes 基本概念和術語
Kubernetes 中大部分概念如 Node、Pod、Replication Controller、 Service 等都可以看做一種 "資源對象",幾乎所有的資源對象都可以通過 Kubernetes提供的 kubectl 工具(或者API遠程調用)執行增、刪、查、改等操作並將其保存在etcd中持久化存儲。從這個角度來看,Kubernetes其實是一個高度自動化的資源控制系統,它通過追蹤對比etcd庫里保存的"資源期望狀態"與當前環境中"實際資源狀態"的差異來實現自動控制和自動糾錯的高級功能。
在介紹資源對象之前,我們先了解一下Kubernetes集群的兩種管理角色: Master 和 Node。
1、Master
Kubernetes里的 Master指的是集群控制節點,每個 Kubernetes集群里需要有一個 Master節點來負責整個集群的管理和控制,基本上 Kubernetes的所有控制命令都發給它,它來負責具體的執行過程,我們后面執行的所有命令基本都是在 Master節點上運行的。 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宕機時,其上的工作負載會被 Master自動轉移到其他節點上去。
每個Node節點上都運行着以下一組關鍵進程。
- kubelet:負責Pod對應的容器的創建、啟停等任務,同時與 Master節點密切協作,實現集群管理的基本功能。
- kube-proxy:實現 Kubernetes Service 的通信與負載均衡機制的重要組件。
- Docker Engine( docker):Docker引擎,負責本機的容器創建和管理工作。
Node節點可以在運行期間動態增加到 Kubernetes集群中,前提是這個節點上已經正確安裝、配置和啟動了上述關鍵進程,在默認情況下 kubelet會向 Master注冊自己,這也是 Kubernete推薦的Node管理方式。一旦Node被納入集群管理范圍, kubelet進程就會定時向 Master節匯報自身的情報,例如操作系統、 Docker版本、機器的CPU和內存情況,以及當前有哪些Pod在運行等,這樣 Master可以獲知每個Node的資源使用情況,並實現高效均衡的資源調度策略。而某個Node超過指定時間不上報信息時,會被 Master判定為“失聯”,Node的狀態被標記不可用( Not Ready),隨后Master會觸發“工作負載大轉移”的自動流程。
我們可以執行下述命令查看集群中有多少個Node:
[root@localhost ~]# kubectl get nodes
NAME STATUS AGE
127.0.0.1 Ready 6h
[root@localhost ~]#
然后,通過kubectl describe node < node_name > 來查看某個Node的詳細信息。