前情提要
之前的文章已經(jīng)將 kubebuilder 的開發(fā)環(huán)境和本地調(diào)試環(huán)境進(jìn)行了簡介和部署實(shí)現(xiàn)铃诬,流程基本走通,同時(shí)座哩,開發(fā)也涉及了部分的細(xì)節(jié)問題其實(shí)在之前的流程隱去了原理的講解徒扶,譬如 GOPROXY 的配置,Dockerfile 的本地編譯根穷,Golang 聯(lián)調(diào)的配置姜骡,編譯運(yùn)行的命令分布處理等問題都沒有進(jìn)行展開,所以本篇文章將會對以上幾個(gè)方面詳細(xì)展開并作分析屿良。
服務(wù)端測試環(huán)境
- kubebuilder 開發(fā)環(huán)境部署參考:
https://www.cnblogs.com/vpc123/articles/14456626.html
- kubebuilder 證書也驗(yàn)證部署(Webhook 調(diào)用):
說明: 由于webhook 開發(fā)調(diào)試的需要溶浴,一方面需要將證書拷貝到本地,同時(shí)還需要部署證書認(rèn)證的組件在集群中從而進(jìn)行集群的調(diào)度和實(shí)現(xiàn)管引。
# 下載獲取 cert-manager.yaml
wget https://github.com/jetstack/cert-manager/releases/download/v1.2.0/cert-manager.yaml
kubectl apply -f cert-manager.yaml
kubectl get pod -A | grep cert
本地開發(fā)環(huán)境(Goland)
系統(tǒng)配置
項(xiàng)目開發(fā)的話,代碼依賴問題一般需要通過本地的 GOPATH 處理 go 項(xiàng)目中的包依賴問題闯两,或者通過 govendor 進(jìn)行依賴管理褥伴;
將需要二次開發(fā)的項(xiàng)目拷貝到本機(jī)的 $GOPATH/src 目錄下谅将,然后通過 GOLAND 進(jìn)行編輯和開發(fā)。
備注說明:
存在一個(gè)很扯的問題重慢,如果環(huán)境中配置過了 GOPATH ,系統(tǒng)默認(rèn)會通過 GOPATH 處理語言包的依賴問題的饥臂,如果恰巧你的 golang 版本是 1.16+ 就要小心一點(diǎn)了,你以為 go get -u -v http://xxxxxxx 的資源會下載到什么地方呢似踱!src 目錄嗎隅熙?可能會讓你大跌眼睛的呢!資源文件會下載到對應(yīng)路徑的緩存目錄中核芽,我也是驚呆了囚戚。
單元測試
因?yàn)楸疚氖墙榻B kubebuilder 如何本地和遠(yuǎn)程環(huán)境進(jìn)行聯(lián)調(diào)開發(fā)的,項(xiàng)目需要在 K8s/k3s 環(huán)境進(jìn)行初始化轧简,然后創(chuàng)建對應(yīng)的 crd 資源驰坊,隨后將項(xiàng)目拷貝到本地的機(jī)器進(jìn)行開發(fā)調(diào)試,開發(fā)調(diào)試需要同步以下幾種文件資源從而保證資源接口可以調(diào)度查詢的實(shí)現(xiàn)呦哮独!
集群調(diào)度配置文件
需要提前將 K8s 集群的 ~/.kube/config 的集群配置文件拷貝存放到自定義的目錄位置拳芙;
比如本地測試聯(lián)調(diào)的文件路徑地址,E:\GoWorks\crt.kube-
webhhook 證書文件
需要提前將 K8s 集群的 /etc/kubernetes/pki/ 的 apiserver 調(diào)度證書文件存放到自定義的目錄位置(主要 apiserver.crt 和 apiserver.key )皮璧;
比如本地測試的證書文件路徑地址舟扎,C:\Users\hspcadmin\AppData\Local\Temp\k8s-webhook-server\serving-certs,拷貝并重命名文件為(tls.crt & tls.key).
-
IDE 控制臺配置
開發(fā)流程
- kubebuilder 項(xiàng)目初始化流程:
# 初始化項(xiàng)目
mkdir -p $GOPATH/src/helloworld
cd $GOPATH/src/helloworld
kubebuilder init --domain com.vpc123
# 創(chuàng)建API(CRD和Controller)
cd $GOPATH/src/helloworld
kubebuilder create api \
--group webapp \
--version v1 \
--kind Guestbook
# 創(chuàng)建 Webhook
cd $GOPATH/src/helloworld
kubebuilder create webhook \
--group helloworld\
--version v1 \
--kind helloworld\
--defaulting \
--programmatic-validation
# 資源清理
kubectl delete -f config/samples/*
kustomize build config/default | kubectl delete -f -
make uninstall
# 資源部署
## 方式一:
### 環(huán)境中生成 crd 資源即可用于遠(yuǎn)程調(diào)試開發(fā)流程悴务,后續(xù)幾步均為本地環(huán)境測試流程
make install
### 更換自己的鏡像倉庫睹限,進(jìn)行鏡像編譯(經(jīng)測試,直接打制編譯的鏡像存在一些問題)
make docker-build docker-push IMG=12589/elasticweb:001
### 部署集成了webhook功能的controller
make deploy IMG=12589/elasticweb:001
## 方式二:
### 環(huán)境中生成 crd 資源即可用于遠(yuǎn)程調(diào)試開發(fā)流程惨寿,后續(xù)幾步均為本地環(huán)境測試流程
make install
### 控制臺輸出日志編譯調(diào)試
make run
拓展閱讀
問題1:
服務(wù)協(xié)議: ProtocolSCTP
使用 ProtocolTCP
針對對外暴露的服務(wù)協(xié)議來說邦泄。
問題2:
webhook 調(diào)度時(shí),報(bào)證書路徑錯(cuò)誤裂垦,謹(jǐn)慎核查 tls 的證書路徑呦顺囊!