一文入門Kubernetes

Kubernetes(一般縮寫爲K8S)是容器編排平臺。segmentfault

Kubernetes提供了支持複雜容器應用程序所需的一切。對於開發人員和運營人員來講,這是最便捷,最受歡迎的框架,幾乎全部組織的DevOps團隊都普遍使用它。服務器

v2-703d1417f2aa7eaf0477962b4dd9e379_720w.png

Kubernetes對計算機集羣而言,就像操做系統對計算機而言。restful

爲了方便管理和服務發現,Kubernetes將組成一個應用程序的容器分組爲邏輯單元。這對於微服務應用程序特別有用。網絡

儘管Kubernetes在Linux上運行,但它與平臺無關,能夠在裸機,虛擬機,雲實例或OpenStack上運行。最新版本的Kubernetes已經支持在Windows上運行。架構

v2-6c854f4f98723ad0771fe4e533c003ba_720w.png

Kubernetes集羣中的計算機或節點分爲控制平面和工做負載平面。app

Kubernetes 集羣架構負載均衡

Kubernetes集羣由分爲兩組的節點組成:框架

  • 一組master節點,它們承載着控制平面組件,它們是系統的大腦,由於它們控制着整個集羣。分佈式

  • 一組構成工做負載平面的工做節點,工做負載(或應用程序)在此運行。ide

v2-e74e608e3e7b9e85c6f67d2affb07ecd_720w.png

這兩個平面共同組成了Kubernetes集羣。

Kubernetes Master 節點

這是Kubernetes控制面板或控制平面。這裏作出有關集羣的決策,例如調度和檢測/響應集羣事件。master服務器的組件能夠在集羣中的任何節點上運行。如下是每一個關鍵組件的細分:

  • API Server

  • 集羣數據存儲 (etcd)

  • Controller Manager

  • Scheduler

  • Dashboard (可選)

v2-63c7790a77051318224a2e25142f35fe_720w.png

讓咱們逐一討論這些組件。

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(一個或多個容器的組),並將其分配給節點。

調度程序決定每一個應用程序實例應在哪一個工做程序節點上運行。

v2-7193b81619b55852fa22ebfa9d6f072f_720w.png

master節點和工做節點的組件之間就是這樣進行交互的。

Kubernetes 工做節點

master節點處理和管理集羣,而工做節點運行容器並提供Kubernetes運行時環境。

主要組件有:

  • Kubelet

  • Container runtime

  • Kube-proxy

v2-0323df1f63481148b7139c230073f5e5_720w.png

讓咱們逐一討論這些組件。

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 實戰

v2-bae8eeeb6a0245b2b4e3cefa5c553a4b_720w.png

將應用程序部署到Kubernetes中的步驟。

在部署應用程序時,將發生如下操做:

  • 你將應用程序清單提交給Kubernetes API。 API Server將清單中定義的對象寫入etcd。

  • 控制器會注意到新建立的對象,並建立幾個新對象。

  • 調度程序將Pod分配給每一個工做節點。

  • Kubelet注意到已分配給本身的Pod。它經過Container Runtime運行應用程序實例。

  • Kube-proxy會注意到,應用程序實例已準備就緒,能夠接受來自客戶端的鏈接併爲其配置負載均衡器。

  • Kubelet和控制器監視系統並保持應用程序運行。

Kubernetes是容器編排事實上的標準,固然在實際使用過程當中,須要瞭解更多的知識點,本文但願能夠幫助尚未接觸過Kubernetes的小夥伴快速入門。

原文連接:https://segmentfault.com/a/1190000023380697

相關文章
相關標籤/搜索