Docker+k8s+微服務部署方案-創(chuàng)新互聯(lián)
寫在前面
1.關于docker+k8s的的搭建方法及過程,請參考前一篇博客
2.我們使用的架構是duboo的架構模式。所有的應用除tomcat和jar以外都啟動到虛擬機上。
使用容器啟動tomcat
因為使用容器啟動項目,必須要有進程跑在前臺,不然容器run起來后會自動退出。所以我們對tomcat的官方鏡像進行了二次的build并做了自己的一些配置。
tomcat的官方鏡像啟動容器后,tomcat的日志是放到了前臺打印出來了,并且無法做日志切割。容器退出后日志隨之丟失。我們來解決這兩個問題。
問題一: 日志切割
首先在容器中編譯安裝cronolog工具。但是安裝cronolog之前需要系統(tǒng)安裝gcc軟件,tomcat官方提供的鏡像很干凈,并沒有gcc需要我們首先先安裝一下gcc 同時還要安裝一下make。
問題二:解決日志輸出在前臺的問題。
tomcat官方鏡像啟動容器的方式是catalina.sh run的方式來啟動的。這樣啟動log直接輸出在前臺,可以保證容器不退出。但是我們目的是把日志放到本地。
我們給tomcat的換一種啟動方式,自己寫一個start.sh的腳本,內(nèi)容如下:
#!/bin/sh sh?/usr/local/tomcat/bin/startup.sh tail?-f?/usr/local/tomcat/bin/catalina.sh
因為如果直接使用startup.sh 方式啟動tomcat,會導致前臺沒有進程在運行,會導致容器退出,所以我們后面加一條tail -f的命令。tail那個文件隨便寫一個就行了。
這樣能確保了tomcat的日志即做了日志切割同時又保存在了后臺。
Dockerfile的文件內(nèi)容如下:
FROM?tomcat:7.0-slim LABEL?maintainer="ZhiYu?Xin<894747821@qq.com>" ADD?./catalina.sh?/usr/local/tomcat/bin/ ADD?./cronolog-1.6.2.tar.gz?/opt/ ADD?./start.sh?/usr/local/tomcat/bin/ WORKDIR?/opt/cronolog-1.6.2 RUN?echo?"deb?http://ftp.us.debian.org/debian/?jessie?main?contrib?non-free"?>>?\ ????/etc/apt/sources.list?&&?echo?"deb-src?http://ftp.us.debian.org/debian/?jessie?main?contrib?non-free"?\ ????????>>?/etc/apt/sources.list?&&?apt-get?update?-y?&&?apt-get?install?-y?gcc-4.8?g++-4.8?g++-4.8-multilib?make?&&?\ ????????./configure?&&?make?&&?make?install?&&?chmod?a+x?/usr/local/tomcat/bin/start.sh EXPOSE?8080 ENTRYPOINT?["/bin/sh",?"/usr/local/tomcat/bin/start.sh"?]
問題三:如何把容器輸出的日志直接存放到docker的宿主機上。
我們需要在啟動容器的時候,給容器掛載一個volume到/usr/local/tomcat/logs目錄下就可以了。
啟動容器之前最好在本地創(chuàng)建出對應的目錄來。
啟動容器的yml內(nèi)容如下:
apiVersion:?apps/v1 kind:?Deployment metadata: ??name:?tomcat ??labels: ????app:?tomcat spec: ??replicas:?1 ??selector: ????matchLabels: ??????app:?tomcat ??template: ????metadata: ??????labels: ????????app:?tomcat ????spec: ??????#聲明一個volume以供后面使用 ??????volumes: ??????-?name:?"tomcat-log" ????????hostPath: ??????????path:?"/data" ??????containers: ??????-?name:?tomcat1 ????????image:?xinsir8/tomcat:v1 ????????ports: ????????-?containerPort:?8080 ????????#?掛載一個volume ????????volumeMounts: ????????#?掛載到哪個目錄 ?????????-?mountPath:?/usr/local/tomcat/logs ???????????name:?tomcat-log ????????#?資源限制 ????????resources: ?????????requests: ??????????memory:?"64Mi" ??????????cpu:?"250m" ?????????limits: ??????????memory:?"128Mi" ??????????cpu:?"500m"
問題四:如何解決網(wǎng)絡問題,nginx調(diào)度和tomcat的通訊,tomcat和jar的通訊等。
其實很簡單解決這個問題,我們創(chuàng)建一個service就能解決這個問題了。創(chuàng)建service的yml文件內(nèi)容如下
apiVersion:?v1 kind:?Service metadata: ?#?service的名字 ?name:?tomcat-service spec: ?#?service的類型,類型包括但不限于【NodePort、ClusterIP、NodePort、LoadBalancer】 ?type:?NodePort ?ports: ?#?容器的端口 ?-?port:?8080 ?#?映射后的端口 ???nodePort:?31003 ?selector: ?#?這個服務會被應用到標簽為app等于tomcat的所有容器上 ??app:?tomcat
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
文章標題:Docker+k8s+微服務部署方案-創(chuàng)新互聯(lián)
鏈接地址:http://www.xueling.net.cn/article/dgjiop.html