本篇概覽
《kubebuilder實戰》系列已經寫了七篇,前面曾遇到不少問題,磕磕碰碰解決後,打算在本篇集中小結作為備忘,主要由以下幾部分組成:
CRD的Status欄位;選擇合適的映象倉庫本地執行controller時跳過webhookcontroller的pod有兩個容器常用操作命令整理接下來挨個整理,今天的內容不寫程式碼,咱們來一次輕鬆愉快的閱讀;CRD的Status欄位這個坑算是自己挖的,希望您能提前避開;回顧elasticweb的CRD,其資料結構程式碼如下圖:該CRD的Status資料結構只有一個欄位RealQPS,該欄位的Tag(也就是上圖紅框),裡面的omitempty屬性非常重要!!!如果RealQPS的Tag中沒有omitempty屬性,會發生什麼事情呢?實際上,在開發webhook之前,我一時大意漏掉了RealQPS的omitempty屬性,但是整個controller可以正常工作,elasticweb的功能也達到了咱們的預期,也就是說status的欄位如果沒有omitempty屬性,不影響operator的功能;但是,在啟用了webhook之後,建立資源物件時就報錯了:zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl apply -f config/samples/elasticweb_v1_elasticweb.yamlnamespace/dev createdThe ElasticWeb "elasticweb-sample" is invalid: status.realQPS: Invalid value: "null": status.realQPS in body must be of type integer: "null"
也就是說,Status資料結構的欄位中,如果json tag沒有omitempty屬性,在啟用了webhook之後建立資源物件會失敗;選擇合適的映象倉庫看過之前文章的您,應該還記得構建映象的命令:
make docker-build docker-push IMG=bolingcavalry/elasticweb:001
因為我在hub.docker.com上註冊的帳號是bolingcavalry,因此上述命令可以將做好的本地映象推送到hub.docker.com的倉庫中(記得提前用docker login命令登入);只要映象上傳到了hub.docker.com,能訪問外網的kubernetes就都可以直接使用這個operator了,非常方便;但是上傳到hub.docker.com的過程是痛苦的,動輒半小時的等待,還伴隨著超時退出(映象加速在下載的時候效果明顯,但是上傳的時候,我這看似乎沒啥效果,可能是我不會用,如果您知道還請指點);還好,我在阿里雲註冊過,可以使用上面的映象倉庫,入口如下圖:如下圖,新建公開型別的映象倉庫,點選紅框2,可以看到詳細的登入、上傳、拉取命令,點選紅框3可以修改登入密碼:其次,本地啟動controller的命令,以前是make run,現在改成如下命令,即增加了一個引數:make run ENABLE_WEBHOOKS=false
現在controller能正常啟動了,功能也正常,只是webhook相關的功能全部都不生效了;controller的pod有兩個容器如果controller部署在kubernetes環境內,其是以pod的形態存在的,也就是說咱們寫的webhook、reconcile程式碼都是在這個pod中執行的;上述pod內實際上有兩個容器,用kubectl describe命令看看這個pod,如下圖,可見名為manager的容器才是controller程式碼執行的地方:
最新評論