Docker Kubernetes 介紹 or 工做原理

Kubernetes 介紹node

Kubernetes是Google在2014年6月開源的一個容器集羣管理系統,使用Go語言開發,Kubernetes也叫K8S。算法

K8S是Google內部一個叫Borg的容器集羣管理系統衍生出來的,Borg已經在Google大規模生產運行十年之久。docker

K8S主要用於自動化部署、擴展和管理容器應用,提供了資源調度、部署管理、服務發現、擴容縮容、監控等一整套功能。數據庫

2015年7月,Kubernetes v1.0正式發佈,截止到2017年9月29日最新穩定版本是v1.8。後端

Kubernetes目標是讓部署容器化應用簡單高效。api

官方網站:www.kubernetes.io網絡


Kubernetes 主要功能架構

一、數據卷負載均衡

  Pod中容器之間共享數據,可使用數據卷。分佈式

二、應用程序健康檢查

  容器內服務可能進程堵塞沒法處理請求,能夠設置監控檢查策略保證應用健壯性。

三、複製應用程序實例

  控制器維護着Pod副本數量,保證一個Pod或一組同類的Pod數量始終可用。

四、彈性伸縮

  根據設定的指標(CPU利用率)自動縮放Pod副本數。

五、服務發現

  使用環境變量或DNS服務插件保證容器中程序發現Pod入口訪問地址。

六、負載均衡

  一組Pod副本分配一個私有的集羣IP地址,負載均衡轉發請求到後端容器。在集羣內部其餘Pod可經過這個ClusterIP訪問應用。

七、滾動更新

  更新服務不中斷,一次更新一個Pod,而不是同時刪除整個服務。

八、服務編排

  經過文件描述部署服務,使得應用程序部署變得更高效。

九、資源監控

  Node節點組件集成cAdvisor資源收集工具,可經過Heapster彙總整個集羣節點資源數據,而後存儲到InfluxDB時序數據庫,再由Grafana展 示。

十、提供認證和受權

  支持屬性訪問控制(ABAC)、角色訪問控制(RBAC)認證受權策略。


Kubernetes 基本對象概念

對象:

  • Pod
  •      Pod是最小部署單元,一個Pod有一個或多個容器組成,Pod中容器共享存儲和網絡,在同一臺Docker主機上運行。
  •      一個Pod中的容器共享網絡命名空間
  • Pod容器分類
  •       Infrastructure Container:基礎容器:維護整個Pod網絡空間
  •       InitContainers:初始化容器:先於業務容器開始執行
  •       Containers:業務容器:並行啓動
  • Pod 狀態
  •   Pending:Pod已經被系統接收,準備下載鏡像。
  •   Running:Pod已經分配到節點,而且全部容器已建立。至少有一個容器仍在運行、正在啓動或從新啓動。
  •   Successed:Pod中的全部容器已成功終止,不會從新啓動。
  •   Failed:Pod中的全部容器已終止,而且至少有一個容器已經終止。也就是說,容器退出非零狀態或被系統終止。
  •   Unknown:因爲某種緣由,沒法得到Pod狀態,一般是因爲與Pod所在主機通訊時出現錯誤
  • Service
  •      Service一個應用服務抽象,定義了Pod邏輯集合和訪問這個Pod集合的策略。
  •      Service代理Pod集合對外表現是爲一個訪問入口,分配一個集羣IP地址,來自這個IP的請求將負載均衡轉發後端Pod中的容器。
  •      Service經過Lable Selector選擇一組Pod提供服務。
  • ReplicaSet
  •      下一代Replication Controller。確保任何給定時間指定的Pod副本數量,並提供聲明式更新等功能。
  •      RC與RS惟一區別就是lable selector支持不一樣,RS支持新的基於集合的標籤,RC僅支持基於等式的標籤。
  • Deployment
  •      Deployment是一個更高層次的API對象,它管理ReplicaSets和Pod,並提供聲明式更新等功能。
  •      官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味着可能永遠不須要直接操做ReplicaSet對象。
  • Volume
  •      數據卷,共享Pod中容器使用的數據。
  • Namespace
  •      命名空間將對象邏輯上分配到不一樣Namespace,能夠是不一樣的項目、用戶等區分管理,並設定控制策略,從而實現多租戶。
  •      命名空間也稱爲虛擬集羣。
  • Lable
  •      標籤用於區分對象(好比Pod、Service),鍵/值對存在;每一個對象能夠有多個標籤,經過標籤關聯對象。
  • StatefulSet
  •      StatefulSet適合持久性的應用程序,有惟一的網絡標識符(IP),持久存儲,有序的部署、擴展、刪除和滾動更新。
  • DaemonSet
  •      DaemonSet確保全部(或一些)節點運行同一個Pod。當節點加入Kubernetes集羣中,Pod會被調度到該節點上運行,當節點從集羣中
  •      移除時,DaemonSet的Pod會被刪除。刪除DaemonSet會清理它全部建立的Pod。
  • Job
  •      一次性任務,運行完成後Pod銷燬,再也不從新啓動新容器。還能夠任務定時運行。

經常使用建立對象整理:

  • Pod
  • ReplicaSet
  • Deployment
  • Service

Kubernetes 系統架構及組件功能

Master組件:

  • kube-apiserver
  •      Kubernetes API,集羣的統一入口,各組件協調者,以HTTP API提供接口服務,全部對象資源的增刪改查和監聽操做都交給APIServer處理後再提交給Etcd存儲。
  • kube-controller-manager
  •      處理集羣中常規後臺任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的。
  • kube-scheduler
  •      根據調度算法爲新建立的Pod選擇一個Node節點。

Node組件:

  • kubelet
  •      kubelet是Master在Node節點上的Agent,管理本機運行容器的生命週期,好比建立容器、Pod掛載數據卷、下載secret、獲取容器和節點狀態等工做。
  •      kubelet將每一個Pod轉換成一組容器。
  • kube-proxy
  •      Node節點上實現Pod網絡代理,維護網絡規則和四層負載均衡工做。
  • docker或rocket/rkt
  •      運行容器。

第三方服務:

  • etcd
  •      分佈式鍵值存儲系統。用於保持集羣狀態,好比Pod、Service等對象信息。


Kubernetes 工做流程

Master comm ponents 管理節點:

一、kubectl(user commands):用戶操做下發命令。

二、APIs:API接口板塊。authentication:API認證。authorization:API受權。

三、REST(pods,service,rep.controllers):API解析主要操做指令。

四、scheduling actuator:調度組件並選擇node節點去下發。

五、scheduler:檢測API是否有新的操做對象產生。

六、controller manager(replication controller etc.):監聽並下發API控制器管理指令。

七、Distributed Watchable Storage(implemented via etcd):全部操做指令存儲到分佈式存儲中。

Node 工做節點:

一、nternet:外網用戶進入

二、Firewall:防火牆進入。

三、Proxy:維護節點網絡規則。

四、kubelet:監聽master更新下發管理端操做指令。

五、Pod:建立容器最小單元。

六、cAdvisor:docker引擎。

七、container:docker引擎。

相關文章
相關標籤/搜索