0x01 client-go
1、簡介
Client-go是kubernetes官方發布的調用K8S API的golang語言包,可以用來開發K8S的管理服務、監控服務,配合前端展示,就可以開發出一款定制化的、可視化的管理或監控工具。目前最新版本為7.0,對應K8S的版本為1.10,訪問鏈接:https://github.com/kubernetes/client-go
其中client-go與K8S版本對應關系為:
由於目前我們測試環境的K8S集群版本為1.5.2,所以此處我們使用client-go2.0版本。
2、安裝
可以直接使用go語言第三方包管理工具下載client-go,或者使用go語言自帶的管理工具下載,需要特別注意的是,client-go包與k8s版本號有一定的對應關系,一定要選擇下載與目標k8s版本對應的版本號。下載方式為:
$ go get github.com/kubernetes/client-go
或者,也可以自己手動去github下載下面的幾個包:
- github.com/kubernetes/client-go
- github.com/google/gofuzz
- github.com/golang/glog
然后將它們放在$GOPATH下面的src文件夾中對應的文件夾下。例如:github.com/google/gofuzz,存放的目錄為$GOPATH/src/github.com/google/gofuzz。
不過,需要特別注意的是,不知什么原因,網絡上面的教程下載的client-go包存放的位置都是$GOPATH/src/k8s.io/client-go。其實go代碼中引用的client-go包方式與client-go包在本地的存放位置有關,而該存放位置並沒有嚴格的控制,可以隨意存放(如果是手動下載的話),所以此處我們也將github.com/kubernetes/client-go存放位置修改為$GOPATH/src/k8s.io/client-go,如下圖:
所以此時在go代碼中引用client-go時的方式就變成了下面這樣:
3、開發
Client-go開發k8s有兩種方式,一種是in cluster模式,另一種是out of cluster模式,至於二者的區別,大致來看可以認為我們開發的go服務是否放在K8S集群內運行,在集群內運行則為in cluster模式,否則為out of cluster模式。此處我們此次采用的是out of cluster模式。
我們的項目名稱為k8smanage,該項目下主要的文件為兩個:main.go和config.yaml。其中,main.go中為我們訪問k8s的主要代碼,而config.yaml中保存了目標k8s集群的連接信息。其中,main.go中代碼截圖如下所示:
而config.yaml中的內容如下所示:
那么對於一個新的k8s集群來說,我們應該如何編寫config.yaml文件中的內容呢?其實比較簡單,在k8s集群的master上通過指令“kubectl config view”獲取的信息就是我們config.yaml中的內容:
不過,為了直接通過config.yaml文件就能獲取目標k8s集群的連接信息,我們沒有直接使用空的clusters字段值,而是補充了里面的server字段信息,server字段值為k8s master節點上apiServer的訪問地址。
到此,config.yaml文件中的配置信息就配置完成了。通過main.go中開頭的代碼部分就可以正常訪問k8s集群了。
0x02 python-k8sclient
1、簡介
python-k8sclient貌似是OpenStack維護的調用K8S API的python語言包,可以用來開發K8S的管理服務、監控服務,配合前端展示,就可以開發出一款定制化的、可視化的管理或監控工具。目前其最新版本為0.4.0,下載鏈接:https://pypi.org/project/python-k8sclient/
2、安裝
- 手動下載:手動去https://pypi.org/project/python-k8sclient/下載該包,然后解壓並在其根目錄下運行python setup.py install
- Pip安裝:pip install python-k8sclient
- Pycharm下載:基本操作,此處不再贅述
3、開發
k8sclient開發比較簡單,只需要提供K8S master的訪問地址即可,如果設置了訪問賬號密碼,那么還需要提供它們。我這里的K8S集群未設置任何權限認證功能,所以可以直接通過URL訪問,部分示例代碼如下:
至於其他的開發,主要是調用k8sclient包的接口,主要功能接口可以參看k8sclient源碼,部分接口功能如下:
- Pod:新建、查詢所有、按名稱查詢、更新、刪除
- RC:新建、查詢所有、按名稱查詢、更新、刪除
- Service:新建、查詢所有、按名稱查詢、更新、刪除
- Deployment:新建、查詢所有、按名稱查詢、更新、刪除
0x03 Kubernetes官方維護的Python客戶端client-python
地址:https://github.com/kubernetes-client/python