我們通過Fabric8調(diào)用k8s的功能接口,從而實(shí)現(xiàn)k8s的控制臺(tái)開發(fā),雖然k8s以及提供了控制臺(tái),但是本身的控制臺(tái)已經(jīng)不怎么更新,為了使用更方便,我們決定自己搭建控制臺(tái)并結(jié)合之前的項(xiàng)目完成一個(gè)疊加融合。
展示一下官方的控制臺(tái):

廢話少說,我們來看看如何使用Fabric8。
要使用Fabric8我們就要調(diào)用其中的方法,找不到對(duì)應(yīng)的方法在哪個(gè)類下是使用Fabric8的難題。這次我們就來解析一下我們Fabric8的那些方法藏在哪。
1.首先要說一個(gè)很重要的對(duì)象----client
在每次操作集群前都需要先連接到k8s集群,通過連接方法獲得的就是KubernetesClient接口下的client對(duì)象。之后的所有針對(duì)k8s集群的操作都無一例外地要傳入這個(gè)參數(shù),所以KubernetesClient接口自然成為了我們一窺Fabric8源碼的突破口。

可以看到,這個(gè)接口下定義了很多方法,如果細(xì)心一點(diǎn),你會(huì)在其中發(fā)現(xiàn)很多熟悉的面孔。
比如:
NonNamespaceOperation< Namespace, NamespaceList, DoneableNamespace, Resource<Namespace, DoneableNamespace>> namespaces();
NonNamespaceOperation<Node, NodeList, DoneableNode, Resource<Node, DoneableNode>> nodes();
是不是方法名很熟悉,就是k8s里基本的概念,命名空間和節(jié)點(diǎn),后面還有pods、services這些。找到這些我們就有感覺大致方向沒問題了,然后我們繼續(xù)看這些方法的返回類型。
2.發(fā)現(xiàn)操作的集合
可以看到他們的返回類型分為兩類,一類是MixedOperation、一類是NonNamespaceOperation,根據(jù)名稱我們猜測(cè)這兩個(gè)都是操作的集合,我們之后對(duì)pod、service的操作都應(yīng)該是定義在這里面的。我們點(diǎn)進(jìn)MixedOperation發(fā)現(xiàn)MixedOperation繼承了NonNamespaceOperation接口,這就有意思了,說明MixedOperation很可能包含的操作要多于NonNamespaceOperation。這個(gè)時(shí)候我們已經(jīng)有了很多猜測(cè),是到了證實(shí)一波的時(shí)候了,打開關(guān)系圖表,我們可以看到MixedOperation和NonNamespaceOperation所有的繼承關(guān)系。如下圖:


這樣一對(duì)比MixedOperation多了哪些功能是不是就一目了然了?
比如MixedOperation多繼承了Namespaceable接口,所以會(huì)多一個(gè)Namespaceable接口下定義的inNamespace方法,也就是說MixedOperation下的刪除查找可以根據(jù)namespace也就是命名空間來操作,而NonNamespaceOperation下就沒有這個(gè)方法。再回顧一下這兩個(gè)操作集合的名字,是不是就明白了,一個(gè)是可以根據(jù)命名空間操作的方法集,一個(gè)是不能根據(jù)命名空間操作的方法集。我們?cè)偃タ纯碖ubernetesClient下的哪些方法返回的是NonNamespaceOperation,是namespaces和nodes,這兩個(gè)當(dāng)然不能根據(jù)命名空間進(jìn)行操作,所以是不是更加明白整個(gè)Fabric8的架構(gòu)了?
3.知道了去哪里找方法,還得之道去哪找操作對(duì)象吧
我們之前在KubernetesClient下找到了很多,但是這下面并不是全部呀,雖然pods、service、namespaces等等都有了,但像deployments就沒有呀,這些在哪呢?瞎找嗎?是的,瞎找總是能找到的,但是我們先不急著瞎找,我們先分析一波,說不定就能找到了呢?
還記不記得我們用yaml文件創(chuàng)建pod、service這些時(shí)候填的apiVersion?
pod、service、namespace這些的apiVersion是v1,而deployment和daemonSet的apiVersion是apps/v1,我們?cè)倏聪吕锏姆椒?,是不是有一個(gè)就很顯眼了。

點(diǎn)進(jìn)去它返回的接口,果不其然,我們的daemonSet和deployment就靜靜地躺在這里。

相信通過帶領(lǐng)大家進(jìn)行此次淺析,大家對(duì)整個(gè)Fabric8的結(jié)構(gòu)都有了一定的了解,也對(duì)進(jìn)一步該如何探索有了自己的理解,剩下的就只能等大家自己進(jìn)一步實(shí)踐了。