kubernetes快速入門-基礎概念

kubernetes基礎概念

概述

kubernetes是一個開源的容器編排系統,可實現容器化應用程序的自動部署、水平擴展和管理。kubernetes集羣是master/nodes的架構,master是管理節點,通常由3個節點組成,nodes節點稱爲工做節點,節點要多至上千個。node

組件

更詳細的請參考官方文檔: https://kubernetes.io/zh/docs/concepts/overview/components/docker

master節點上的組件: API Server,Scheduler,Controller-Manager後端

  • API Server: 它提供了各種資源的增、刪、改、查以及watch等的接口,是整個kubernetes系統的中心。如Pod、Replication Controller、Service等資源。網絡

  • Scheduler: 調度器,默認調度器爲kube-scheduler,調度器經過 kubernetes 的 watch 機制來發現集羣中新建立且還沒有被調度到 Node 上的 Pod,調度器會將發現的每個未調度的 Pod 調度到一個合適的 Node 上來運行。架構

  • Controller-Manager: 控制管理器,Controller Manager做爲集羣內部的管理控制中心,負責集羣內的Node、Pod副本、服務端點(Endpoint)、命名空間(Namespace)、服務帳號(ServiceAccount)、資源定額(ResourceQuota)的管理,當某個Node意外宕機時,Controller Manager會及時發現並執行自動化修復流程,確保集羣始終處於預期的工做狀態。k8s中有許多Controller,如:Replication Controller,Node Controller, Namespace Controller, Token Controller, Service Controller等,這些控制器保證集羣內的資源保持預期狀態,而Controller Manager則管理這些Controller的狀態。

node節點上的組件: kubelet, 容器運行時(通常指docker引擎),kube-proxy負載均衡

  • kubelet: kubelet是在每一個Node節點上運行的主要 「節點代理」ide

  • kube-proxy: kube-proxy是每一個Node節點上運行的網絡代理,它做爲附件(addons)運行,自託管在kubernets上,
    幫忙負責生成iptabels或ipvs規則,kubenetes1.11版本後(包含1.11)默認使用ipvs,以前的版本默認使用iptables。spa

  • 容器運行時:負責運行容器的軟件,通常是docker引擎

Pod

kubernetes管理和調度的最小單位是Pod,這只是一個邏輯上的概念,一個pod是運行一個或多個應用容器,Pod中的每一個容器共享網絡名字空間。代理

在node節點上把關係比較緊密的容器打上標籤歸成一類pod,而後經過Label Selector對打上的標籤進行過濾,這樣node節點就能利用標籤選擇器來選擇出咱們須要的一類容器。code

Pod分類:

第一類. 自主式Pod
用戶向API Server發送建立一個Pod的請求,經過Scheduler選擇一個node後向kubelet發送任務,kubelet並建立好相應的Pod,當該node宕機後,該Pod從集羣中消失,不能自動遷移到其餘node。

第二類. 控制器管理的Pod

ReplicationController,簡稱RC,副本控制器,它能實現始終按照用戶指定的目標狀態,在node上運行指定個數的Pod,當其中某個Pod因故障被kill後,能自動尋找合適的node,在其上運行相應的Pod,始終能保證指定個數的Pod數量。它還能實現Pod的滾動更新,並能實現回滾操做。

ReplicaSet,簡稱RS, 副本控制器:
通常不直接使用,它有一個聲明式的控制器,叫Deployment

Deployment控制器,只能管理無狀態應用,Deployment還支持二級控制器,叫HPA(HorizontalPodAutoscaler),水平自動伸縮控制器,能實現自動擴容和縮容

StatefulSet 有狀態副本集控制器,管理有狀態應用

DaemonSet控制器,在每一個node上運行一個副本時使用

Job 做業控制器,

Ctonjob 週期性做業控制器:

Service

Pod是有生命週期的,一個Pod隨時都有可能被殺掉,也隨時可能有Pod被建立,因此客戶端程序要想訪問Pod中容器提供的服務,kubernetes引入了一箇中間層service,工做在Pod之上,客戶端程序直接訪問service,只要service不被刪除,那IP地址就固定,service做爲服務訪問的入口。

service是靠標籤選擇器來關聯Pod的,只要標籤相同就被關聯。service不是什麼應用程序,也不是實體組件,它只是一個iptables的一個DNAT規則,若是service後端的Pod是個時,iptables的DNAT就是多目標的負載均衡轉發,在kubernetes的1.11版中此種功能已使用ipvs(LVS)來實現。

網絡

kubernetes集羣須要三個網絡,物理主機網卡所在網絡稱爲主機節點網絡,service上有個IP地址,此IP地址是虛擬的,只存在於iptables或ipvs中,此網絡稱爲service網絡,Pod所在網絡稱爲pod網絡

kubernetes快速入門-基礎概念

通訊

同一個Pod內的多個容器共享網絡名稱空間,可使用lo迴環地址通訊

各Pod之間通訊經過隧道轉發報文來實現疊加網絡(Overlay Network) 來通訊

Pod與Service之間通訊是經過iptables或ipvs規則調度

CNI

Container Network Interface,容器網絡接口API。

實現CNI的組件:

  1. flannel:支持網絡配置,不支持網絡策略
  2. calico: 支持網絡配置,也支持網絡策略
  3. canel: 是flannel與calico的結合體,支持網絡配置和網絡策略
相關文章
相關標籤/搜索