【K8S】Kubernetes 基本架構、節點類型及運行流程詳解(附架構圖及流程圖)

Kubernetes 架構

  1. k8s 集群 = 多個 master node + 多個 work node
  2. Master 節點(主節點):負責集群的管理任務,包括調度容器、維護集群狀態、監控集群、管理服務發現等。
  3. Worker 節點(工作節點):實際運行應用程序的容器。每個工作節點上都運行著容器運行時(如?containerd),并接受來自主節點的調度指令。

節點:(Node)通常指一個物理服務器或虛擬機,承載運行容器的實際工作負載,節點可以看作是 Kubernetes 集群中的計算單元


組成結構

節點(Node)

  1. 定義:運行容器的物理服務器或虛擬機(在云環境中,節點通常是虛擬機;在本地環境或裸機環境中,節點可以是物理服務器)
  2. 節點的類型
    1. 主節點(Master Node 或 Control Plane)
    2. 工作節點(Worker Node)

主節點(Master Node)

  1. 定義:調度和管理整個集群的狀態的地方

  2. 功能:負責管理整個 Kubernetes 集群的控制平面,處理集群的調度、API 調用、集群狀態維護等任務。主節點通常不運行應用工作負載

  3. 組成

    組件功能描述
    Kube API Server集群的前端(類似集群的網關),負責接收和處理所有API請求,提供認證授權和訪問控制功能
    Scheduler監控集群節點資源使用情況,根據調度策略將 Pod 分配到合適的工作節點
    Controller Manager管理集群中各種資源對象(如 Node、Pod、Service) 的狀態,確保實際狀態與期望狀態一致
    etcd高可用鍵值存儲系統,保存集群的配置信息和元數據
    Cloud Controller Manager云平臺控制器,負責與云平臺的API交互

工作節點(Worker Node)

  1. 定義:真正運行應用負載的地方,提供實際的計算資源和服務,所有應用服務都以 Pod 的形式運行在工作節點上,每個工作節點運行多個 Pod

  2. 功能:實際運行應用容器的節點。所有的應用 Pod 都部署在這些工作節點上

  3. 組成

    組件名稱功能描述
    kubelet負責管理和維護 Pod 對象,保證 Pod 按預期運行,并定期與 Kubernetes API Server 進行通信獲取新的 pod 規范,匯報 pod 的運行情況
    kube-proxy負責為 pod 對象提供網絡代理和負載均衡,確保網絡流量正確轉發到相應的 Pod
    container runtime負責拉取容器鏡像、創建容器、啟動或者停止容器等等(如 Docker-Engine 或 containerd)

架構圖

+---------------------------------------+
|               kubectl                 |  
|  (用戶接口:CLI工具,與API Server交互)  |
+---------------------------------------+|
+---------------------------------------+
|           API Server (控制平面)        |
|     (接收和處理請求,管理集群狀態)       |
+---------------------------------------+|        |            |              |
+--------+  +--------+  +----------+   +---------------------+
| etcd   |  |Scheduler| |Controller|   | Kubelet (每個節點)  |
| (存儲) |  | (調度器) | | Manager  |   | (工作節點上運行Pod)   |
+--------+  +--------+  +----------+   +----------------0----+|+----------------------------+|       Pod (容器)           || (運行在工作節點上,提供服務)   |+----------------------------+

工作流程


端口類型

  1. 外部訪問的端口 (nodePort)
    • 定義:一個開放在每個?節點(Node)上的固定端口,是為每個?Service?分配的固定端口,一個向外暴露的 Service 對應一個 nodePort(端口范圍通常在 30000-32767)
    • 功能:NodePort?類型的 Service 暴露一個端口給外部用戶,使得外部請求可以通過固定的端口訪問集群中的應用(接收到的外部請求會轉發到 Service 暴露的端口(如 80))
  2. 服務暴露的端口 (port)
    • 定義:Kubernetes 使用?Service?來暴露和管理 Pod 的訪問,port 端口是集群內的其他服務或容器通過該?Service?訪問 Pod 的端口
    • 功能:Service?暴露多個端口(例如 80 端口),并將流量轉發到端口對應的 Pods 中
  3. 服務設置的端口(targetPort
    1. 定義:targetPort?定義了 Service 轉發到容器內部的具體端口(通常為?containerPort)
    2. 功能:Service 通過 targetPort 決定如何調用 Pod,通常不需要手動設置
  4. 容器內部的端口 (containerPort)
    1. 定義:Pod 內的 Container 向外暴露的端口,通過 containerPort 可以找到 port 中的一個容器
    • 功能:container 監聽 containerPort 并處理請求,Service 會將請求從自己的端口轉發到對應的 Pod 的?ContainerPort?上

工作流程

  1. 發起請求:客戶端請求(外部請求)通過?NodeIP:NodePort?向 k8s 發起請求(NodeIP 決定請求的 Node,NodePort 決定請求的 Service)
  2. 監聽與轉發:每個 Node 上的 kube-proxy 監聽多個到達?NodePort?端口的請求,并由 kube-proxy?將請求轉發到 NodePort 對應的 Service
  3. 監聽與轉發:每個 Service 監聽一個到達 NodePort 端口的請求,接收到請求后通過 selector 找到符合條件的?Pod,并通過負載均衡策略選擇一個 pod 并將請求發送給這個 pod 對應的 targetPort 端口
  4. 監聽請求:每個 pod 監聽一個 targetPort 端口發來的請求,由 pod 中的主容器監聽 containerPort(containerPort 和 targetPort 通常相同)
  5. 處理請求:主容器監聽一個 ContainerPort 端口發來的請求,主容器接收請求并處理請求(或轉發給其他容器處理請求)
  6. 處理請求:主容器接收并最終處理請求,處理過程中可能會通過 containerPort 調用其他容器的功能


服務分類

ClusterIP?服務

  • 定義:僅在 Kubernetes 集群內部可訪問,服務的 IP 地址只在集群內部網絡中有效,無法從集群外部通過?ClusterIP?直接訪問服務
  • 適用場景:內部服務之間的通信,如微服務架構中服務間的 RPC 調用

NodePort 服務

  • 定義:Node 中的 Service 的端口號,集群通過 NodeIP:NodePort 將服務暴露給外部用戶

  • 功能:用于將服務暴露在每個?Node(包括 Worker 和 Master)上的特定端口

  • 缺點:多個服務有多個 IP,用戶訪問哪個 IP 就會訪問對應的 Node,沒有統一的負載均衡策略

  • 工作流程

    • 創建服務:用戶創建一個 NodePort 類型的服務
    • 分配端口號:Kubernetes 會在集群中所有節點(包括 Worker Node 和 Master Node)上分配一個特定的端口(通常在 30000-32767 之間)
    • 訪問服務:外部請求可以通過?任何節點(Master 或 Worker)的IP地址 + NodePort?來訪問服務(不僅限于 Master Node)
  • 示例

    如果在集群中定義了一個 NodePort 服務,分配了端口號 30001,并且集群有三個節點:

    • Master Node IP:?192.168.1.10
    • Worker Node 1 IP:?192.168.1.20
    • Worker Node 2 IP:?192.168.1.30

    那么可以從集群外通過以下任意地址訪問該服務:

    • http://192.168.1.10:30001?(Master Node)
    • http://192.168.1.20:30001?(Worker Node 1)
    • http://192.168.1.30:30001?(Worker Node 2)

LoadBalancer 服務

  • 定義:服務商提供的外部 IP,讓用戶通過統一的 IP 地址(External IP)訪問服務
    • **ExternalIP:**使外部訪問可以通過集群節點的 IP 地址訪問指定服務(很少用,更常見的是通過 NodePort 或 Ingress 暴露服務)
  • 功能
    • 自動創建一個外部負載均衡器,并將流量路由到 Kubernetes 集群中的服務
    • 提供了更簡便的方式訪問服務(通過一個外部 IP) ,通常用于云環境(如 AWS、GCP、Azure)
  • 缺點:用戶需要知道具體的 IP 地址,可讀性不好,不便于用戶記憶
  • 工作流程
    • 創建服務:用戶創建一個?LoadBalancer?類型的服務
    • 分配 IP:服務商分配一個外部 IP 地址給這個服務
    • 訪問服務:用戶可以通過這個外部 IP 地址直接訪問該服務,而不需要知道任何節點的 IP

??Ingress 服務

  • 定義:Kubernetes 用于 HTTP/HTTPS 路由的組件,通常配合 Ingress Controller(如 Nginx Ingress Controller)來工作

  • 功能:將外部流量轉發到內部服務,使外部訪問可以通過配置域名、路徑等規則訪問服務,而不需要知道具體的 IP

  • 工作流程

      1. 接收請求:Ingress 接收來自外部的 HTTP/HTTPS 請求
      1. 路由匹配:Ingress Controller 根據配置的路由規則(域名、路徑等)匹配請求
      1. 轉發請求:將請求轉發到對應的后端服務(Service)
      • 支持基于路徑的轉發(如 /api -> api-service)
      • 支持基于域名的轉發(如 api.example.com -> api-service)
      1. 負載均衡:Ingress Controller 可以實現請求的負載均衡
      1. SSL/TLS 終止:處理 HTTPS 請求的 SSL/TLS 終止(如果配置了證書)
  • 組成部分

    組件功能
    Ingress 資源定義路由規則,指定如何將外部請求轉發到內部服務
    Ingress Controller實現 Ingress 資源定義的規則,通常使用 Nginx、Traefik 等
    后端服務處理實際請求的 Kubernetes Service,可以是 ClusterIP、NodePort 等類型

總結

  • ClusterIP 類型的服務?:內部訪問使用的 IP,無法從集群外部訪問
  • ?NodePort?類型的服務:外部可以訪問的服務,使用?”任意節點(Master 或 Worker)的 IP 地址” + “NodePort”?進行訪問
  • LoadBalancer 類型的服務:在云環境中,可以使用?LoadBalancer 類型的服務來獲得一個外部 IP 地址,直接從外部訪問
  • ?Ingress?類型的服務:提供了一種更加靈活的 HTTP/HTTPS 訪問方式,適合基于域名或路徑規則管理外部流量

示例

  1. 目標:通過 NodePort 服務將一個應用程序(MyApp)暴露給外部訪問,使外部用戶可以通過節點的 IP 地址和端口號(30080)訪問該應用

  2. 工作流程

    1. 將 myApp-service 服務通過 30080 端口暴露給外部,供外部訪問
    2. Kube Proxy 監聽 30080 端口請求,并將請求轉發到 myApp-service 對應的端口 80
    3. Service 根據 selector 選擇 app=MyApp 的 Pod ,并通過負載均衡策略選擇一個 Pod 處理請求
    4. Service 將請求轉發到后端 Pod 的端口(targetPort: 8080)
    5. Pod 處理請求并返回響應給 Service
    6. Service 將響應返回給 Kube Proxy
    7. Kube Proxy 將響應返回給用戶
  3. 代碼實現

    apiVersion: v1               # 聲明 API 版本(如何同 API Server 進行交互),v1 最常用
    kind: Service                # 聲明資源類型為 Service
    metadata:                    # 聲明服務的元數據name: myApp-service        # 聲明服務的名字,Kubernetes 內部和外部引用該服務時將使用這個名字
    spec:                        # specification: 聲明資源對象的配置信息type: NodePort             # 聲明該服務為節點端口類型的 (向外暴露的服務)selector:                  # 選擇器,用來選擇對應的 Pod,服務會將流量轉發到符合條件的 Podapp: MyApp               # 選擇 pod 的 Label 中 app=nginx 的資源ports:- protocol: TCP          # 指定服務使用的協議是 TCPport: 80               # 服務對集群內部公開的端口targetPort: 8080       # 服務后方 pod 的端口nodePort: 30080        # 聲明向外提供服務的端口號, 必須在30000~32767之間
    

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

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

相關文章

數據庫MySQL,在終端輸入后,提示不是內部命令等

【解決問題】mysql提示不是內部或外部命令,也不是可運行的程序 一般這種問題是因為沒有在系統變量里面添加MySQL的可執行路徑 以下是添加可執行路徑的方法: 第一步:winR輸入services.msc 然后找到MySQL,右擊屬性并復制MySQL的可執…

Python 中的線程模塊

Python 中的線程模塊 Python 中的線程模塊 Python 中的線程模塊 thread 模塊是一個標準模塊,提供了簡單易用的方法為程序構建多線程。在幕后,該模塊使用較低級的 _thread 模塊,在 Python 早期版本中,該模塊是多線程的流行選擇。 …

PhotoShop學習01

了解Photoshop 這里省略了Photoshop的軟件安裝,請自行查找資源下載。 1.打開圖片 下圖為啟動photoshop后出現的界面,我們可以通過創建新文件或打開已有文件來啟用photoshop的工作界面。 可以通過左邊的按鈕進行新文件的創建或打開已有文件。 也可以點…

Python大戰Java:AI時代的編程語言‘復仇者聯盟‘能否換C位?

背景 當Java程序員在咖啡機前念叨’Python憑什么搶我飯碗’時,AI實驗室里的Python工程師正用5行代碼召喚出神經網絡——這場編程語言的’權力的游戲’,勝負可能比你想象的更魔幻!" 一、茶水間里的戰爭:Java和Python的相愛相…

GitCode 助力 python-office:開啟 Python 自動化辦公新生態

項目倉庫:https://gitcode.com/CoderWanFeng1/python-office 源于需求洞察,打造 Python 辦公神器 項目作者程序員晚楓在運營擁有 14w 粉絲的 B 站賬號 “Python 自動化辦公社區” 時,敏銳察覺到非程序員群體對 Python 學習的強烈需求。在數字…

javaweb + AI day03

一、web基礎 二、分層解耦 注意:bean的名字默認是類名的首字母小寫!!! 三、Mysql count不參與null值統計 四、JDBC 五、MyBatis 數據庫連接池

運行程序時出現加載配置文件時出錯,對路徑****的訪問被拒絕

問題:最近給客戶用c#語言編寫進銷存項目,在用vs2022自帶的打包工具Microsoft visual studio installer projects 打包生成了安裝文件,順利安裝后,點擊桌面快捷方式后出現如下錯誤 經過查詢相關資料發現是桌面快捷方式的權限問題&a…

基于C#的CANoe CLR Adapter開發指南

一、引言 CANoe 是一款廣泛應用于汽車電子開發和測試的工具,它支持多種編程接口,方便開發者進行自定義擴展。CANoe CLR Adapter 允許我們使用 C# 語言與 CANoe 進行交互,充分利用 C# 的強大功能和豐富的類庫。本文將詳細介紹如何基于 C# 進行…

conda怎么遷移之前下載的環境包,把python從3.9升級到3.10

克隆舊環境(保留舊環境作為備份) conda create -n cloned_env --clone old_env 在克隆環境中直接升級 Python conda activate cloned_env conda install python3.10 升級 Python 后出現 所有包導入失敗 的問題,通常是因為依賴包與新 Pyth…

一文掌握 Scrapy 框架的詳細使用,包括實戰案例

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 1. Scrapy 簡介2. Scrapy 的核心組件3. 安裝 Scrapy4. 創建 Scrapy 項目4.1 創建項目4.2 創建 Spider5. 編寫 Spider5.1 定義 Item5.2 編寫 Spider 邏輯6. 運行 Scrapy 爬蟲6.1 運行爬蟲6.2 保存爬取數據7. Scrapy 的高…

筆試-查找最長公共字符串

應用 以字符串形式給定兩行代碼&#xff0c;1<長度<100&#xff0c;由字母、數字、空格組成。請找出最長公共子字符串&#xff0c;如果不存在返回空字符串。 實現 str1 input("請輸入字符串1&#xff1a;") str2 input("請輸入字符串2&#xff1a;&q…

【三維分割】LangSplat: 3D Language Gaussian Splatting(CVPR 2024 highlight)

論文&#xff1a;https://arxiv.org/pdf/2312.16084 代碼&#xff1a;https://github.com/minghanqin/LangSplat 文章目錄 一、3D language field二、回顧 Language Fields的挑戰三、使用SAM學習層次結構語義四、Language Fields 的 3DGS五、開放詞匯查詢&#xff08;Open-voca…

haclon固定相機位標定

什么是標定&#xff1f; 工業應用中相機拍到一個mark點的坐標為C1&#xff08;Cx,Cy&#xff09;&#xff0c;C1點對應的龍門架/機械手等執行端對應的坐標是多少&#xff1f; 標定就是解決這個問題&#xff0c;如相機拍到一個點坐標C1&#xff08;Cx,Cy&#xff09;&#xff0c…

# 代碼寫作風格:優雅編程的藝術

在編程的世界里&#xff0c;代碼不僅僅是實現功能的工具&#xff0c;更是一種表達思想和藝術的方式。良好的代碼寫作風格不僅能夠提高代碼的可讀性和可維護性&#xff0c;還能讓其他開發者更容易理解和協作。本文將探討代碼寫作風格的重要性以及如何培養優雅的編程風格。 ## 一…

【通俗講解電子電路】——從零開始理解生活中的電路(二)

電路分析&#xff1a;看懂簡單的“電路圖” ——從“路線圖”到“工具箱”&#xff0c;掌握電路的底層邏輯 1. 歐姆定律&#xff1a;電的“交通規則” 公式解析&#xff1a;V I R 電壓&#xff08;V&#xff09;&#xff1a;推動電流的動力&#xff08;如電池電壓&#xff…

Linux 第三次腳本作業

源碼編譯安裝httpd 2.4&#xff0c;提供系統服務管理腳本并測試&#xff08;建議兩種方法實現&#xff09; 一、第一種方法 1、把 httpd-2.4.63.tar.gz 這個安裝包上傳到你的試驗機上 2、 安裝編譯工具 (俺之前已經裝好了&#xff09; 3、解壓httpd包 4、解壓后的httpd包的文…

IDEA-插件開發踩坑記錄-第六坑-UAST依賴問題

背景 簡要說明&#xff1a; UAST – Unified Abstract Syntax Tree UAST (Unified Abstract Syntax Tree) is an abstraction layer on the PSI of different programming languages targeting the JVM (Java Virtual Machine). It provides a unified API for working with co…

小米火龍CPU和其他幾代溫度太高的CPU是由誰代工的

小米火龍CPU”并非小米自研芯片&#xff0c;而是指搭載在小米手機上的部分高通驍龍處理器因發熱問題被調侃為“火龍”。以下是幾款被稱為“火龍”的高通CPU及其代工情況&#xff1a; 驍龍810 驍龍810是高通歷史上最著名的“火龍”之一&#xff0c;采用臺積電20nm工藝代工。由于…

CSS3 圓角:實現與優化指南

CSS3 圓角&#xff1a;實現與優化指南 隨著網頁設計的發展&#xff0c;CSS3 圓角已經成為了現代網頁設計中不可或缺的元素之一。本文將詳細講解 CSS3 圓角的基本用法、實現方式以及優化技巧&#xff0c;幫助您在網頁設計中更好地運用這一功能。 一、CSS3 圓角基本用法 1.1 基…

windows服務器更新jar包腳本

【需求】Java每次發布新的版本都需要先kill掉原來的服務&#xff0c;然后再啟動新的包 有了這個腳本只需要把包替換掉&#xff0c;服務會自動kill 以6001 為例 完整的腳本如下 echo off REM 檢查端口 6001 是否被占用 netstat -ano | findstr :6001 > nul IF %ERRORLE…