我們首先將對Kubernetes API Server進行概括性的介紹,然后對一些術(shù)語進行介紹,最后對API請求流程進行解釋。后續(xù)會有新的文章對API
Server的存儲和擴展點等主題進行介紹。本篇是Kubernetes?API Server系列第一篇。? ?
API Server簡介
在概念層面上,Kubernetes由一系列不同角色的節(jié)點組成。Mater節(jié)點上的控制平面由API Server,Controller
Manager和Scheduler組成。API Server是中心管理實體,是與分布式存儲組件(etcd)進行直接通信的唯一組件。API
Server提供以下核心功能:
*
服務(wù)于被集群內(nèi)部工作節(jié)點和外部kubectl使用的Kubernetes API
*
為集群組件提供代理,如Kubernetes UI
*
允許對對象(例如pod和service等)的狀態(tài)進行操作
*
保持分布式存儲(etcd)中對象的狀態(tài)
Kubernetes API是HTTP API,以JSON作為主要的結(jié)構(gòu)化數(shù)據(jù)的序列化格式,但同時它也支持Google的Protocol
Buffers格式進行描述(主要用于集群內(nèi)部通信)。
考慮到可擴展性原因,Kubernetes支持多個API版本,分別處于不同的API路徑上,例如/api/v1或/apis/extensions/v1beta1。不同的API版本意味著不同等級的穩(wěn)定性和支持度:
*
Alpha級別,例如v1alpha1,默認情況下被禁用,對此功能的支持可能隨時會被舍棄,而且不會進行通知,因此只能在短期測試的集群中使用。
*
Beta級別,例如v2beta3,默認情況下啟用,意味著代碼已經(jīng)經(jīng)過良好的測試,但對象的語義可能會在后續(xù)beta版或stable版中以不兼容的方式進行更改。
*
Stable級別,例如v1,將出現(xiàn)在多個后續(xù)版本的released軟件中。
現(xiàn)在來看看HTTP
API空間是如何組成的。在頂層,按照以下幾個組進行區(qū)分:核心組(均位于/api/v1路徑下,由于歷史原因位于此路徑,而不在/apis/core/v1路徑下),命名組(位于/apis/$NAME/$VERSION路徑下),以及系統(tǒng)范圍實體(如/metrics)。
接下來我們將聚焦一個具體的例子:批處理(batch)操作。在Kubernetes
1.5中,存在兩個版本的批處理操作:/apis/batch/v1和/apis/batch/v2alpha1,分別暴露不同的可以進行查詢和操作的實體集。
下面我們展示一個與API進行交互的示范性例子(使用Minishift工具和代理命令行oc proxy –port=8080,以直接對API進行訪問):
$ curl http://127.0.0.1:8080/apis/batch/v1?
{?
“kind”: “APIResourceList”,?
“apiVersion”: “v1”,?
“groupVersion”: “batch/v1”,?
“resources”: [?
{?
“name”: “jobs”,?
“namespaced”: true,?
“kind”: “Job”?
},?
{?
“name”: “jobs/status”,?
“namespaced”: true,?
“kind”: “Job”?
}?
]?
}
接下來,使用新的Alpha版本:
$ curl http://127.0.0.1:8080/apis/batch/v2alpha1?
{?
“kind”: “APIResourceList”,?
“apiVersion”: “v1”,?
“groupVersion”: “batch/v2alpha1”,?
“resources”: [?
{?
“name”: “cronjobs”,?
“namespaced”: true,?
“kind”: “CronJob”?
},?
{?
“name”: “cronjobs/status”,?
“namespaced”: true,?
“kind”: “CronJob”?
},?
{?
“name”: “jobs”,?
“namespaced”: true,?
“kind”: “Job”?
},?
{?
“name”: “jobs/status”,?
“namespaced”: true,?
“kind”: “Job”?
},?
{?
“name”: “scheduledjobs”,?
“namespaced”: true,?
“kind”: “ScheduledJob”?
},?
{?
“name”: “scheduledjobs/status”,?
“namespaced”: true,?
“kind”: “ScheduledJob”?
}?
]?
}
通常情況下,通過標(biāo)準(zhǔn)HTTP的POST、PUT、DELETE和GET動作,以JSON作為默認有效載荷,Kubernetes
API支持在給定路徑上進行創(chuàng)建(create)、更新(update)、刪除(delete)、檢索(retrieve)操作。
大多數(shù)API對象會區(qū)分對象的期望狀態(tài)規(guī)格(specification)和對象的當(dāng)前狀態(tài)。對象規(guī)格(specification)是對期望狀態(tài)的完整描述,并保存在持久化存儲中。
本文轉(zhuǎn)移K8S技術(shù)社區(qū)-深度解析 | K8S API Server之入門須知
<https://yq.aliyun.com/go/articleRenderRedirect?url=http%3A%2F%2Fk8s.cn%2Findex.php%2F2017%2F07%2F03%2F510%2F>
熱門工具 換一換