本文是一個示例程序,展示一下如何基於Kubernetes的CRD(Custom Resource Defination)& Go-client構建一個查詢Pod詳細信息的服務。
該服務運行起來後,可以通過標準的kubernetes api接口,基於CRD來查詢某個Pod的詳細信息。
代碼的地址在:
https://github.com/weiyuanke/PodInfoLookup
首先我們基於配置文件創建一個我們自定義的資源——Testcr
#PodInfoLookup/yaml/testcrd.yaml
#創建了一個名爲Testcr的自定義資源類型
#group:stable.example.com
#version:v1
#resource:testcrs
$kubectl apply -f yaml/testcrd.yaml
本文假定本地已經有一個kubernetes集羣在運行了,如果沒有的話,可以基於minikube安裝一個。
#拉取最新代碼:
go get github.com/weiyuanke/PodInfoLookup
#啓動服務
go run main.go --kubeconfig=/Users/yuankewei/.kube/config
在另外一個終端創建一個pod
kubectl apply -f yaml/pod.yaml
#服務會監聽到pod的創建,同時將該pod的相關信息寫入Testcr資源中,
add: default/nginx
current list:
&{map[kind:Testcr metadata:map[generation:1 name:29b36e2c6835dded8a115aee874d1ddc resourceVersion:113140 selfLink:/apis/stable.example.com/v1/testcrs/29b36e2c6835dded8a115aee874d1ddc uid:a2440f67-9ca4-11e9-9f23-080027f1737d creationTimestamp:2019-07-02T08:37:32Z] spec:map[podip:nginx podkey:a242bc2d-9ca4-11e9-9f23-080027f1737d podname:29b36e2c6835dded8a115aee874d1ddc poduid:] apiVersion:stable.example.com/v1]}
#同理,刪除pod,會導致Testrc中對應的資源被刪除
kubectl delete -f yaml/pod.yaml
delete: default/nginx
current list: