生產實踐:基于K8S私有化交付要注意這幾點問題
在使用 k8s 進行項目私有化部署時,會遇到很多問題,以下把作者經常遇到的一些問題以及需要注意的點分享給各位。
資源依賴問題
在進行私有化部署時,我們的系統會依賴很多外部資源與服務,比如:
- 服務器資源
- 外部服務
- 網絡相關資源
1.服務器資源申請
需要提前根據客戶提供的業務數據,以及結合自身系統微服務數量等維度,梳理出一個服務器資源配置清單,提前申請資源。
示例:
名稱 | 類型 | 操作系統版本 | CPU | 磁盤 | 內存 | 數量 |
中間件服務器 | ECS | CentOS 7.9 | 8 | 500 | 16 | 5 |
應用服務器 | ECS | 16 | 500 | 32 | 20 | |
K8S Master | 云服務 | 1 | ||||
NAS | 云服務 |
2.外部服務
結合業務需求,梳理依賴的外部服務清單,比如短信服務、地圖Api、公眾號、小程序等,需提前申請,以免影響項目交付。
3.網絡相關資源
- SSL證書,如果系統開放到外網必須要有 SSL證書,建議申請通配符證書,這種沒有域名數量限制問題,如下圖,只要屬于 feishu.cn 下的二級域名,都可以用此證書。
ssl證書
- 公網443/80 端口備案,部分應用強制依賴這些端口,比如小程序,需要提前進行備案,而且周期較長。
負載均衡器選擇
在未使用k8s時,常用Nginx進行SLB和前端資源部署,類似如下圖
而使用k8s以后,Nginx功能被削弱了很多,比如轉發規則,可以放在Ingress 進行配置,前端資源也部署k8s 中
而Nginx只充當 SLB的作用,例如把前端請求轉發到Ingress 中,功能很單一,而不管是公有云或私有云,廠商都提供了SLB,因此就不需要Nginx這一層,由廠商提供的SLB 直接轉發請求至Ingress 即可。
SSL證書掛載
有了廠商提供的SLB,那么 SSL證書也沒必要掛載在k8s 的 Ingress上,直接掛載SLB即可,如下圖,經過負載均衡器的請求都進行了證書剝離,轉換成了 http
系統開放策略整理
根據業務需求,提前整理系統網絡開放策略清單,交由相關人員進行配置,比如系統 A 內網訪問,系統B外網訪問,如下圖
名稱 | 域名 | 是否對外 | 協議 | 外網映射端口 | DNS 解析 IP | SLBIP | 目標 IP |
系統 A | a.feishu.com | 是 | https | 443 | 公網 IP | 172.18.xx.xx | xxx |
系統 b | b.feishu.com | 否 | http | 無 | SLB IP | 172.18.xx.xx | xxx |
產品分支與鏡像管理
1.分支管理
由于私有化部署,有些需求是個性化的,這部分需求與通用版本分支是無法兼容的,那么需要從代碼分支上進行區分,比如項目有對應項目的分支,通用分支有通用分支,如果一個需求的功能是通用需求,建議在通用分支上改造,測試完在合并至項目分支,其實不管用那種方式,要保證兼容性,可追溯。
分支類型 | 規則 | 示例 | 說明 |
項目開發分支 | 作者-項目簡稱-需求名稱 | zs-xs-需求名稱 | |
項目測試分支 | 項目名稱-demo | 項目名稱-demo | |
項目測試生產分支 | 項目名稱-master | xs-master | 項目代碼發布打tag,版本包括三類: 大版本(x.0.0) 小版本(x.x.0) 補丁(x.x.x) |
2.鏡像TAG管理
鏡像的tag要與代碼 tag相互聯系起來,比如代碼 tag 是:realse-1.0.0,那么鏡像 tag也建議是這個名稱,這樣如果出問題,可以根據鏡像 tag快速找到對應代碼。