kubernetes是一個全新得基於容器技術得分佈式架構領先方案。是google Borg得一個開源版本。Borg是google得一個久負盛名得內部使用得大規模集羣管理系統,它基於容器技術,目的是實現資源管理的自動化,以及跨多個數據中心的資源利用率的最大化。node
kubernetes中的大部分概念如Node,Pod,Replication Controller,service等均可以看做一種「資源對象」。幾乎全部的資源對象均可以經過kubernetes提供的kubectl工具(或者api編程調用)執行增刪查改等操做並將其保存在etcd中持久化存儲。因此經過這個角度來看,kubernetes是一個高度自動化的資源控制系統。docker
k8s中的master是集羣控制節點,來負責具體的執行過程,master節點一般會佔據一個獨立的服務器。一個主要緣由是它過重要了,它是整個集羣的「首腦"。編程
master節點上運行着如下一組關鍵進程。api
- Kubernetes API Server,提供HTTP Rest接口的關鍵服務進程。是Kubernetes裏全部資源的增刪查改等操做的惟一入口,也是集羣控制的入口進程。
- Kubernetes Controller Manager,Kubernetes裏全部資源對象的自動化控制中心。
- Kubernetes Scheduler, 負責資源調度(Pod調度)的進程。
master節點還會啓動一個etcd server進程,由於Kubernetes全部資源對象的數據所有保存在etcd中。服務器
Node在較早版本也叫Minion,在kubernetes集羣除了Master節點,其餘節點被稱爲Node節點。node節點爲k8s集羣的工做負載節點,每一個node都會被master分配一部分工做負載。當node宕機時,工做負載會被master轉移到其餘節點。網絡
node節點主要運行着下面一組關鍵進程架構
- kubelet: 負責Pod對應容器的建立,啓停等任務。同時與master節點密切協做,實現集羣管理的基本功能。
- kube-proxy: 實現kubernetes Server的通訊與負載均衡機制的重要組件。
- Docker Engine: 負責本機容器的建立和管理工做。
Node節點能夠動態增長到Kubernetes集羣中,默認狀況下kubelet會向master註冊本身,當Node被歸入集羣管理,kubelet進程就會定時向Master節點彙報自身情報(包括docker版本,機器cpu內存),這樣master會獲取每一個node的資源使用狀況。並實現高效的資源調度策略。負載均衡
Pod是kubernetes的最重要也是最基本的概念分佈式
Lebel是kubernetes系統中一個核心概念,一個label是一個kv的鍵值對,k、v由用戶本身指定。能夠附加到各類資源對象上,例如node,pod,service,rc等。
咱們能夠經過給指定資源捆綁一個或多個不一樣的資源標籤,來實現多維度的資源分組管理。詳細參考19頁微服務
核心概念之一,定義一個指望的場景,既聲明某種Pod的副本數量字任意時刻都符合某一個預期值,因此rc的定義包括一下幾個部分。
- Pod 期待的副本數
- 用於篩選目標pod的label selector
rc的一些特性和做用
- 大多數狀況下,經過自定義一個rc實現pod的建立過程及副本數量的自動控制。
- rc裏包含完整的pod定義模板
- rc經過label selector機制實現對pod 副本的自動控制
- 經過改變rc裏的pod副本數量,實現對pod的擴容和縮容功能
- 經過改變rc裏pod模板中的鏡像版本,能夠實現pod的滾動升級功能
deployment是kubernetes1.2引入的新概念。引入的目的是爲了更好的解決pod的編排問題,能夠看做是rc的一次升級。
deployment的典型使用場景有如下幾個
- 建立一個deployment對象來生成對應的replica set並完成pod副本的建立過程
- 檢查deployment的狀態來看部署動做是否完成
- 更新deployment以建立新的pod(鏡像升級)
- 若是當前deployment不穩定,回滾到早先的deployment版本
- 掛起或恢復一個deployment
Horizontal Pod Autoscaler 簡稱HPA,含義爲pod橫向自動擴容,與rc,deployment同樣,也屬於一種kubernet 資源對象。經過追蹤分析rc控制的全部目標pod的負載變化狀況,來肯定是否須要針對性的調整pod的副本數。HPA當前由兩種方式作爲pod負載的度量指標
- CPUUtilizationPercentage
- 應用程序自定義的度量指標,好比qps和tps
Kubernetes Service 實際上是咱們常提起的爲服務架構中的一個"微服務",前面的pod,rc等資源對象其實都是爲kubernetes service作嫁衣的。
kubernetes集羣中的三種ip
- node ip,node節點的物理ip地址,能夠經過網絡直接通訊
- pod ip,是docker 引擎根據docker0網橋的ip地址段進行分配,是一個虛擬的二層網絡
- cluser ip,屬於kubernetes集羣中的內部地址,沒法在集羣外部使用這個地址。
Volume 是pod中可以被多個容器訪問的共享目錄。概念、用途和目的與docker的vlume類似但不等價。緣由以下
- kubernetes的volume定義在pod上,而後被一個pod裏的多個容器掛載到具體的文件目錄下
- kubernetes的volume的生命週期與pod的生命週期相同,但與容器的生命週期不相關。當容器終止或重啓時volume的數據不會丟失,kubernetes支持多種類型的volume,如GlusterFS,Ceph等先進的分佈式文件系統。