將dubbo微服務遷移到k8s中的思考,這個話題看起來有些乾燥,不過這都是我我的的一些總結,你認真讀完,相信會有一些收穫。
首先k8s環境集羣這是首先齊要,通常這個確定是本身要部署好的,另外就是你須要將你的k8s集羣作成一個高可用的一個集羣,這樣的話,後續你去擴容還有你的環境好比master節點還有一個主控節點幫你去工做,這是首當其要,這裏想必不少人也知道,另外要說就是你的pod的持久化,自己你的pod的生命週期就是很是短暫的,你的pod重啓或者因爲一些特殊的狀況的話,那麼你的pod的ip那麼就會變了,因此這裏在這個環境當中你們想必是要去考慮它自己的一個持久話的問題,好比你的jenkins這個要是在k8s中運行的話,那麼就須要考慮它的一個工做目錄,jenkins_home這個工做目錄,也就是jenkins生成的文件,還有你的去拉代碼的時候所產生的工做目錄都會實地落到你的這個工做目錄下的,這個目錄你要是在k8s中去部署jenkins,咱們就須要將這個工做目錄採用這種持久化的這個功能將它共享掛載在咱們的其餘服務器中的一個目錄當中,若是不去作持久化的話,你的工做目錄當你的pod重啓就會丟失,固然你的容器可能會用到一些維護的相關的命令,要是pod重啓你的命令也是會丟失的,或者你想對這個容器作免登陸的話,你是須要在你容器中去生成這個ssh-keygen的,這樣的話,你容器重啓這個目錄也是會丟失的,將jenkins部署到k8s中也是能夠,可是維護這個容器起來,仍是相對來說,比較麻煩的。
後來也是將咱們的jenkins部署到咱們的單獨一臺服務器上。
部署到單獨一臺服務器的話,這裏我是以這種war包的形式去啓動的,這裏我爲了將咱們的jenkins的工做目錄進行修改,自己它這個工做目錄是放在.jenkins下這個工做目錄下的,因此我進行對它這個目錄tomcat.catalina.sh的這個目錄進行修改添加了export JENKINS_HOME=/opt/k8s/project這個共享目錄下,並在你的環境變量中生效,啓動你的war包這樣的話,你的文件都會落地到這個共享存儲中,這是我是使用的這個nfs,這個共享存儲去作的這個。
其餘這個共享存儲也有不少,像這種的話,好比還有glusterFS,ceph,等等這些都是能夠去作的。
而後接下來就是部署咱們的coredns,這個主要也是來完成咱們k8s的service的一個域進行解析的,好比咱們去安裝一個busybox的一個測試工具,能夠去測試一下咱們集羣中的kubernetes.default,通常你的coredns還有你的網絡CNI插件沒問題的話,是能夠正常去解析的,後面就是部署這個elk這個日誌文件系統,這個的話,我是將它部署在k8s中的,也是爲了方便管理,固然部署在外面也是能夠的,我這裏是使用的elasticsearch,filebeat,kibana,進行對咱們微服務dubbo的項目進行對日誌的收集的,
這裏的話,這種pod類型也就是這種親密性pod,也就是在一個pod中去部署兩個容器,
而後經過這個filebeat在咱們的容器中去部署,經過這個採集器去收集咱們的日誌,而後輸出到es中,而後交給kibana來進行對咱們dubbo微服務的日誌進行輸出,這是這一塊
,接下來須要的就是控制器進行對咱們的項目的域名進行解析,這裏我使用的是ingress-nginx ,不過k8s中的ingress的控制器支持不少,至少10多種,每一個人用的也不同,因此根據本身的選擇來走
而後就是使用jenkins去將咱們的項目發佈出去,部署到咱們的k8s中,咱們這裏目前是使用的Jenkins配置自由式發佈,每一個項目的需求都不同,咱們使用寫的腳本去發佈的,或者你使用這種pipeline去發佈這個也是能夠的,由於咱們是gitlab的形式去託管代碼的,因此咱們經過jenkins須要將對gitlab進行免交互登錄,第一在jenkins中ssh-keygen,生成id_rsa id_rsa.pub,一個是私鑰一個是公鑰,將這個私鑰存放着jenkins上的key中,將pub這個公鑰放到gitlab中的託管處就能夠了, 配置git 執行參數化構建,選擇maven,提早將因此的配置都部署好,jdk環境以及maven,放在/etc/profile下並執行好,而後構建執行後,在你項目下的target下面會有這個jar包,或者就是應用程序,咱們這裏是應用程序,咱們將這個應用程序經過寫dockerfile的形式將它封裝成容器,而後給他一個jre環鏡將這個服務部署進去,而後上傳到咱們的harbor倉庫上,再經過k8s的yaml進行去執行,將咱們的服務發佈出去nginx
未完待遇:git