Kubernetes-API Server

前言

本篇是Kubernetes第十四篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。

Kubernetes系列文章:
  1. Kubernetes介紹
  2. Kubernetes環境搭建
  3. Kubernetes-kubectl介紹
  4. Kubernetes-Pod介紹(-)
  5. Kubernetes-Pod介紹(二)-生命周期
  6. Kubernetes-Pod介紹(三)-Pod調度
  7. Kubernetes-Pod介紹(四)-Deployment
  8. Kubernetes-Service介紹(一)-基本概念
  9. Kubernetes-Service介紹(二)-服務發現
  10. Kubernetes-Service介紹(三)-Ingress(含最新版安裝踩坑實踐)
  11. Kubernetes-網路
  12. Kubernetes-存儲(一)
  13. Kubernetes-存儲(二)

什麼是API Server

Kubernetes API Server 是運行在Master節點上的kube-apiserver進程提供的服務。 該服務是集群內各個功能模組之間數據交互和通訊的中心樞紐,是整個系統的數據匯流排和數據中心。由於API Server承擔了系統內關鍵的數據通訊部分,所以API Server的性能高低決定了集群性能的高低。

Kubernetes API Server的功能:

  1. 提供了集群管理的REST API介面(包括認證授權、數據校驗以及集群狀態變更);

  2. 提供其他模組之間的數據交互和通訊的樞紐(其他模組通過API Server查詢或修改數據,只有API Server才直接操作etcd;

  3. 資源配額控制的入口;

  4. 擁有完備的集群安全機制;

API Server工作原理圖

  1. API層,提供針對資源CRUD的和監控的介面和健康檢查、日誌、性能指標等運維相關介面;

  2. 訪問控制層,當客戶端訪問API的時候,負責對用戶的許可權做驗證,根據配置的的各種資源訪問許可權判斷是否可以訪問;

  3. 註冊表層,Kubernetes把所有資源對象都保存在註冊表中,針對註冊表中的各種資源對象定義了相關數據類型和創建、轉換、編碼的方法;

  4. ETCD資料庫層,用於持久化存儲資源對象的。K8S使用etcd的watch API介面設計了List-Watch高性能資源同步機制,使得系統可以管理大規模的集群和快速及時的處理集群中的各種事件;

img
img

Kubernetes API介紹

如何訪問kubernetes API

Kubernetes通過kube-apiserver這個進程提供服務,該進程運行在單個k8s-master節點上。默認有兩個埠。

本地埠

  1. 該埠用於接收HTTP請求;

  2. 該埠默認值為8080,可以通過API Server的啟動參數–insecure-port的值來修改默認值;

  3. 默認的IP地址為localhost,可以通過啟動參數–insecure-bind-address的值來修改該IP地址;

  4. 非認證或授權的HTTP請求通過該埠訪問API Server;

安全埠

  1. 該埠默認值為6443,可通過啟動參數–secure-port的值來修改默認值;

  2. 默認IP地址為非本地localhost網路埠,通過啟動參數–bind-address設置該值;

  3. 該埠用於接收HTTPS請求;

  4. 用於基於Token文件或客戶端證書及HTTP Base的認證;

  5. 用於基於策略的授權;

  6. 默認不啟動HTTPS安全訪問控制;

Kubernetes API訪問方式

img
img
curl
curl localhost:8080/api
curl localhost:8080/api/v1/pods
curl localhost:8080/api/v1/services
curl localhost:8080/api/v1/replicationcontrollers
Kubectl Proxy

Kubectl Proxy代理程式既能作為API Server的反向代理,也能作為普通客戶端訪問API Server的代理。通過master節點的8080埠來啟動該代理程式。

kubectl客戶端

命令行工具kubectl客戶端,通過命令行參數轉換為對API Server的REST API調用,並將調用結果輸出。

編程方式調用

開發基於Kubernetes的管理平台,比如調用Kubernetes API來完成Pod、Service、RC等資源對象的圖形化創建和管理介面。可以使用Kubernetes提供的Client Library。

通過API Server訪問Node、Pod和Service

Kubernetes API Server最主要的REST介面是資源對象的增刪改查,另外還有一類特殊的REST介面—Kubernetes Proxy API介面,這類介面的作用是代理REST請求,即Kubernetes API Server把收到的REST請求轉發到某個Node上的kubelet守護進程的REST埠上,由該kubelet進程負責響應。

Node相關介面

關於Node相關的介面的REST路徑為:/api/v1/proxy/nodes/{name},其中{name}為節點的名稱或IP地址。

/api/v1/proxy/nodes/{name}/pods/    #列出指定節點內所有Pod的資訊
/api/v1/proxy/nodes/{name}/stats/   #列出指定節點內物理資源的統計資訊
/api/v1/prxoy/nodes/{name}/spec/    #列出指定節點的概要資訊

這裡獲取的Pod資訊來自Node而非etcd資料庫,兩者時間點可能存在偏差。如果在kubelet進程啟動時加–enable-debugging-handles=true參數,那麼kubernetes Proxy API還會增加以下介面:

/api/v1/proxy/nodes/{name}/run      #在節點上運行某個容器
/api/v1/proxy/nodes/{name}/exec     #在節點上的某個容器中運行某條命令
/api/v1/proxy/nodes/{name}/attach   #在節點上attach某個容器
/api/v1/proxy/nodes/{name}/portForward   #實現節點上的Pod埠轉發
/api/v1/proxy/nodes/{name}/logs     #列出節點的各類日誌資訊
/api/v1/proxy/nodes/{name}/metrics  #列出和該節點相關的Metrics資訊
/api/v1/proxy/nodes/{name}/runningpods  #列出節點內運行中的Pod資訊
Pod相關介面
/api/v1/proxy/namespaces/{namespace}/pods/{name}/{path:*}      #訪問pod的某個服務介面
/api/v1/proxy/namespaces/{namespace}/pods/{name}               #訪問Pod
Service相關介面
/api/v1/proxy/namespaces/{namespace}/services/{name}

Pod的proxy介面的作用:在Kubernetes集群之外訪問某個pod容器的服務(HTTP服務),可以用Proxy API實現,這種場景多用於管理目的,比如逐一排查Service的Pod副本,檢查哪些Pod的服務存在異常問題。

集群功能模組之間的通訊

Kubernetes API Server作為集群的核心,負責集群各功能模組之間的通訊,集群內各個功能模組通過API Server將資訊存入etcd,當需要獲取和操作這些數據時,通過API Server提供的REST介面(get/list/watch方法)來實現,從而實現各模組之間的資訊交互。

kubelet與API Server交互

每個Node節點上的kubelet定期就會調用API Server的REST介面報告自身狀態,API Server接收這些資訊後,將節點狀態資訊更新到etcd中。kubelet也通過API Server的Watch介面監聽Pod資訊,從而對Node機器上的Pod進行管理。

![image-20211222071300489](/Users/wangtongzhou/Library/Application Support/typora-user-images/image-20211222071300489.png)

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綁定到目標節點上。

image.png
image.png

結束

歡迎大家點點關注,點點贊!

Tags: