K8S架構原理及其工作流程

2020-09-05 DevOps筆記

K8S

容器編排系統

容器編排系統需要滿足的條件:

  1. 服務註冊,服務發現
  2. 負載均衡
  3. 配置、存儲管理
  4. 健康檢查
  5. 自動擴縮容
  6. 零宕機

K8S整體架構圖


K8S整體架構

Kubernetes採用主從分布式架構,包括Master(主節點)、Worker(從節點或工作節點),以及客戶端命令行工具kubectl和其它附加項。

K8S Master


Master架構圖

etcd保存了整個集群的狀態,CoreOS提供(用戶期望狀態)。K/V存儲,只能存儲Api Server中支持的數據範式存儲;

Api Server提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API註冊和發現等機制;

controller負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等(確保用戶期望狀態與實際運行狀態一致);

scheduler負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上,pod是調度的最小單位;

K8S Node


Node架構圖

kubelet:會監控Api Server上的資源變動,若變動與自己有關係,kublet就去執行任務;定期向master會報節點資源使用情況。

kube-proxy:實現service的抽象,為一組pod抽象的服務提供統一接口並提供負載均衡。

POD創建過程


POD創建時序圖

1、用戶提交創建POD請求

2、API Server 處理用戶請求,存儲Pod數據到Etcd

3、Schedule通過和 API Server的監聽機制,查看到新的pod,嘗試為Pod綁定Node

4、過濾主機:調度器用一組規則過濾掉不符合要求的主機,比如Pod指定了所需要的資源,那麼就要過濾掉資源不夠的主機

5、主機打分:對第一步篩選出的符合要求的主機進行打分,在此階段,調度器會考慮一些整體優化策略,比如把一個Replication Controller的副本分布到不同的主機上,使用最低負載的主機等

6、選擇主機:選擇得分最高的主機,進行binding操作,結果存儲到Etcd中

7、kubelet根據調度結果執行Pod創建操作:綁定成功後,會啟動container, docker run, scheduler會調用API Server的API在etcd中創建一個bound pod對象,描述在一個工作節點上綁定運行的所有pod信息。運行在每個工作節點上的kubelet也會定期與etcd同步bound pod信息,一旦發現應該在該工作節點上運行的bound pod對象沒有更新,則調用Docker API創建並啟動pod內的容器

8、POD創建完成

K8S各組件工作流程


工作流程

①運維人員向kube-apiserver發出指令(我想幹什麼,我期望事情是什麼狀態)

②api響應命令,通過一系列認證授權,把pod數據存儲到etcd,創建deployment資源並初始化。(期望狀態)

③controller通過list-watch機制,監測發現新的deployment,將該資源加入到內部工作隊列,發現該資源沒有關聯的pod和replicaset,啟用deployment controller創建replicaset資源,再啟用replicaset controller創建pod。

④所有controller被創建完成後.將deployment,replicaset,pod資源更新存儲到etcd。

⑤scheduler通過list-watch機制,監測發現新的pod,經過主機過濾、主機打分規則,將pod綁定(binding)到合適的主機。

⑥將綁定結果存儲到etcd。

⑦kubelet每隔 20s(可以自定義)向apiserver通過NodeName 獲取自身Node上所要運行的pod清單.通過與自己的內部緩存進行比較,新增加pod。

⑧kubelet創建pod。

⑨kube-proxy為新創建的pod註冊動態DNS到CoreOS。給pod的service添加iptables/ipvs規則,用於服務發現和負載均衡。

⑩controller通過control loop(控制循環)將當前pod狀態與用戶所期望的狀態做對比,如果當前狀態與用戶期望狀態不同,則controller會將pod修改為用戶期望狀態,實在不行會將此pod刪掉,然後重新創建pod。

後記

本文是對K8S架構原理及其工作流程的一個匯總,可能會不好理解,但是在學習K8S過程中,這個是跳不過去的,讓我們一起努力吧!

相關焦點

  • 每天5分鐘|輕鬆掌握開發工作中必會的k8s-基礎組件與架構
    k8s採用主從結構,將節點分為兩種類型,一種是matser節點,一種是worker節點,如下圖所示:master節點作為控制節點,主要工作是對worker節點們進行管理,該節點上不運行容器,且一個master節點可以管理上百甚至上千個worker節點。
  • k8s三部曲第一章第3節 k8s架構基本原理
    borg系統2)架構* 一個master節點 * api server k8s網關,所有的指令請求都必須經過api server * scheduler 調度器,使用調度算法,把請求資源調度某一個node節點 * controller 控制器,維護k8s資源對象 * etcd 存儲資源對象* node節點
  • B/S架構及其運行原理
    B/S工作原理 B/S架構採取瀏覽器請求,伺服器響應的工作模式。 一張圖看懂B/S架構工作原理: 工作流程: 1.,它採取三層架構。只要有瀏覽器就可以打開,具體工作原理如下。 一般地,把具有某種服務功能的伺服器軟體及其所在的機器,都統稱為XX伺服器(XX表示某種具體服務)。 這些軟體可以集中於一臺機器中(如圖5),這樣的機器可以稱為集中式伺服器;也可以單獨存在於某臺機器中,這樣的機器可以稱為獨立式伺服器,多個獨立式伺服器可組成伺服器群或矩陣。
  • 我司基於K8s高可用集群架構
    次要的原因是伺服器作用不明朗和發版流程的不穩定。業務全面k8s化,構建以kubernetes為核心的ci/cd流程。流程完畢,runner pod 銷毀,gitlab 返回結果。需要強調的一點是,在這裡的資源資源清單不包含configmap或者secret,牽扯到安全性的問題,不應該出現在代碼倉庫中,我司是使用rancher充當k8s多集群管理平臺,上述安全問題在rancher的dashboard中由運維來做的。
  • 《蹲坑學K8S》之19-3:Flannel通信原理
    一、container-container通信原理解析這種場景對於Kubernetes來說沒有任何問題,根據Kubernetes的架構設計。Kubernetes創建Pod時,首先會創建一個pause容器,為Pod指派一個唯一的IP位址。然後,以pause的網絡命名空間為基礎,創建同一個Pod內的其它容器(–net=container:xxx)。
  • 《蹲坑學K8S》之19-3:Flannel通信原理
    一、container-container通信原理解析這種場景對於Kubernetes來說沒有任何問題,根據Kubernetes的架構設計。Kubernetes創建Pod時,首先會創建一個pause容器,為Pod指派一個唯一的IP位址。
  • 初識K8S之理論和搭建
    三、為k8s的應用場景適合於大型分布式,集群,微服務,高可用,負載均衡,如果大型團隊和項目用它,還可以優化開發流程和節約成本。四、k8s部署架構分析1、k8s部署架構圖:2、 圖解etcd:一款開源軟體。
  • 企業微服務項目如何進入K8S的全過程
    那項目從0開始時,一直進入到k8s中,整體流程是什麼,以及用到什麼工具組件呢?今天老顧就從整體上面來介紹一下。工作流程1)開發人員提交代碼到git版本倉庫;2)Jenkins人工/定時觸發項目構建;3)jenkins拉取代碼、代碼編碼、打包鏡像、推送到測試環境的鏡像倉庫
  • 面試問到了K8S原理,花5分鐘來總結下,以後再也不怕了
    本文就準備用最短的篇幅來介紹下K8S的工作過程。K8S架構組成Kubernetes最初源於谷歌內部的Borg,提供了面向應用的容器集群部署和管理系統。Kubernetes借鑑了Borg的設計理念,比如Pod、Service、Labels和單Pod單IP等。
  • K8S整體架構解析,簡單明了
    上面這個架構圖,舉例是一個master節點和2個node節點。但實際生產上,從高可用考慮,是需要部署多個master節點的。scheduler負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;就是監視新創建的 Pod,如果沒有分配節點,就選擇一個節點供他們運行,這就是pod的調度controller manager負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等,它們是處理集群中常規任務的後臺線程etcd:kubernetes的後端資料庫,k/v方式存儲,所有的k8s
  • 從kubectl top看K8S監控原理
    這篇文章會介紹其數據鏈路和實現原理,同時借kubectl top 闡述 k8s 中的監控體系,窺一斑而知全豹。最後會解釋常見的一些問題:kubectl top 為什麼會報錯?實現原理3.1 數據鏈路kubectl top 、 k8s dashboard 以及 HPA
  • 硬核技能k8s初體驗
    Kubernetes集群架構Kubernetes集群由很多節點組成,分為兩大類:主節點 承載Kubernetes控制和管理整個集群系統的控制面板工作節點 運行實際部署的應用Scheduler: 調度應用Controller Manager: 執行集群級別功能,如複製組件、持續跟蹤工作節點、處理節點失敗等etcd:可靠的分布式資料庫存儲,能持久化集群配置工作節點運行容器化應用的機器,運行、監控、管理應用服務的任務由下組件完成
  • Mybatis工作流程及其原理
    5.Executor(執行器)參考:mybatis工作流程二、Mybatis工作流程1.通過SqlSessionFactoryBuilder創建SqlSessionFactory對象2.通過SqlSessionFactory創建SqlSession對象3.通過SqlSession拿到Mapper代理對象4.通過MapperProxy調用Mapper中增刪改查的方法
  • k8s三部曲第二章第1節 pod核心原理
    1.pod核心原理概念:k8s的作用k8s是用來管理容器,但不直接操作容器,最小操作單元是pod(間接管理容器)特點:1).一個master有一群node節點2).master節點不存儲容器,只是負責調度、網關、控制器、資源對象存儲
  • k8s三部曲第一章第2節 雲架構&雲原生
    1)雲和k8s是什麼關係 * 雲就是使用容器構件的一套服務集群網絡,雲由很多的大量的容器過程 * k8s就是用來管理雲中的容器2)雲架構 * iaas 基礎設施即服務* 用戶: 租用(購買|分配權限) 雲主機,用戶不需要考慮網絡,DNS,存儲,硬體環境方面的問題* 運營商:提供網絡,存儲,DNS這樣的服務就叫做基礎設置服務
  • 阿里雲架構師強烈推薦的K8S文檔,學完曬一下自己的學習筆記
    Queue with Per Pod Work Item : 使用隊列存儲工作項,一個Job作為消費者消費隊列中的工作項,同時啟動和隊列中work Item數量對應的Pod實例。Queue with Variable Pod Work Item : 同per Pod 模式,不同之處在於Job數量是可變的。
  • Mybatis工作流程及其原理與解析
    本文將通過debug的方式來了解其工作原理。Mybatis核心類: SqlSessionFactory:每個基於 MyBatis 的應用都是以一個 SqlSessionFactory 的實例為中心的。Mybatis工作流程:
  • K8S中的Service的存在理由
    注意:service只是在k8s集群內部起作用,集群外部訪問是無效的實現原理Service通過關註定義出多個POD對象組合而成的邏輯集合,以及訪問這組POD的策略,Service關聯POD一個service對象就是工作節點上的一些iptables或ipvs,用於將到達service對象的IP位址的流量轉發到相應的endpoint對象指定的IP位址和埠上,kube-proxy組件通過api-server持續監控著各個service及其相關的POD對象,並將其創建或變動實時反映到工作節點的iptable
  • 每天5分鐘|輕鬆掌握開發工作必會的k8s-命令行操作k8s太麻煩?
    前面幾篇中,查看和操作k8s的資源都是通過命令行操作,每次查詢一個資源的狀態都需要手動執行命令。這種方式。。。。多少有點。。。。。不方便。而且,k8s不光面向運維,有時候開發也需要關注集群中某些服務的狀態,做一些簡單的配置。
  • k8s集群CI/CD集成介紹二:rancher搭建k8s集群環境
    容器編排從幾年前群雄割據、各方亂戰,到如今Google的k8s一統天下。能迅速力挽狂瀾,已說明其技術實力。但k8s複雜的架構,不太友好的文檔,確實讓一些初學者望而卻步。近期正好一直在學習k8s的東西,走了一些彎路。整理出來以備參考。由於內容過多,本文將分多章介紹k8s集群構建過程,並發布demo到k8s集群,簡單演示一個完整CI/CD的自動化過程。