Kubernetes架構及核心部件

文章目錄

  • 1、Kubernetes集群概述
    • 1.1、概述
    • 1.2、通過聲明式API即可
  • 2、Kubernetes 集群架構
    • 2.1、Master 組件
      • 2.1.1、API Server
      • 2.1.2、集群狀態存儲
      • 2.1.3、控制器管理器
      • 2.1.4、調度器
    • 2.2、Worker Node 組件
      • 2.2.1、kubelet
      • 2.2.2、容器運行時環境
      • 2.2.3、kube-proxy
    • 2.3、圖解架構
  • 3、核心擴展部件
    • 3.1、網絡插件
    • 3.2、CoreDNS
    • 3.3、Dashboard
    • 3.4、容器資源監控系統
    • 3.5、集群日志系統
    • 3.6、Ingress Controller
  • 4、小小疑問
    • 4.1、聲明式API和命令式API
    • 4.2、區分kubectl和kubelet
  • 參考

1、Kubernetes集群概述

1.1、概述

Kubernetes 是一個容器編排平臺,它使用共享網絡將多個主機(物理服務器或虛擬機)構建成集群。分為 Master Node(主節點)和Worker Node(工作節點),Master負責管理整個集群,Worker 負責接收請求并以Pod(容器集合)形式運行工作負載。下圖為Kubernetes 集群工作模式示意圖。
在這里插入圖片描述
Master是集群的網關和中樞,負責為客戶端提供API接口調用、確保各資源對象不斷地接近用戶期望的狀態、并以最優的方式調度Pod到指定Node,以及編排其他組件之間的通信等任務,它是客戶端訪問集群的唯一入口。生產環境通常部署多個Master,為了冗余和負載均衡。

Worker Node負責接收來自 Master 下發的指令并相應創建或銷毀Pod 對象,以及路由、流量轉發等任務。在生產環境中,隨著微服務的增多或者業務應用的擴容,Worker會隨之增多。

概括來說,Kubernetes將所有工作節點的資源(CPU、磁盤、內存、網絡等)集合在一起形成了一臺更加強大的“服務器”,通過Master上的API接口暴露集群的計算和存儲接口,再由 Master通過調度算法將客戶端請求的工作負載指派至特定的Node上,并且Master 會自動處理因Worker Node的添加、故障、或移除等變動對 Pod 的影響。

Kubernetes是構建在底層主機集群之上的“云原生應用操作系統”,而容器是運行在其上的進程。
在這里插入圖片描述
Kubernetes 中每個對象都使用 “名稱”作為其唯一標識符,出于名稱的隔離和復用、資源隔離的目的,使用“Namespace” 作為作用域。

1.2、通過聲明式API即可

在開發云原生應用時,主要使用聲明式API,這種方式簡單易用,程序員朋友可以更好地集中精力開發業務。

在運行應用時,用戶只需要通過 API聲明業務應用的最終狀態(例如為 Nginx 應用運行 6個實例等),Kubernetes 便能完成后續的所有任務,包括應用本身的運行實例數量、路由策略、訪問策略以及存儲等。

以下為某個聲明式yaml的示例,Kubernetes 也支持使用命令行工具 kubectl 提交請求。

apiVersion: v1
kind: Podmetadata:name: busyboxnamespace: testlabels:app: busyboxspec:containers:- name: busyboximage: busybox

2、Kubernetes 集群架構

Kubernetes 屬于Server-Client架構,Master Node主要由API Server(kube-apiserver)、 Controller-Manager(Kube-controller-manager)和 Scheduler(kube-scheduler)這3個組件,以及一個用于存儲集群狀態的 etcd 存儲服務組成,它們構成整個集群的控制平面;

而Worker Node則主要包含 kubelet、kube-proxy及容器運行時(以前Docker是常用的實現)3個組件,它們承載運行各類應用容器。各組件如下圖所示:
在這里插入圖片描述

2.1、Master 組件

Master是集群的大腦,它維護了Kubernetes 的所有對象記錄,負責管理對象狀態、并響應集群中各種資源對象的管理操作,以及確保各資源對象的 實際狀態 與 所需狀態 相匹配。控制平面各組件及其主要功能如下:

2.1.1、API Server

API Server 是Kubernetes 控制平面的前端,支持不同類型應用的生命周期編排,包括部署、縮放和滾動更新等。它還是整個集群的網關接口,用于接收、校驗以及響應所有的REST請求,并將結果狀態存儲到(etcd)中。

2.1.2、集群狀態存儲

Kubernetes集群的所有狀態信息都需要存儲于etcd 中。etcd 是分布式鍵值存儲,可用于服務發現、共享配置以及一致性保障 (如數據庫主節點選擇、分布式等)。

etcd還為其存儲的數據提供了監聽 (warch)機制,用于監聽和推送變更。API Server是Kubernetes集群中唯一能夠與etcd通信的組件,它封裝了這種監聽機制,并借此同其他各組件高效協同。這一點類似于多個應用服務器借助zookeeper協同。

2.1.3、控制器管理器

控制器負責實現客戶端通過 API Server 提交的請求,它驅動API 對象的當前狀態逼近期望狀態。Kubernetes 提供了驅動 Node、Pod 、 Server、Endpoint、ServiceAccount 和 Token 等數十種類型對象的控制器。

2.1.4、調度器

Kubernetes 系統上的調度是指為 API Server 接收到的每一個Pod 創建請求,并在集群中為其匹配出一個最佳工作節點。kube-scheduler 是默認調度器程序,它調度時的考量因素包括:硬件、軟件與策略約束、親和與反親和、污點等特征。

2.2、Worker Node 組件

Worker Node 組件是集群的體力勞動者,為了保證有足夠的資源運行成百上千個容器化應用,一個集群通常會有多個 Worker Node 。每個Node 會定期向 Master 報告自身的狀態變動,并接受 Master 的管理。

2.2.1、kubelet

kubelet 是 Kubernetes 中最重要的組件之一,是運行于每個 Node之上的“節點代理”服務,負責接收并執行 Master 發來的指令,以及管理當前 Node 上 Pod 對象的容器等任務。它支持從 API Server 接收 Pod 資源定義,并通過 容器運行時 去創建、啟動和監視容器。

kubelet 會持續監視當前節點上各Pod 的健康狀態,并在任何 Pod 出現問題時將其重建。同時也會及時跟Master通信,將自身情況上報于Master。

2.2.2、容器運行時環境

Pod 是一組容器集合,真正負責運行容器的是底層的 容器運行時 。kubelet 通過 CRI(容器運行時接口)可支持多種類型的 OCI 容器運行時,例如 docker、containerd、CRI-O、runC、Kata等。

2.2.3、kube-proxy

kube-proxy 是需要運行于集群中每個節點之上的服務進程,它把 API Server 上的Service 資源對象轉換為當前節點上的 iptables 或(與)ipvs 規則,這些規則 能夠將那些 發往Service 對象 ClusterIP 的流量 分發至它后端的 Pod 端點之上。

kube-proxy是 Kubernetes的核心網絡組件,它本質上更像是Pod 的代理及負載均衡器,負責確保集群中 Node、Service 和Pod 對象之間的通信。

2.3、圖解架構

在這里插入圖片描述
如上圖所示:

  • 開發/運維人員可以通過kubectl命令,或者使用由Kubernetes提供的客戶端SDK,調用apiserver提供的接口。
  • 調用apiserver接口后,Kubernetes將資源定義信息存入到etcd數據庫,資源定義信息就是期望狀態。
  • 收到定義信息后,controller-manager會努力將期望狀態變為實際狀態,并且會把實際狀態寫入到etcd數據庫中。
  • 如果定義信息沒有被scheduler模塊調度,那么實際狀態就是待調度,當scheduler把pod調度到用戶指定的節點時,這時實際狀態則就是真實的Pod運行狀態了。
  • 當scheduler把 “pod應該調度到哪個節點” 的信息寫入到etcd數據庫時,這時節點上的kubelet會利用list-watch機制收到這個信息,然后kubelet根據收到的信息運行pod的定義信息,并且把pod運行起來。
  • 每個節點上都會有kube-proxy服務,包括master節點,利用kube-proxy模塊,可以作為集群的流量入口。
  • 每個節點必須安裝好容器運行時(比如docker、containerd),因為最終把容器進程跑起來的還是要靠 容器運行時 。

3、核心擴展部件

常用的核心擴展部件包括如下幾個:

3.1、網絡插件

網絡插件是必要部件,常用的有Flannel、Calico等。我主要使用Calico ,云廠商一般是結合VPC有自己的一套實現。

3.2、CoreDNS

Kubernetes使用DNS應用程序實現名稱解析和服務發現功能,它自1.11 版本起默認使用 CoreDNS。之前的版本中用到的是kube-dns。

3.3、Dashboard

一套WebUI,用于可視化 Kubernetes集群。Dashboard可用于獲取集群中資源對象的詳細信息,例如集群中的 Node、Namespace、 Volume、ClusterRole 和Job 等,也可以創建或者修改這些資源對象。

3.4、容器資源監控系統

監控系統是分布式應用的重要基礎設施,Kubernetes常用的指標監控部件有Metrics-Server、Prometheus 等。

3.5、集群日志系統

日志系統是構建可觀測分布式應用的基礎設施,有助于幫助開發人員發現和定位問題。Kubernetes 常用的日志系統是由ElasticSearch、Fluentd 和 Kibana(EFK) 組合提供的解決方案,或者使用ELK等方案。

3.6、Ingress Controller

Ingress資源是 Kubernetes 將集群外部 HTTP流量引入到集群內部的資源類型,它僅用于控制流量的規則和配置的集合,它不能進行“流量穿透”,要通過Ingress控制器發揮作用。常用的Ingress控制器有Nginx等。

在以上這些附件中,CoreDNS、監控系統、日志系統和 Ingress 控制器,這種基礎支撐類服務一般安裝在集群內部。而Dashboard是提高用戶效率和體驗的可視化工具,一般在集群外部獨立安裝。

4、小小疑問

4.1、聲明式API和命令式API

一個注重結果,一個注重過程。

聲明式(declarative)編程:著重于最終結果,如何達成結果則要依賴于給定語言的基礎組件能力,程序員只需要指定做什么而非如何去做;聲明式編程常用于數據庫和配置管理軟件中,關系型數據庫的SQL語言便是最典型的代表之一。

命令式(imperative)編程:稱為過程式編程更合適,它需要由程序員指定做事情的具體步驟,更注重如何達成結果的過程。

4.2、區分kubectl和kubelet

初學者經常分不清kubectl和kubelet的區別,通過上文可以知道:

kubectl是一個Kubernetes輕量級的客戶端,用于調用Api-Server的接口,一般安裝在Master節點

kubelet是安裝在每個Node節點上的代理,用于與Master高效通信,以及完成Master下發的任務、以及上報任務和自身的情況。

參考

Kubernetes架構及核心部件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210673.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210673.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210673.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入解析Node.js:V8引擎、事件驅動和非阻塞式I/O

文章目錄 1. 引言2. 什么是Node.js?3. V8引擎3.1 V8引擎簡介3.2 V8引擎的特點 4. 事件驅動4.1 事件循環4.2 事件觸發與監聽4.2.1 代碼示例 4.3 異步回調4.3.1 代碼示例 5. 非阻塞式I/O5.1 非阻塞式I/O的優勢5.2 異步與同步的對比5.2.1 同步I/O的代碼示例5.2.2 異步I…

前端知識筆記(三)———CSS核心功能手冊:從熟悉到精通

參考HTML代碼 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

指針 注意事項

指針變量的本質是用來放地址&#xff0c;而一般的變量是放數值的。 1、指針的定義&#xff08;兩種形式&#xff09; ①int x3; int *p&x ②int x; int *p&#xff1b; x3&#xff1b;p&x int*p中 *p和p的差別&#xff1a;簡單說*p是數值&#xff0c;p是地址&a…

Linux 系統上配置 SSH 密鑰

1. 生成 SSH 密鑰 打開終端&#xff0c;運行以下命令來生成 SSH 密鑰&#xff1a; ssh-keygen -t rsa -b 4096 -C "wqzbxhexample.com" 替換 "wqzbxhexample.com" 為你在 GitHub 注冊時使用的郵箱地址。 2. 添加 SSH 密鑰到 SSH 代理 運行以下命令來啟…

ROS gazebo 機器人仿真,環境與robot建模,添加相機 lidar,控制robot運動

b站上有一個非常好的ros教程234仿真之URDF_link標簽簡介-機器人系統仿真_嗶哩嗶哩_bilibili&#xff0c;推薦去看原視頻。 視頻教程的相關文檔見&#xff1a;6.7.1 機器人運動控制以及里程計信息顯示 Autolabor-ROS機器人入門課程《ROS理論與實踐》零基礎教程 本文對視頻教程…

java物聯網協議解析插件,java iot對接解析框架.java物聯網架構的設計思路

一般來說&#xff0c;物聯網開發則hi對硬件設備進行信息采集&#xff0c;所以建議技術棧如下&#xff1a; 物聯網開發技術棧一般如下&#xff1a; nettyspringbootrocketmqredismagic-byte 其中netty用于tcp和數據接入 rockemqt用于消息臨時儲存中轉&#xff0c; springboot就…

【論文精讀】REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS

REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS 前言ABSTRACT1 INTRODUCTION2 REACT: SYNERGIZING REASONING ACTING3 KNOWLEDGE-INTENSIVE REASONING TASKS3.1 SETUP3.2 METHODS3.3 RESULTS AND OBSERVATIONS 4 DECISION MAKING TASKS5 RELATED WORK6 CONCLUSI…

phpstudy搭建WordPress教程

一、phpstudy新建配置WordPress 打開phpstudy&#xff0c;啟動Apache&#xff08;或者Nginx&#xff09;和MySQL服務 來到數據庫部分&#xff0c;點擊[創建數據庫]&#xff0c;填寫新建數據庫的名稱&#xff0c;用戶名以及密碼&#xff0c;完成后點擊確認 來到網站部分&#x…

Course2-Week4-決策樹

Course2-Week4-決策樹 文章目錄 Course2-Week4-決策樹1. 決策樹的直觀理解2. 構建單個決策樹2.1 熵和信息增益2.2 構建決策樹——二元輸入特征2.3 構建決策樹——多元輸入特征2.4 構建決策樹——連續的輸入特征2.5 構建回歸樹——連續的輸出結果(選修)2.6 代碼實現-遞歸構建單個…

解決 php 連接mysql數據庫時報錯:Fatal error: Class ‘mysqli’ not found in問題

在使用php對mysql進行連接的過程中&#xff0c;出現了Fatal error: Uncaught Error: Class "mysqli" not found in的問題 解決方案 這個錯誤通常表示您的PHP代碼中缺少MySQL擴展或者沒有啟用MySQL擴展。 我們首先確認一下PHP環境中已經安裝了MySQL擴展。檢查一下自己…

Redis如何做內存優化?

Redis如何做內存優化&#xff1f; 1、縮短鍵值的長度 縮短值的長度才是關鍵&#xff0c;如果值是一個大的業務對象&#xff0c;可以將對象序列化成二進制數組&#xff1b; 首先應該在業務上進行精簡&#xff0c;去掉不必要的屬性&#xff0c;避免存儲一些沒用的數據&#xff1…

rust詳解

前言 rust 學習曲線非常陡峭&#xff0c;但是基本語法也還算挺好理解&#xff0c;自動內存管理有點類似智能指針&#xff0c;基本看一下語法入門就可以大概理解&#xff0c;但是唯獨宏很難理解&#xff0c;語法非常晦澀。但是功能非常強大。聲明宏類似于c語言的宏處理&#xf…

【淘寶網消費類電子產品銷售數據可視化】

淘寶網消費類電子產品銷售數據可視化 引言數據爬取與處理數據可視化系統功能1. 總數據量分析2. 店鋪總數據3. 店鋪銷售額排名4. 不同電子商品銷售價格5. 單個商品價格排名6. 不同省份平均銷量7. 不同地區的平均銷售額8. 省份數量9. 每個省份有用的平均個數 創新點結語 引言 隨…

Linux 中 find 查找

目錄 1.普通查詢 2.按照文件大小查找 3.忽略文件字母大小寫查詢 4.根據修改時間查找 5. 取反 &#xff01; 6.根據用戶查詢 7.對查找出來的內容進行操作 1.普通查詢 find 路徑 -name "文件名" 如查看 etc 目錄下的passwd 的文件 find /etc -name "passwd&quo…

【周報2023.12.09】

周報2023.12.09 本周開展工作下周工作計劃 本周開展工作 本周開展的工作的話一共是一下幾點&#xff1a; 這三點的話是緊密相連的 邏輯這邊需要考慮的東西很多 點擊生成照片&#xff0c;然后獲取生成照片的狀態點擊生成照片&#xff0c;然后獲取生成照片的時間&#xff0c;并…

kettle完成mysql表與表之間的更新和插入

版本&#xff1a;20231209 kettle完成數據庫表與表之間的轉換非常的簡單&#xff0c;只需要在輸入模塊選擇&#xff1a;輸入表&#xff1b;在輸出模塊選擇&#xff1a;插入和更新表模塊 實例展示&#xff1a;將表stu1的數據同步到stu2&#xff0c;并覆蓋掉stu2原本的數據。 cr…

嵌入式學習---ARM時鐘體系

目錄 時鐘相關概念時鐘脈沖時鐘頻率時鐘的作用時鐘信號的生成 S3C2440的時鐘體系主時鐘晶振兩個PLL 時鐘啟動流程相關的寄存器 時鐘相關概念 時鐘脈沖 按一定電壓幅度&#xff0c;一定時間間隔連續發出的脈沖信號。它是一個周期性的信號&#xff0c;每個周期內包含一個上升沿…

ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders

1.關于稀疏卷積的解釋&#xff1a;https://zhuanlan.zhihu.com/p/382365889 2. 答案&#xff1a; 在深度學習領域&#xff0c;尤其是計算機視覺任務中&#xff0c;遮蔽圖像建模&#xff08;Masked Image Modeling, MIM&#xff09;是一種自監督學習策略&#xff0c;其基本思想…

向日葵遠程控制鼠標異常的問題

? 在通過向日葵進行遠程控制的時候&#xff0c;可能會遇到鼠標位置異常的問題。此時&#xff0c;不管怎么移動鼠標&#xff0c;都會停留在屏幕最上方&#xff0c;而無法點擊到正確的位置。如圖&#xff1a; 此時&#xff0c;如果啟用了“被控端鼠標”功能&#xff0c;可以正…

【Docker】swarm stack部署多service應用

前面我們已經學習過了Docker Compose&#xff0c;它可以用來進行一個完整的應用程序相互依賴的多個容器的編排的&#xff0c;但是缺點是只能在單機模式使用&#xff0c;不能在分布式多機器上使用&#xff1b;前面我們也學習了Docker swarm&#xff0c;它可以將單個服務部署為多…