天天看點

深度解析 | K8S API Server之專業術語

對Kubernetes API Server的相關術語進行介紹,後續會有新的文章對API請求流程、API Server的存儲和擴充點等主題進行介紹。本篇是Kubernetes API Server系列第二篇。 

術語解釋

在簡要概述了API Server和HTTP API空間及其屬性之後,我們現在對文中使用的術語進行更正式的定義。像pod,service、endpoints、deployment等基元組成了Kubernetes類型的對象。我們使用以下術語:

Kind代表一個實體的類型。每個對象都有一個Kind字段,它告訴一個用戶端(如kubectl或者oc)它具體代表的實體,如pod: 

apiVersion: v1 

kind: Pod 

metadata: 

name: webserver 

spec: 

containers: 

– name: nginx 

  image: nginx:1.9 

  ports: 

  – containerPort: 80

有三種類型的Kind:

  • 對象(Objects)表示系統中的一個持久實體。對象可能具有多個資源,用戶端可以使用它們來執行特定的操作。例如:Pod和Namespace。
  • 清單(Lists)是一個或多個種類的實體的資源集合。清單是一般中繼資料的有限集合。例如:PodLists和NodeLists。
  • 特殊用途類别(Special purpose kinds)用于針對對象的特定操作,以及一些非持久化的實體(例如/binding或/status),發現使用APIGroup和APIResource,錯誤結果使用Status等。

API組(API Group):邏輯上關聯的Kinds的集合。例如,所有批處理對象(batch objects)都在批處理API Group中,如Job和ScheduledJob。

版本(Version):每個API Group均存在多個版本。例如,一個組首先出現在v1alpha1中,然後更新到v1beta1,最後更新到v1。在某個版本(如v1beta1)中建立的對象,可以在每個相容的版本(如v1)中檢索到。API Server會進行無損的轉換并傳回所請求的版本中的對象。

資源(Resource):一個系統實體,以JSON格式通過HTTP進行發送和檢索。資源可以暴露為單獨的資源(如…/namespaces/default),或者資源集合(如…/jobs)。

使用API組(API Group)、版本(Version)和資源(Resource)可以唯一的定義一個HTTP路徑:

更确切的說,Jobs的實際路是/apis/batch/v1/namespaces/$NAMESPACE/jobs。但是與類似節點(Node)這種資源相反,Jobs不是一個叢集範圍的資源。是以為了簡潔,我們在路徑中省略了$NAMESPACE這個字段。

需要注意的是Kinds不僅存在于不同的版本中,也可能同時存在于不同的API組之中。例如,Deployment最早處于擴充組(extension group)中,是alpha版本的Kind,後來Deployment更新到了GA版本,并位于自己的組apps.k8s.io中。是以,要唯一的識别Kind,需要同時使用API組(API Group)、版本(Version)和類型名稱(Kind name)。

本文轉移K8S技術社群-

深度解析 | K8S API Server之專業術語

繼續閱讀