028.核心組件-API Server

来源:https://www.cnblogs.com/itzgr/archive/2020/03/17/12509968.html
-Advertisement-
Play Games

一 Kubernetes API Server原理1.1 API Server功能Kubernetes API Server的核心功能是提供Kubernetes各類資源對象(如Pod、RC、Service等)的增、刪、改、查及Watch等HTTP Rest介面,成為集群內各個功能模塊之間數據交互和通... ...


一 Kubernetes API Server原理

1.1 API Server功能

Kubernetes API Server的核心功能是提供Kubernetes各類資源對象(如Pod、RC、Service等)的增、刪、改、查及Watch等HTTP Rest介面,成為集群內各個功能模塊之間數據交互和通信的中心樞紐,是整個系統的數據匯流排和數據中心。同時還有以下一些功能特性。
  1. 是集群管理的API入口。
  2. 是資源配額控制的入口。
  3. 提供了完備的集群安全機制。

1.2 Kubernetes API Server概述

Kubernetes API Server通過一個名為kube-apiserver的進程提供服務,該進程運行在Master上。在預設情況下,kube-apiserver進程在本機的8080埠(對應參數--insecure-port=8080)提供REST服務。同時啟動HTTPS安全埠(--secure-port=6443)來啟動安全機制,加強RESTAPI訪問的安全性。 通常可以通過命令行工具kubectl來與Kubernetes API Server交互,它們之間的介面是RESTful API。也可通過curl直接測試和驗證Kubernetes API Server所提供的介面。 insecure-port非安全方式測試:
  1 [root@k8smaster01 study]# curl localhost:8080/api		#以JSON方式返回
  2 [root@k8smaster01 study]# curl localhost:8080/api/v1		#查看Kubernetes API Server支持的資源對象種類
  3 [root@k8smaster01 study]# curl localhost:8080/api/v1/pods
  4 [root@k8smaster01 study]# curl localhost:8080/api/v1/services	#分別查看集群對應資源列表
secure-port=6443安全方式測試:
  1 [root@k8smaster01 study]# curl -k --cert /opt/k8s/work/admin.pem --key /opt/k8s/work/admin-key.pem https://172.24.8.71:6443/
clipboard
  1 [root@k8smaster01 study]# curl -k --cert /opt/k8s/work/admin.pem --key /opt/k8s/work/admin-key.pem https://172.24.8.71:6443/api/v1/pods
clipboard
  1 [root@k8smaster01 study]# curl -k --cert /opt/k8s/work/admin.pem --key /opt/k8s/work/admin-key.pem https://172.24.8.71:6443/api/v1/services

1.3 API Server架構解析

API Server的架構從上到下可以分為以下幾層。 clipboard
  • API層:主要以REST方式提供各種API介面,除了有Kubernetes資源對象的CRUD和Watch等主要API,還有健康檢查、UI、日誌、性能指標等運維監控相關的API。
註意:Kubernetes從1.11版本開始廢棄Heapster監控組件,轉而使用Metrics Server提供Metrics API介面,進一步完善了自身的監控能力。
  • 訪問控制層:當客戶端訪問API介面時,訪問控制層負責對用戶身份鑒權,驗明用戶身份,核准用戶對Kubernetes資源對象的訪問許可權,然後根據配置的各種資源訪問許可邏輯(AdmissionControl),判斷是否允許訪問。
  • 註冊表層:Kubernetes把所有資源對象都保存在註冊表(Registry)中,針對註冊表中的各種資源對象都定義了:資源對象的類型、如何創建資源對象、如何轉換資源的不同版本,以及如何將資源編碼和解碼為JSON或ProtoBuf格式進行存儲。
  • etcd資料庫:用於持久化存儲Kubernetes資源對象的KV資料庫。etcd的watch API介面對於API Server來說至關重要,因為通過這個介面,API Server創新性地設計了List-Watch這種高性能的資源對象實時同步機制,使Kubernetes可以管理超大規模的集群,及時響應和快速處理集群中的各種事件。
本質上看,API Server與常見的MIS或ERP系統中的DAO模塊類似,可以將主要處理邏輯視作對資料庫表的CRUD操作。 如下以一個完整的Pod調度過程為例,對API Server的List-Watch機制進行說明。 clipboard Pod調度過程中的List-Watch機制: 首先,藉助etcd提供的Watch API介面,API Server可以監聽(Watch)在etcd上發生的數據操作事件,比如Pod創建事件、更新事件、刪除事件等,在這些事件發生後,etcd會及時通知API Server。 如上圖所示API Server與etcd之間的交互:當一個ReplicaSet對象被創建並被保存到etcd中後,etcd會立即發送一個對應的Create事件給API Server,與其類似的6、7、10、11箭頭都是針對Pod的創建、更新事件的。 然後,為了讓Kubernetes中的其他組件在不訪問底層etcd資料庫的情況下,也能及時獲取資源對象的變化事件,API Server模仿etcd的Watch API介面提供了自己的Watch介面,從而,其他組件就能近乎實時地獲取希望獲取的任意資源對象的相關事件通知。 如上圖所示controller-manager、scheduler、kublet等組件與API Server之間的3個標記有List-Watch的虛框表明瞭此過程。 提示:其他組件在監聽希望獲取的資源事件的時候,可以增加過濾條件,如上圖List-Watch3為例,node1節點上的kubelet進程只希望獲取自己節點上的Pod事件。 最後,Kubernetes List-Watch用於實現數據同步的代碼邏輯。客戶端首先調用API Server的List介面獲取相關資源對象的全量數據並將其緩存到記憶體中,然後啟動對應資源對象的Watch協程,在接收到Watch事件後,再根據事件的類型(比如新增、修改或刪除)對記憶體中的全量資源對象列表做出相應的同步修改。 從實現上來看,這是一種全量結合增量的、高性能的、近乎實時的數據同步方式。

二 Kubernetes Proxy API

2.1 Proxy API介紹

Kubernetes API Server最主要的REST介面是資源對象的增、刪、改、查介面,同時還提供了一類很特殊的REST介面:Kubernetes Proxy API介面。 這類介面的作用是代理REST請求,即Kubernetes API Server把收到的REST請求轉發到某個Node上的kubelet守護進程的REST埠,由該kubelet進程負責響應。 Kubernetes Proxy API里關於Node的REST介面路徑為/api/v1/proxy/nodes/{name},其中{name}為節點的名稱或IP地址,包括以下幾個具體介面: /api/v1/proxy/nodes/{name}/pods/ #列出指定節點內所有Pod的信息 /api/v1/proxy/nodes/{name}/stats/ #列出指定節點內物理資源的統計信息 /api/v1/proxy/nodes/{name}/spec/ #列出指定節點的概要信息

三 集群模塊之間的通信

3.1 通信概述

如下圖所示,Kubernetes API Server作為集群的核心,負責集群各功能模塊之間的通信。集群內的各個功能模塊通過API Server將信息存入etcd,當需要獲取和操作這些數據時,則通過API Server提供的REST介面(用GET、LIST或WATCH方法)來實現,從而實現各模塊之間的信息交互。 clipboard 常見的一個交互場景是kubelet進程與API Server的交互。每個Node上的kubelet每隔一個時間周期,就會調用一次API Server的REST介面報告自身狀態,API Server在接收到這些信息後,會將節點狀態信息更新到etcd中。 此外,kubelet也通過API Server的Watch介面監聽Pod信息,如果監聽到新的Pod副本被調度綁定到本節點,則執行Pod對應的容器創建和啟動邏輯;如果監聽到Pod對象被刪除,則刪除本節點上相應的Pod容器;如果監聽到修改Pod的信息,kubelet就會相應地修改本節點的Pod容器。 另一個交互場景是kube-controller-manager進程與API Server的交互。kube-controller-manager中的Node Controller模塊通過API Server提供的Watch介面實時監控Node的信息,並做相應處理。 還有一個比較重要的交互場景是kube-scheduler與API Server的交互。Scheduler通過API Server的Watch介面監聽到新建Pod副本的信息後,會檢索所有符合該Pod要求的Node列表,開始執行Pod調度邏輯,在調度成功後將Pod綁定到目標節點上。 為了緩解集群各模塊對API Server的訪問壓力,各功能模塊都採用緩存機制來緩存數據。 各功能模塊定時從API Server獲取指定的資源對象信息(通過List-Watch方法),然後將這些信息保存到本地緩存中,功能模塊在某些情況下不直接訪問API Server,而是通過訪問緩存數據來間接訪問API Server。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景:測試伺服器 MySQL 資料庫不知何種原因宕機,且無法啟動,而原先的資料庫並沒有備份,重新搭建一個新伺服器把原data 複製出來 進行恢復 1 儘量把原data複製出來(一個都不要少以防意外 其實真正需要的是 你要恢復的庫 和ibdata1 innodb引擎適用) 2 在其他伺服器上 搭建一個 ...
  • MySQL主從複製原理 主伺服器資料庫的每次操作都會記錄在其二進位文件mysql bin.xxx(該文件可以在mysql目錄下的data目錄中看到)中,從伺服器的I/O線程使用專用賬號登錄到主伺服器中讀取該二進位文件,並將文件內容寫入到自己本地的中繼日誌relay log文件中,然後從伺服器的SQL ...
  • 本文檔用於指導在CentOS 6.5下使用nginx反向代理tomcat,併在nginx端支持ssl。 安裝nginx。參見CentOS 6 nginx安裝。 SSL證書申請。參見騰訊SSL證書申請和配置或[使用certbot為站點添加https支持]。 安裝tomcat。目前使用的版本為8.x。一 ...
  • 安裝之前 確認是否已安裝舊版mysql。如有,則卸載(註意需要的數據備份)。 /etc/init.d/mysqld stop yum remove mysql mysql rm rf /var/lib/mysql rm /etc/my.cnf 下載 下載 wget https://dev.mysql ...
  • Linux 系統是一種開源高穩定性的操作系統,在伺服器領域得到廣泛的應用。作為一個Java後臺開發工程師經常需要登錄Linux伺服器部署應用程式,或者是查看程式的運行狀態。一般的Linux伺服器上是不會安裝界面程式的,因此熟練掌握常用的Linux命令對工程師來說非常重要。 本篇日誌是我在學習過程的總 ...
  • 大家在做小程式或者客戶端開發的時候肯定會想使得數據進行聯網,但這樣就必須有對應的後臺伺服器以及資料庫,再加上linux運維等各種細節,往往會對新手比較勸退,在這裡給大家推薦一種 bass(後端即服務) ,不僅支持小程式,還支持網頁端,android,ios多平臺調用,支持Java,python,c ...
  • 1 雙擊 運行 Xming 軟體 軟體下載連接 Xming 2 securecrt 打開 X11 轉發 3 確認 ssh配置文件開啟 X11 轉發 [root@Cobbler-ysw ysw]# cat /etc/ssh/sshd_config | grep X11Forwarding X11For ...
  • vscode 1.42.1 OS: windows 7 x64 1. vscode, cpp extension 本文直接跳過 vscode 安裝, Cpp tools 安裝 2. MinGw 安裝及配置 下載 "MinGW Minimalist GNU for Windows" 安裝過程 安裝所需 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...