[TOC]html
REST API 是 Kubernetes 的基礎結構,全部的操做和組件間的通訊,包括外部的用戶命令,都是由 API Server 處理的 REST API 調用。所以,Kubernetes 中的全部事物都被視爲一個 API 對象而且都有一個與之對應的 API 入口。git
和API Server的交互能夠採用REST API,也能夠採用kubectl等命令行工具github
Kubernetes 支持多個 API 版本,每一個版本都在不一樣的 API 路徑下,例如 /api/v1 或者 /apis/extensions/v1beta1web
更多關於API的介紹api
Kubernetes對象是會進行持久化的,一旦建立對象,Kubernetes 系統將持續工做以確保對象存在。經過建立對象,能夠有效地告知 Kubernetes 系統,所須要的集羣工做負載看起來是什麼樣子的,這就是 Kubernetes 集羣的 指望狀態。Kubernetes 對象包含以下信息:bash
對Kubernetes 對象的操做包括:建立、修改、刪除、升級等,這些都須要使用Kubernetes API 進行操做。微信
每一個 Kubernetes 對象包含兩個嵌套的對象字段,它們負責管理對象的配置:對象 spec 和 對象 status。spec 必須提供,它描述了對象的 指望狀態 —— 但願對象所具備的特徵。status 描述了對象的 實際狀態,它是由 Kubernetes 系統提供和更新。在任什麼時候刻,Kubernetes 控制平面一直處於活躍狀態,管理着對象的實際狀態以與咱們所指望的狀態相匹配。app
CRD存在於全部namespace下ui
CustomResourceDefinition(CRD)是v1.7+新增的無需改變代碼就能夠擴展Kubernetes API的機制,用來管理自定義對象。
在Kubernetes中一切均可視爲資源,系統提供了不少默認資源類型,如 Pod、Deployment、Service、Volume等一系列資源,一種資源就是Kubernetes API中的一個端點,它存儲着某種API 對象的集合,自定義資源是對Kubernetes API的擴展,在一個運行中的集羣內,自定義資源能夠經過動態註冊出現和消失,集羣管理員能夠獨立於集羣自己更新自定義資源。
自定義資源自己能夠進行簡單地存儲和索取結構化數據,可是隻有和控制器結合後才能成爲一種真正的declarative API(聲明式API), 控制器將結構化數據解釋爲用戶所指望狀態的記錄,而且不斷地採起行動來實現和維持該狀態。定製化控制器是用戶能夠在運行中的集羣內部署和更新的一個控制器,它獨立於集羣自己的生命週期。 定製化控制器能夠和任何一種資源一塊兒工做,當和定製化資源結合使用時尤爲有效。
CustomResourceDefinition (CRD)是一個內建的API, 它提供了一個簡單的方式來建立自定義資源。
當建立一個新的自定義資源定義(CRD)時,Kubernetes API Server 經過建立一個新的RESTful資源路徑進行應答
kind: CustomResourceDefinition
CRD以下,首先須要先定義和建立一個自定義資源kind: CustomResourceDefinition
,指定API Group的名稱如group: networking.istio.io
,
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
annotations:
helm.sh/hook: crd-install
creationTimestamp: 2018-10-15T10:06:40Z
generation: 1
labels:
app: istio-pilot
name: virtualservices.networking.istio.io
resourceVersion: "226955722"
selfLink: /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/virtualservices.networking.istio.io
uid: 02eb8d88-d062-11e8-a4b4-005056b84e17
spec:
group: networking.istio.io
names:
kind: VirtualService
listKind: VirtualServiceList
plural: virtualservices
singular: virtualservice
scope: Namespaced
version: v1alpha3
status:
acceptedNames:
kind: VirtualService
listKind: VirtualServiceList
plural: virtualservices
singular: virtualservice
conditions:
- lastTransitionTime: 2018-10-15T10:06:40Z
message: no conflicts found
reason: NoConflicts
status: "True"
type: NamesAccepted
- lastTransitionTime: 2018-10-15T10:06:40Z
message: the initial names have been accepted
reason: InitialNamesAccepted
status: "True"
type: Established
複製代碼
這樣就建立了一個新的區分命名空間的RESTful API斷點:/apis/networking.istio.io/v1alpha3/namespaces/*/virtualservices/...
,而後可使用此端點URL來建立和管理自定義對象,這些對象的kind就是上面建立的CRD中指定的kind: VirtualService
對象。
在CRD對象建立完成以後就建立自定義對象(instances)了,這些自定義對象實例就能夠相似Kubernetes的經常使用對象如Deployment、Service、Pod等同樣進行CURD操做了。 自定義對象能夠包含自定義的字段,這些字段能夠包含任意的JSON,具體的字段要根據對象去定義,主要是spec域。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: wudebao-web
spec:
hosts:
- "www.wudebao-web.com"
gateways:
- wudebao-web-gateway
http:
- match:
- uri:
exact: /wudebao
route:
- destination:
port:
number: 54321
host: wudebao-web
複製代碼
查詢全部CRD:
kubectl get crd |grep istio
複製代碼
使用CRD(CustomResourceDefinitions)擴展Kubernetes API
Accessing Kubernetes CRDs from the client-go package
【"歡迎關注個人微信公衆號:Linux 服務端系統研發,後面會大力經過微信公衆號發送優質文章"】