Kubernetes(一般縮寫爲K8S)是容器編排平臺。segmentfault
Kubernetes提供了支持複雜容器應用程序所需的一切。對於開發人員和運營人員來講,這是最便捷,最受歡迎的框架,幾乎全部組織的DevOps團隊都普遍使用它。服務器
Kubernetes對計算機集羣而言,就像操做系統對計算機而言。restful
爲了方便管理和服務發現,Kubernetes將組成一個應用程序的容器分組爲邏輯單元。這對於微服務應用程序特別有用。網絡
儘管Kubernetes在Linux上運行,但它與平臺無關,能夠在裸機,虛擬機,雲實例或OpenStack上運行。最新版本的Kubernetes已經支持在Windows上運行。架構
Kubernetes集羣中的計算機或節點分爲控制平面和工做負載平面。app
Kubernetes 集羣架構負載均衡
Kubernetes集羣由分爲兩組的節點組成:框架
一組master節點,它們承載着控制平面組件,它們是系統的大腦,由於它們控制着整個集羣。分佈式
一組構成工做負載平面的工做節點,工做負載(或應用程序)在此運行。ide
這兩個平面共同組成了Kubernetes集羣。
Kubernetes Master 節點
這是Kubernetes控制面板或控制平面。這裏作出有關集羣的決策,例如調度和檢測/響應集羣事件。master服務器的組件能夠在集羣中的任何節點上運行。如下是每一個關鍵組件的細分:
API Server
集羣數據存儲 (etcd)
Controller Manager
Scheduler
Dashboard (可選)
讓咱們逐一討論這些組件。
API Server
這是Kubernetes控制面板中惟一用戶可訪問的API的組件,而且是你將與之交互的惟一主組件。 API Server公開了一個restful的Kubernetes API,並使用了JSON清單文件。
Kubernetes API Server公開了RESTful Kubernetes API。使用集羣和其餘Kubernetes組件的工程師經過此API建立對象。
集羣數據存儲
Kubernetes使用ETCD做爲數據存儲。這是一個一致性且高可用的鍵值存儲,用於持久存儲全部API對象。
因爲API Server自己是無狀態的,所以etcd分佈式數據存儲將持久保存經過API建立的對象。API Server 是與etcd通訊的惟一組件。
Controller Manager
kube-controller manager,它運行全部處理集羣中任務的控制器。這些包括節點控制器,副本控制器,端點控制器以及服務賬戶和secret控制器。這些控制器中的每個都單獨工做以維持所需狀態。
控制器使你經過API建立的對象按照想要的狀態運行。它們中的大多數僅建立其餘對象,可是有些還與外部系統通訊(例如,經過其API的雲提供商)。
Scheduler
調度程序監視新建立的Pod(一個或多個容器的組),並將其分配給節點。
調度程序決定每一個應用程序實例應在哪一個工做程序節點上運行。
master節點和工做節點的組件之間就是這樣進行交互的。
Kubernetes 工做節點
master節點處理和管理集羣,而工做節點運行容器並提供Kubernetes運行時環境。
主要組件有:
Kubelet
Container runtime
Kube-proxy
讓咱們逐一討論這些組件。
Kubelet
工做節點包含一個kubelet。這是主要的節點代理。它監視API服務器以查找已分配給其節點的Pod。 Kubelet執行任務並維護向主節點報告pod狀態的反向通道。
Kubelet是與API Server進行對話並管理在其節點上運行的應用程序的代理。它經過API報告這些應用程序和節點的狀態。
Container Runtime
每一個pod內都有容器,kubelet經過Docker運行這些容器(拉取鏡像,啓動和中止容器等)。它還按期執行任何請求的容器活動性探測。它支持Docker和CRI-O等。
容器運行時,能夠是Docker或與Kubernetes兼容的任何其餘運行時。它按照Kubelet的指令在容器中運行你的應用程序。
Kube-proxy
這是節點的網絡大腦,負責維護主機上的網絡規則並執行鏈接轉發。它還負責服務中全部Pod的負載平衡。
Kubernetes服務代理(Kube-proxy)對應用程序之間的網絡流量進行負載平衡。
附加組件
大多數Kubernetes集羣還包含其餘幾個組件。這包括DNS服務器,網絡插件,日誌記錄代理等。
它們一般在工做節點上運行,但也能夠配置爲在master節點上運行。
Kubernetes 實戰
將應用程序部署到Kubernetes中的步驟。
在部署應用程序時,將發生如下操做:
你將應用程序清單提交給Kubernetes API。 API Server將清單中定義的對象寫入etcd。
控制器會注意到新建立的對象,並建立幾個新對象。
調度程序將Pod分配給每一個工做節點。
Kubelet注意到已分配給本身的Pod。它經過Container Runtime運行應用程序實例。
Kube-proxy會注意到,應用程序實例已準備就緒,能夠接受來自客戶端的鏈接併爲其配置負載均衡器。
Kubelet和控制器監視系統並保持應用程序運行。
Kubernetes是容器編排事實上的標準,固然在實際使用過程當中,須要瞭解更多的知識點,本文但願能夠幫助尚未接觸過Kubernetes的小夥伴快速入門。