Kubernetes簡單概述

1、什麼是Kubernetes

  • Kubernetes是Google在2014年開源的一個容器集羣管理系統,Kubernetes簡稱K8S
  • K8S用於容器應用程序的部署、拓展和管理
  • K8S提供了容器編排、資源調度、彈性伸縮、部署管理和服務發現等一系列的功能
  • Kubernetes目標是讓部署容器化應用簡單高效

2、kubernetes的特性

自我修復

  • 在節點故障時重新啓動失敗的容器,替換和重新部署,保證預期的副本數量,殺死健康檢查失敗的容器,並且在未準備好之前不會處理客戶端請求,確保線上服務不會中斷

彈性伸縮

  • 使用命令、UI或者基於CPU使用情況自動快速擴容和縮容應用程序實例,保證應用業務高峯併發時的高可用性,業務低峯時回收資源,以最小成本運行服務

自動部署和回滾

  • K8S採用滾動更新策略更新應用,一次更新一個Pod,而不是同時刪除所有的Pod,如果
    更新過程中出現問題,將會回滾更改,確保升級不受影響業務

服務發現和負載均衡

  • K8S爲多個容器提供一個統一訪問入口(內部IP地址和一個DNS名稱),並且負載均衡關聯所有容器,使得用戶無需考慮容器IP問題

機密和配置管理

  • 管理機密數據和應用程序配置,而不需要把敏感數據暴露在鏡像裏,提高敏感數據安全性,並可以將一些常用的配置存儲在K8S中,方便應用程序使用

存儲編排

  • 掛載外部存儲系統,無論是來自本地存儲,公有云(如AWS),還是網絡存儲(如NFS、GlusterFS、Ceph)都作爲集羣資源的一部分使用,極大提高存儲使用靈活性

批處理

  • 提供一次性任務、定時任務,滿足批量數據處理和分析的場景

3、Kubernetes集羣架構與組件

在這裏插入圖片描述在這裏插入圖片描述
Master組件

  • kube-apiserver
    Kubernetes API,集羣的統一入口,各組件協調者,以RESTful API提供接口服務,所有對象資源的增刪該查和監聽操作都交給APIServer處理後再提交給Etcd存儲
  • kube-controller-manager
    處理集羣中常規後臺任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的
  • kube-scheduler
    根據調度算法爲新創建的Pod選擇一個Node節點,可以任意部署,可以部署在同一節點上,也可以部署在不同的節點上
  • etcd
    分佈式鍵值存儲系統,用於保存集羣狀態數據,比如Pod、Service等對象信息

Node組件

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

kubernetes創建Pod容器的過程

  • 用戶管理員創建Pod的請求通過kubectl客戶端管理命令api server組件進行交互的,將請求發送給API Server
    API Server會根據請求的類型選擇用何種REST API對請求作出處理(比如:創建Pod時Storage類型是Pods時,其對應的就是REST Storage API)
  • REST Storage API會對請求作相應的處理並將處理的結果存入高可用鍵值存儲系統Etcd中
  • 在API Server響應管理員kubectl的請求後,Scheduler會根據Etcd集羣中運行Pod情況及 Node信息進行判斷,將需要創建的Pod分發到可用的Node節點上。然後根據一組相關規則將pod分配到可以運行它們的節點上,並更新數據庫,記錄pod分配情況
  • Kubelet監控數據庫變化,管理後續pod的生命週期,發現被分配到它所在的節點上運行的那些pod,就會進行docker組件的啓動,docker組件會啓動對應的容器(pod),會在該節點上運行這個新pod
  • kube-proxy運行在集羣各個節點主機上,管理網絡通信,如服務發現、負載均衡。例如當有數據發送到主機時,將其路由到正確的pod或容器。對於從主機上發出的數據,它可以基於請求地址發現遠程服務器,並將數據正確路由,在某些情況下會使用輪訓調度算法(Round-robin)將請求發送到集羣中的多個實例

4、Kubernetes核心概念

在這裏插入圖片描述
Pod

  • 最小的部署單元
  • 一組容器的集合
  • 一個Pod中的容器共享網絡命名空間
  • Pod是短暫的

Controllers

  • ReplicaSet:確保預期的Pod副本數量
  • Deployment:無狀態應用部署
  • StatefulSet:有狀態應用部署
  • DaemonSet:確保所有Node運行同一個Pod
  • Job:一次性任務
  • Cronjob:定時任務
    更高級層次對象,部署和管理Pod

Service

  • 防止Pod失聯
  • 定義一組Pod的訪問策略

其它

  • Lable:標籤,附加到某個資源上,用於關聯對象、查詢和篩選
  • Namespaces:命名空間,將對象邏輯上隔離
  • Annotations:註釋
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章