前言
本篇是Kubernetes第十四篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。
Kubernetes系列文章:
-
Kubernetes介紹 -
Kubernetes環境搭建 -
Kubernetes-kubectl介紹 -
Kubernetes-Pod介紹(-) -
Kubernetes-Pod介紹(二)-生命周期 -
Kubernetes-Pod介紹(三)-Pod調度 -
Kubernetes-Pod介紹(四)-Deployment -
Kubernetes-Service介紹(一)-基本概念 -
Kubernetes-Service介紹(二)-服務發現 -
Kubernetes-Service介紹(三)-Ingress(含最新版安裝踩坑實踐) -
Kubernetes-網絡 -
Kubernetes-存儲(一) -
Kubernetes-存儲(二)
什么是API Server
Kubernetes API Server 是運行在Master節點上的kube-apiserver進程提供的服務。 該服務是集群內各個功能模塊之間數據交互和通信的中心樞紐,是整個系統的數據總線和數據中心。由於API Server承擔了系統內關鍵的數據通信部分,所以API Server的性能高低決定了集群性能的高低。
Kubernetes API Server的功能:
-
提供了集群管理的REST API接口(包括認證授權、數據校驗以及集群狀態變更);
-
提供其他模塊之間的數據交互和通信的樞紐(其他模塊通過API Server查詢或修改數據,只有API Server才直接操作etcd;
-
資源配額控制的入口;
-
擁有完備的集群安全機制;
API Server工作原理圖
-
API層,提供針對資源CRUD的和監控的接口和健康檢查、日志、性能指標等運維相關接口;
-
訪問控制層,當客戶端訪問API的時候,負責對用戶的權限做驗證,根據配置的的各種資源訪問權限判斷是否可以訪問;
-
注冊表層,Kubernetes把所有資源對象都保存在注冊表中,針對注冊表中的各種資源對象定義了相關數據類型和創建、轉換、編碼的方法;
-
ETCD數據庫層,用於持久化存儲資源對象的。K8S使用etcd的watch API接口設計了List-Watch高性能資源同步機制,使得系統可以管理大規模的集群和快速及時的處理集群中的各種事件;

Kubernetes API介紹
如何訪問kubernetes API
Kubernetes通過kube-apiserver這個進程提供服務,該進程運行在單個k8s-master節點上。默認有兩個端口。
本地端口
-
該端口用於接收HTTP請求;
-
該端口默認值為8080,可以通過API Server的啟動參數--insecure-port的值來修改默認值;
-
默認的IP地址為localhost,可以通過啟動參數--insecure-bind-address的值來修改該IP地址;
-
非認證或授權的HTTP請求通過該端口訪問API Server;
安全端口
-
該端口默認值為6443,可通過啟動參數--secure-port的值來修改默認值;
-
默認IP地址為非本地localhost網絡端口,通過啟動參數--bind-address設置該值;
-
該端口用於接收HTTPS請求;
-
用於基於Token文件或客戶端證書及HTTP Base的認證;
-
用於基於策略的授權;
-
默認不啟動HTTPS安全訪問控制;
Kubernetes API訪問方式

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進行管理。

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

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