【原創】k8s原始碼分析-----kubectl(1)api.RESTMapper
本文QQ空間連結:http://user.qzone.qq.com/29185807/blog/1460961715
本文csdn博文連結:http://blog.csdn.net/screscent/article/details/51179485
原始碼為k8s v1.1.1穩定版本
api. RESTMapper是kube-apiserver和kubectl的基礎,在講解kube-apiserver的時候,我們就有簡單的講解api. RESTMapper,但並沒有系統的講解。那麼這一章,我們先系統的講解下
1、構建
原始碼在k8s.io\kubernetes\pkg\api\mapper.go
宣告瞭一個全域性變數RESTMapper,並在init函式中初始化了
那麼什麼時候註冊呢?
在之前,我們需要看看,group/version 是一個很重要的東西
1.1 版本號註冊
我們先看下版本號的註冊
程式碼在k8s.io\kubernetes\pkg\api\registered
先讀取了環境變數KUBE_API_VERSIONS,一般來說這個設定為空,那就是預設的為"v1,extensions/v1beta1"
1.2 GroupMeta
我們再看下groupmeta的儲存
程式碼在k8s.io\kubernetes\pkg\api\latest
groupmeta保持的group的metadata資訊
接下來就是儲存group的資訊
上面有一個函式,用來註冊group
1.3 Scheme
程式碼在k8s.io\kubernetes\pkg\api\register.go
api下注冊了很多types
k8s.io\kubernetes\pkg\api\v1\register.go
v1下注冊了很多的types
1.4 註冊
程式碼在k8s.io\kubernetes\pkg\api\install
從上面的init函式來看,先註冊了“”的一個group資訊,然後初始化了GroupVersiongroupVersion,Group:apiutil.GetGroup(groupVersion),Version:apiutil.GetVersion(groupVersion),Codec:runtime.CodecFor(api.Scheme, groupVersion),groupMeta.Versions = versionsgroupMeta.GroupVersions = groupVersionsgroupMeta.SelfLinker = runtime.SelfLinker(accessor) 在之後NewDefaultRESTMapper
遍歷了所有註冊在Scheme的型別,ignoredKinds型別將直接跳過,這裡我們要注意兩個rootScoped對應的是meta.RESTScopeRoot,其餘的對應的是meta.RESTScopeNamespace
2、DefaultRESTMapper
下面我們來分析下RESTMapper的作用程式碼在k8s.io\kubernetes\pkg\api\meta\restmapper.go在上面mapper呼叫了meta.NewDefaultRESTMapper
我們看看結構體
其實從結構體來看,就是儲存了一個mapping。這個是這個結構的最主要東西 根據上面構建的流程,最後呼叫了Add
3、功能
那麼最後就是mapper的提供的功能了
查詢version版本
根據version和kind查詢相關的資訊
最後返回一個結構體,主要的就是相對應的kind包含的所有資訊
4、總結
首先,註冊所有的version版本,用於版本管理。
然後註冊了所有的group版本,用於group管理
最後,針對group和version註冊了RESTMapper。
RESTMapper用於管理所有物件的資訊。外部要獲取的話,直接通過version,group獲取到RESTMapper,然後通過kind型別可以獲取到相對應的資訊
龔浩華
QQ 月牙寂 道長 29185807
2016年4月18日
(版權宣告:本文為作者原創,如需轉載請通知本人,並標明出處和作者。擅自轉載的,保留追究其侵權的權利。)
如果你覺得本文對你有幫助,可以轉到你的朋友圈,讓更多人一起學習。
第一時間獲取文章,可以關注本人公眾號:月牙寂道長,也可以掃碼關注
相關文章
- [原創] KCP 原始碼分析(上)原始碼
- k8s client-go原始碼分析 informer原始碼分析(1)-概要分析K8SclientGo原始碼ORM
- 【原創】Linux虛擬化KVM-Qemu分析(三)之KVM原始碼(1)Linux原始碼
- EMPI原始碼剖析(原創)原始碼
- mapreduce job提交流程原始碼級分析(二)(原創)原始碼
- 集合原始碼分析[1]-Collection 原始碼分析原始碼
- k8s client-go原始碼分析 informer原始碼分析(6)-Indexer原始碼分析K8SclientGo原始碼ORMIndex
- k8s client-go原始碼分析 informer原始碼分析(4)-DeltaFIFO原始碼分析K8SclientGo原始碼ORM
- [原創] KCP 原始碼解析(下)原始碼
- FCKeditor原始碼分析(一)—–fckeditor.js的中文註釋分析(原創)薦原始碼JS
- Leveldb原始碼分析--1原始碼
- MYSQL原始碼分析1MySql原始碼
- 介面1原始碼分析原始碼
- k8s client-go原始碼分析 informer原始碼分析(5)-Controller&Processor原始碼分析K8SclientGo原始碼ORMController
- linux原始碼分析1Linux原始碼
- k8s daemonset controller原始碼分析K8SController原始碼
- k8s statefulset controller原始碼分析K8SController原始碼
- k8s deployment controller原始碼分析K8SController原始碼
- 以太坊原始碼分析(22)core-genesis創世區塊原始碼分析原始碼
- 原始碼分析系列1:HashMap原始碼分析(基於JDK1.8)原始碼HashMapJDK
- k8s client-go原始碼分析 informer原始碼分析(2)-初始化與啟動分析K8SclientGo原始碼ORM
- 【JDK】JDK原始碼分析-AbstractQueuedSynchronizer(1)JDK原始碼
- 3.21以太貓原始碼分析1原始碼
- 3.23 vchain原始碼分析1AI原始碼
- JDK 原始碼分析(1) Object類JDK原始碼Object
- AFL二三事 -- 原始碼分析 1原始碼
- EOS原始碼分析(1)安裝原始碼
- Architecture(1)AsyncTask原始碼分析原始碼
- 神奇的 BlocksKit(1):原始碼分析BloC原始碼
- [原創]非常粗糙的FileFuzz原始碼[0325更新]原始碼
- 原始碼分析axios(1)~原始碼分析、模擬axios的建立原始碼iOS
- Android 原始碼分析之旅3 1 訊息機制原始碼分析Android原始碼
- Java容器類框架分析(1)ArrayList原始碼分析Java框架原始碼
- Flume-NG原始碼閱讀之Interceptor(原創)原始碼
- newrelic python agent 原始碼分析-1Python原始碼
- 重拾RunLoop之原始碼分析1OOP原始碼
- rxjs 原始碼分析1-(fromEvent)JS原始碼
- web.py原始碼分析: 模板(1)Web原始碼