如何基于 k8s做私有化部署
公眾號「架構成長指南」,專注于生產實踐、云原生、分布式系統、大數據技術分享。
隨著國內數字化轉型的加速和國產化進程推動,軟件系統的私有化部署已經成為非常熱門的話題,因為私有化部署賦予了企業更大的靈活和控制權,使其可以根據自身需求和安全要求定制和管理軟件系統。下面分享下我們的基于k8S私有化部署經驗。
私有化交付的目標
-
要支持系統快速部署至客戶機房
-
支持版本在線升級
-
支持動態擴容
-
能快速集成系統監控告警
-
支持在線運維
-
可快速移植
以上目標,目前最合適的就是k8s,原因如下
- 如果基于jar部署,系統快速部署和動態擴容就無法滿足,pass。
- docker-compose在快速部署、快速遷移可以滿足,但是其他方面是滿足不了,比如動態擴容,以及圖形化的在線運維等。
因此基于k8s做私有化交付是最合適的方案,當然如果項目規模比較小,就幾個服務也沒有動態擴容等需求,那么也沒必要引入k8s,如果項目規模較大,使用k8s進行私有化部署是不錯的解決方案。
基于k8s私有化部署如何做?
以上我們確認了使用k8s做私有化部署,但是還有一些細節問題,需要考慮
-
在公司內部一般使用gitlab+Jenkins做服務部署,在客戶現場,這種方式一般不可行,因為一般不允許在客戶現場訪問公司的代碼倉庫
-
鏡像倉庫要能支持公網訪問,這樣才可以在客戶機房下載到鏡像
-
一個服務就有很多yaml文件,如果幾十個服務的yaml文件怎么管理,如何快速部署或者升級
-
中間件要支持快速部署,有些中間件不能部署在k8s,所以需要支持自動化腳本快速部署。
-
系統配置如何管理,每個服務都依賴數據庫、消息等中間件,這些地址怎么管理起來
基于問題,我們的解決方案如下:
在公司內部構建鏡像時,直接推送至公網鏡像倉庫Harbar,在客戶機房直接拉取部署,而部署服務使用Helm進行部署,Helm是一個 k8s的包管理工具,他可以把一組服務yaml文件管理起來,并且支持部署和更新,非常方便。比如有一個文件系統,包括Deployment、Service、gateway vs、pv pvc等文件,如果用Helm管理起來,如下圖
上面文件,可以認為是模板,其中有一個配置文件,values.yaml,所有的可變都在這里面維護,在
要部署這個文件系統,執行以下命令即可完成。
helm install fss myrepo/fss \
--set pv.log.type=storageClass \
--set pv.log.pvc.storageName=gfs-storage \
--set pv.log.pvc.storage=5Gi \
--set pv.file.type=storageClass \
--set pv.file.pvc.storageName=gfs-storage \
--set pv.file.pvc.storage=1Gi \
--set istioGateway.schema=http \
--set istioGateway.hosts={test-user.com} \
--set istioGateway.ucenterHost=test-order.com \
--set apollo.cluster=test\
--set sv.fssManager.replicaCount=1 \
--set sv.fssRest.replicaCount=1
中間件部署,對部署在k8s外部的中間件,可以使用Ansiable編寫自動化腳本,進行快速部署,幾分鐘就可以部署一個高可用集群。
系統參數配置,一般使用Nacos或Apollo 進行管理配置,但是由于服務過多,配置起來工作量相對較大,而且很多都是重復工作。
比如數據庫地址、kafka地址、es地址都是相同的,那么如何避免做重復工作,比如可以寫一個shell腳本把公共的參數提取出來,然后進行修改替換,或者寫一個運維部署平臺,把相關公共參數進行圖形化配置,并對接配置中心,進行發布替換。
系統監控告警,目前可使用deepFlow、kube-prometheus、夜鶯等解決方案
在線運維平臺,可以使用Rancher或KuberSphere,這兩個都是目前非常熱門圖形化運維平臺
快速移植,k8s設計之初就考慮到移植性的問題,所以與底層基礎設施無關聯性,所以不管是在公有云、私有云、混合云都是可以進行部署的,而且現在各大云廠商,都有 k8s 的商用解決方案,讓我們部署起來更加快速,也不用考慮集群的穩定性,比如阿里的ACK、華為的CCE、騰訊云的TKE等。
總結
以上我們介紹私有化部署的難點,并引申出了私有化部署整體解決方案,后續還會更新更多私有化部署相關文章,比如存儲怎么掛載、域名怎么管理、監控告警怎么配置等,請持續關注。
總結
以上是生活随笔為你收集整理的如何基于 k8s做私有化部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: finally中的代码一定会执行吗?
- 下一篇: iPhone微信上的小视频怎么储存在电脑