Kubernetes中的大部分概念如Node
、Pod
、Replication Controller
、Service
等均可以看做一種「資源對象」
,幾乎全部的資源對象均可以經過Kubernetes提供的kubectl工具(或者API編程調用)執行增、刪、改、查等操做並將其保存在etcd
中持久化存儲。從這個角度來看,Kubernetes實際上是一個高度自動化的資源控制系統,它經過跟蹤對比etcd庫裏保存的「資源指望狀態」與當前環境中的「實際資源狀態」的差別來實現自動控制和自動糾錯的高級功能。node
在介紹資源對象以前,咱們先了解一下Kubernetes集羣的兩種管理角色:Master
和Node
。mysql
Kubernetes裏的Master指的是集羣控制節點,每一個Kubernetes集羣裏須要有一個Master節點來負責整個集羣的管理和控制,基本上Kubernetes的全部控制命令都發給它,它來負責具體的執行過程,咱們後面執行的全部命令基本都是在Master節點上運行的。Master節點一般會佔據一個獨立的服務器(高可用部署建議用3臺服務器),其主要緣由是它過重要了,是整個集羣的「首腦」,若是宕機或者不可用,那麼對集羣內容器應用的管理都將失效。linux
Master節點上運行着如下一組關鍵進程。web
Kubernetes API Server (kube-apiserver)
:提供了 HTTP Rest 接口的關鍵服務進程,是Kubernetes裏全部資源的增、刪、改、查等操做的惟一入口,也是集羣控制的入口進程。sql
Kubernetes Controller Manager (kube-controller-manager)
:Kubernetes裏全部資源對象的自動化控制中心,能夠理解爲資源對象的「大總管」。docker
Kubernetes Scheduler (kube-scheduler)
:負責資源調度(Pod調度)的進程,至關於公交公司的「調度室」。編程
另外,在Master節點上還須要啓動一個etcd服務,由於Kubernetes裏的全部資源對象的數據所有是保存在etcd中的。api
除了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註冊本身,這也是Kubernetes推薦的Node管理方式。一旦Node被歸入集羣管理範圍,kubelet進程就會定時向Master節點彙報自身的情報,例如操做系統、Docker版本、機器的CPU和內存狀況,以及當前有哪些Pod在運行等,這樣Master能夠獲知每一個Node的資源使用狀況,並實現高效均衡等資源調度策略。而某個Node超過指定時間不上報信息時,會被Master判斷爲「失聯」,Node的狀態被標記爲不可用(Not Ready),隨後Master會觸發「工做負載大轉移」的自動流程。
咱們能夠執行下述命令查看集羣中有多少個Node:
# kubectl get nodes NAME STATUS AGE 127.0.0.1 Ready 1d
而後,經過kubectl describe node <node_name>來查看某個Node的詳細信息:
# kubectl describe node 127.0.0.1 Name: 127.0.0.1 Role: Labels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/hostname=127.0.0.1 Taints: <none> CreationTimestamp: Mon, 02 Jul 2018 10:11:27 +0800 Phase: Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- OutOfDisk False Tue, 03 Jul 2018 15:10:49 +0800 Mon, 02 Jul 2018 10:11:27 +0800 KubeletHasSufficientDisk kubelet has sufficient disk space available MemoryPressure False Tue, 03 Jul 2018 15:10:49 +0800 Mon, 02 Jul 2018 10:11:27 +0800 KubeletHasSufficientMemory kubelet has sufficient memory available DiskPressure False Tue, 03 Jul 2018 15:10:49 +0800 Mon, 02 Jul 2018 10:11:27 +0800 KubeletHasNoDiskPressure kubelet has no disk pressure Ready True Tue, 03 Jul 2018 15:10:49 +0800 Mon, 02 Jul 2018 10:11:38 +0800 KubeletReady kubelet is posting ready status Addresses: 127.0.0.1,127.0.0.1,127.0.0.1 Capacity: alpha.kubernetes.io/nvidia-gpu: 0 cpu: 1 memory: 1883844Ki pods: 110 Allocatable: alpha.kubernetes.io/nvidia-gpu: 0 cpu: 1 memory: 1883844Ki pods: 110 System Info: Machine ID: f9d400c5e1e8c3a8209e990d887d4ac1 System UUID: 13C940BE-9125-4594-9C8B-82E19C997FF3 Boot ID: 09a9b2bf-14cf-4e32-a724-8b279d44a387 Kernel Version: 3.10.0-514.26.2.el7.x86_64 OS Image: CentOS Linux 7 (Core) Operating System: linux Architecture: amd64 Container Runtime Version: docker://1.13.1 Kubelet Version: v1.5.2 Kube-Proxy Version: v1.5.2 ExternalID: 127.0.0.1 Non-terminated Pods: (3 in total) Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits --------- ---- ------------ ---------- --------------- ------------- default mysql-pgb63 0 (0%) 0 (0%) 0 (0%) 0 (0%) default myweb-c994c 0 (0%) 0 (0%) 0 (0%) 0 (0%) default myweb-jgcqn 0 (0%) 0 (0%) 0 (0%) 0 (0%) Allocated resources: (Total limits may be over 100 percent, i.e., overcommitted. CPU Requests CPU Limits Memory Requests Memory Limits ------------ ---------- --------------- ------------- 0 (0%) 0 (0%) 0 (0%) 0 (0%) No events.
上述命令展現了Node的以下關鍵信息。
Node基本信息:名稱、標籤、建立時間等。
Node當前的運行狀態,Node啓動之後會作一系列的自檢工做,好比磁盤是否滿了,若是滿了就標註OutOfDisk=True,不然繼續檢查內存是否不足(若是內存不足,就標註MemoryPressure=True),最後一切正常,就設置爲Ready狀態(Ready=True),該狀態表示Node處於健康狀態,Master將能夠在其上調度新的任務了(如啓動Pod)。
Node的主機地址與主機名。
Node上的資源總量:描述Node可用的系統資源,包括CPU、內存數量、最大可調度Pod數量等,注意到目前Kubernetes已經實驗性地支持GPU資源分配了(alpha.kubernetes.io/nvidia-gpu=0)。
Node可分配資源量:描述Node當前可用於分配等資源量。
主機系統信息:包括主機等惟一標識UUID、Linux kernel版本號、操做系統類型與版本、Kubernetes版本號、kubelet與kube-proxy的版本號等。
當前正在運行等Pod列表概要信息。
已分配的資源使用概要信息,例如資源申請的最低、最大容許使用量佔系統總量等百分比。
Node相關的Event信息。