k8s 的基本介紹

一、k8s 基本特性

   (1)自動裝箱

       構建於容器之上,基於資源依賴及其他約束自動完成容器部署且不影響其可用性,並通過調度機制混合關鍵型應用和非關鍵型應用的工作負載於同一節點以提升資源利用率。

   (2)自我修復(自我治癒)

      支持容器故障後自動重啓、節點故障後重新調度容器,以及其他可用節點、健康狀態檢查失敗後關閉容器並重新創建等自我修復機制。

   (3)水平擴展

     支持通過簡單命令或UI手動水平擴展,以及基於CPU等資源負載率的自動水平擴展機制。

   (4)服務發現和負載均衡

       k8s通過其附件組件之一的KubeDNS(或CoreDNS)爲系統內置了服務發現功能,它會爲每個service配置DNS名稱,並允許集羣內的客戶端直接使用此名稱發出訪問請求,而service則通過iptables或ipvs內建立負載均衡機制。

   (5) 自動發佈和回滾

     k8s支持“灰度”更新應用程序或其配置信息,監控更新過程中應用程序的健康狀態,以確保不會同一時間殺掉所有實例,在這個過程中一旦出現故障,立馬進行回滾操作。

   (6)密鑰和配置管理

     k8s的configMap實現了參數配置和Docker鏡像的解耦,修改配置時無需重新build鏡像,這爲應用開發部署帶來了很大的靈活性。另外,對於應用依賴的一些敏感數據,如用戶名和密碼、令牌、密鑰等,k8s專門提供了Secret對象爲其解耦。

   (7)存儲編排

     k8s支持Pod對象按需自動掛載不同類型的存儲系統,包括節點的本地存儲系統,雲存儲(AWS),網絡存儲系統(NFS、GlusterFS)。

   (8)批量處理執行

   除了服務型應用,k8s還支持批處理作業及CI(持續集成),如果需要,一樣可用實現容器故障後恢復,

 

二、k8s的概念和術語

  • Master

    Master 是集羣的網關和中樞,負責爲用戶和客戶端暴露API、跟蹤其他服務器的健康狀態、以最優方式調度工作負載,以及編排其他組件之間的通信等任務。在用戶將應用部署在集羣上時,Master會使用調度算法將其自動指派到某個特定的node運行。在node加入集羣或從集羣中移除時,master也會按需重新編排影響到的pod(容器)。

  • Node

   Node是k8s集羣的工作節點,負責接收來自Master的工作指令並根據指令相應的創建或銷燬Pod對象,以及調整網絡規則以合理地路由和轉發流量等。

 

三、常用的資源抽象

  • Pod

    k8s並不直接運行容器,而是使用一個抽象的資源對象來封裝一個或者多個容器,這個抽象叫Pod,也是k8s的最小調度單元。

  • 資源標籤

  標籤(Label)是將資源進行分類的標識符,資源標籤其實就是一個鍵值型數據,標籤的作用就是指定對象(Pod)辨識性的屬性。一個對象可用有多個標籤,一個標籤也可以賦予多個對象。

  • 標籤選擇器

   標籤選擇器(Selector)全稱爲“Label Selector” ,它是一種根據Label來過濾符合條件的資源對象的機制。

  • Pod控制器

   Pod雖然是k8s的最小調度單元,但用戶通常不會直接部署及管理Pod對象,而是藉助另一種抽象----控制器(Controller)對其進行管理。控制器是一種管理Pod生命週期的資源抽象,它們是一類資源抽象,而非單個,包括ReplicationController、ReplicaSet、Deployment、StatefulSet、Job等。

  • 服務資源(service)

   Service是建立在一組Pod對象之上的資源抽象,它通過標籤選擇器選定一組Pod對象,併爲這組Pod對象定義一個統一的固定訪問入口。到達Service IP的請求將北負載均衡至其後的端點----各個Pod對象之上,因此Service從本質上來講是一個四層代理服務。Service還可以將集羣外部流量引入到集羣中來。

  • 存儲卷

    存儲卷是獨立於容器文件系統之外的存儲空間,常用於擴展容器的存儲空間併爲它提供持久存儲能力。k8s集羣上的存儲卷大體可以分爲臨時卷、本地卷、網絡卷。臨時卷和本地卷都在node本地,一旦Pod被調度到其他的node上,這種類型的存儲卷將無法繼續訪問,因此臨時卷和本地卷通常用於數據緩存,持久卷的數據則需要放置於持久卷(persistent volume)之上。

  • Name和Namespace

    名稱(Name)是k8s集羣中資源對象的標誌符,它們的作用域通常是名稱空間(Namespace),因此名稱空間是名稱的額外的限定機制。名稱空間通常用於實現租戶或項目的資源隔離,從而形成邏輯分組。

  • Annotation

   Annotation (註解)是另一種附加於對象之上的鍵值型的數據,但它用於更大但數據容量

  • Ingress

   k8s將Pod對象和外部網絡環境進行了隔離,Pod和Service等對象間的通信都使用其內部專用地址進行,如若需要開發某些Pod對象提供給外部用戶訪問,則需要爲其請求流量打開一個通往k8s集羣內部的通道,除了service之外,Ingress也是這類通道的實現方式之一。

 

四、k8s集羣組件

  1. Master組件

     (1)API Server

              API Server 負責輸出RESTful風格的k8s API ,它是發往集羣的所有REST操作命令的接入點,並負責驗收、校驗並響應所有的REST請求,結果狀態被持久化存儲於etcd中。因此,API Server  是整個集羣的網關。

       (2)集羣狀態存儲(Cluster State Store)

               k8s集羣的所有狀態信息都需要持久存儲於存儲系統etcd中,etcd是有CoreOS基於Raft協議開發的分佈式鍵值存儲,可用於服務發現、共享配置以及一致性保障(如數據庫主節點選擇、分佈式鎖等)。

      (3)控制器管理器

               在k8s 中,集羣級別的大多數功能都是由幾個控制器的進程實現的,這幾個進程是集成在kube-controller-manager守護進程中。由控制器完成的功能主要包括生命週期和API業務邏輯。

  • 生命週期功能:包括Namespace的創建和生命週期、Event垃圾回收、Pod終止相關的垃圾回收、級聯垃圾回收及Node垃圾回收。
  • API業務邏輯:例如,由ReplicaSet 執行的Pod擴展等。

     (4)調度器

              API Server 確認Pod 對象的創建請求後,由Scheduler根據集羣內各節點的可用資源狀態,以及要運行的容器的資源需求做出調度決策。

 

   2.Node組件

    Node 負責提供運行容器的各種依賴環境,並接收Master 的管理

       (1)  Node 的核心代理程序kubelet

       Kubelet 是運行於工作節點之上的守護進程,它從API Server 接收關於Pod對象的配置信息並確保它們處於期望的狀態。kubelet會在API Server 上註冊當前工作節點,定期向Master 彙報節點資源使用情況,並通過cAdvisor 監控容器和節點的資源佔用情況。

     (2)容器運行時環境

       每個node都要提供一個容器運行是環境,它負責下載鏡像並運行容器。

     (3)kube-proxy

       每個工作節點都需要運行一個kube-proxy守護進程,它能夠按需爲service資源對象生成iptables或ipvs規則,從而捕獲訪問當前service的ClusterIP的流量並將其轉發至正確的後端Pod對象。

 

   3.核心組件

   k8s 集羣還依賴於一組稱爲“附件”的組件以提供完整的功能,它們通常是由第三方提供的特定應用程序,且託管運行於k8s集羣之上。介紹幾種附件:

   CoreDNS:在k8s集羣中調度運行提供DNS服務的Pod,同一集羣中的其他Pod可使用此DNS服務解決主機名。

   Kubernetes Dashboard :Kubernetes 集羣的全部功能都要基於Web 的UI,來管理集羣中的應用甚至是集羣自身。

   Heapster: 容器和節點的性能監控與分析系統,它收集並解析多種指標數據,如資源利用率,生命週期事件等。

   Ingress Controller: Service是一種工作於傳輸層的負載均衡器,而Ingress 是在應用層實現的HTTP(s) 負載均衡機制。

                     關注博主的微信公衆號,其中有更多精彩文章,還有大量免費教學視頻和電子書等你來拿!

                                                                

發佈了65 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章