CloudNative时代践行DevOps躲坑指南
戳藍字“CSDN云計算”關注我們哦!
2015年,谷歌成立了原生云計算基金會,標志著CloudNative時代的來臨。它以容器化封裝、自動化管理、面向微服務等特點,向人們展示了應用云化開發的新模式。在業界,DevOps全棧開發運維模式正在繼續向前推進,以解決傳統單體架構的應用開發、測試、運維無法一體化而導致的上線周期長,開發資源利用率低,無法滿足應用快速上線和迭代要求等問題。
2018年,用友云開發者中心作為CloudNative模式的引領者,作為DevOps模式的踐行者,在一次又一次的迭代研發中經歷了層層的蛻變:在4.19迭代中,上線了應用流水線功能,大大簡化了應用CI、CD時的配置及操作,提升了構建效率;在8.19迭代中,以提升平臺穩定性為重心,調整優化了平臺底層架構,使平臺穩定性得到了大幅度提升;在12.19迭代中,創新性的研發了產品流水線功能,打通了產品下各模塊之間,各環境之間的應用部署,再一次提升了產品的部署效率。
當前,隨著開發者中心穩定性及易用性的提升,越來越多的產品和服務正在向開發者中心遷移,需要運維的應用規模成指數級增長。本文立足于當下環境,以一名DevOps(yunwei)工程師的角度,向大家介紹一些在踐行DevOps中遇到的常見的、共性的問題,并給出這些問題的排查思路及解決辦法,助力應用部署過程保證順利上云。
1.通過編寫Dockerfile方式,靈活構建應用
在開發者中心應用流水線中,已經提供了不同類型應用的標準構建模式。同時為提供更加靈活的應用構建方式,開發者中心提供了手動編寫Dockerfile的模式來構建應用。通過手動編寫Dockerfile,用戶擁有極大的自由度來構建鏡像,并可解決構建時遇到的一些問題。
流水線支持Dockerfile的方式構建應用
例如,針對原有的Node.js應用構建模式,可能遇到以下問題:
容器啟動之后才執行編譯代碼操作,導致應用啟動過程時間變長
默認構建鏡像的過程中無法選擇npm源,從而導致鏡像構建失敗
現在,用戶可以通過編寫Dockerfile的方式,在構建鏡像的過程中指定npm源,并在構建鏡像的過程中即對應用進行編譯。這樣不僅解決了應用編譯和構建的問題,而且也加速了應用容器在部署時的啟動速度。
本文給出一個具體的Dockerfile示例,以供參考:
FROM dockerhub.yonyou.com:5000/node:9
MAINTAINER 用戶名 “user-email@yonyou.com”
WORKDIR /design/workdir
ADD ./ /design/workdir
RUN cnpm install \
&& npm run build:dll \
&& npm run build
VOLUME /design/workdir/log
EXPOSE 8080
CMD [“npm run start”]
2.快速查看應用運行日志和異常日志
在應用上云過程中,經常會遇到需要查看應用日志以排查問題的場景。開發者中心提供了快速便捷的查看應用日志和異常日志的方法,具體如下。
首先通過開發者中心,進入應用管理界面,在“實例”頁簽中可以看到(容器日志)和(容器控制臺)。通過點擊容器日志圖標,可以在彈出窗口中查看應用輸出到控制臺的日志;通過點擊容器控制臺圖標,可以在彈出窗口中登錄至容器內操作系統中,進而執行Linux Shell命令,以進行查看應用日志文件等操作。
通過開發者中心的應用管理查看日志
具有管理員權限的用戶,還可以直接訪問應用所在主機,在后臺主機中查看應用日志。
查看普通資源池,即Mesos架構平臺下應用日志,可以在瀏覽器中訪問主控機:5050端口,來訪問Mesos-Master管控頁面;同時也可以訪問主控機:8080端口,打開Marathon管理頁面。兩者均可以搜索到應用的容器,進而查看應用運行日志。
3.排查應用無法正常啟動的幾種方法
在部署應用后,可能會遇到應用無法正常啟動,無法通過健康檢查的情形,此時可以通過以下幾種方法,排查并解決問題。
1) 確認配置了正確的健康檢查配置項
導致應用無法正常啟動并運行的原因有很多。對于Java Web等類型的應用,開發者中心配置了默認的健康檢查頁面。當應用無法通過健康檢查時,可以先在應用管理菜單,應用詳情的屬性頁簽下,查看健康檢查項。健康檢查提供了HTTP、UDP、COMMAND等三種方式,只有配置了正確的健康檢查,才能通過健康檢查驗證。
健康檢查配置項
2) 確認配置了正確的應用服務端口
應用在啟動會向系統申請服務端口,這個端口會實際會在應用所在的容器中占用。在相應的配置項中,必須指定了對應的服務端口,才能保證應用的正常訪問。
應用實際申請的服務端口,可以通過進入容器內部查看。此時需確認應用的服務端口,是否和應用詳情的屬性頁簽中,容器端口項相一致。若不一致,則將配置修改為相同的容器端口號,點擊保存并重啟按鈕使配置生效。
容器端口相一致
3)確認為應用分配了足夠的系統資源
應用在啟動和運行時需要向系統申請內存等資源。如果應用出現無法正常啟動,或不斷重啟的現象,可能是由于分配的資源不足導致。
在開發者中心普通資源池部署的應用,建議內存分配為1024MB~2048MB,CPU可設置為0.2~0.5.在VIP資源池部署的應用,內存最大值建議設置為1024MB~4096MB,CPU最大值建議設置為1~2.
4)從應用日志入手,分析具體原因
在確認以上配置正確后,若應用仍無法正常啟動,可以通過查看應用日志的方式,尋找導致應用無法啟動的原因。限于篇幅原因,此處不再贅述。
4.應用通過健康檢查但無法正常訪問的排查方法
應用通過健康檢查后,可能會遇到點擊應用的域名,但卻不能正常訪問應用的情形。此時需從應用訪問鏈路角度入手,排查問題。
應用健康示意圖
對于普通資源池部署的應用,本文提供一種排查問題的思路如下:
普通資源池應用無法正常訪問排查問題思路
1)進入應用容器中,執行命令如curl -Lv localhost:8080/api,查看應用是否正常啟動。若應用未正常啟動,可參考第3節內容排查問題;
2)若應用正常啟動,則需排查Marathon-LB負責均衡是否出現問題。通過瀏覽器或者Postman等工具,請求192.168.0.3:38228/api.其中192.168.0.3為Marathon-LB所在服務器IP地址;38228為應用隨機映射端口號,可在應用詳情,屬性頁簽下的環境變量中查看。如不能正常返回結果,則說明Marathon-lb負載均衡環節出現問題;
查看應用的隨機映射端口號
3)若Marathon-LB負責均衡無異常,可在Redis中查詢Ceryx為應用綁定的ip和端口是否存在問題。
5.應用部署時,手動調試啟動問題的方法
如果應用啟動過程中遇到問題,用戶可以手動調試自己的應用,具體的方法為:
1)修改啟動命令,以保證應用容器正常啟動:touch test && tail -f test
修改啟動命令
2)修改健康檢項為1s,以使容器絕對通過健康檢查:
修改健康檢查
3)點擊保存并重啟按鈕,隨后即可進入容器,輸入應用的啟動命令啟動應用,或輸入其他命令,排查問題。
進入容器,執行命令
6.巧用環境變量,靈活調整應用運行態
當Java應用啟動遇到了PermGen等類似問題時,可以在應用管理菜單,屬性頁簽下,在環境變量里面設置相應的環境變量,來增加應用的性能參數,如圖所示。
設置環境變量
7.k8s啟用host模式,實現共享宿主機網絡
開發者中心目前已經支持在VIP資源池以HOST模式部署的應用,這可保證一些特殊類型的應用正常運行,如Dubbo框架應用。在HOST模式下部署的Dubbo框架應用,可以保證混布的Consumer也能夠消費到部署到Kubernetes集群中的Provider.
具體的使用方法如圖所示,用戶需要在應用詳情-屬性頁簽下的命令項中,修改啟動命令,將容器默認的8080端口替換為系統分配的PORT0變量。
應用以HOST模式部署
應用修改為host之后的啟動命令為:
sed 's/8080/'$PORT0'/g' -i conf/server.xml &&?/usr/local/tomcat/bin/catalina.sh run
8.URL中特殊字符的解決辦法
開發者中心使用的基礎鏡像版本均為各對應類型應用環境的標準最新版,因此一些老版本的應用特性可能與之不兼容,如在Tomcat 7的低版本7.0.69中支持URL里包含“{”、“}”等特殊字符,但是Tomcat 7的高版本不支持此類字符。解決辦法是在應用詳情,屬性頁簽下的命令項中,增加如下命令:
echo ' tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}' >> conf/catalina.properties && /usr/local/tomcat/bin/catalina.sh run
小結
本文主要介紹了用戶在使用開發者中心部署應用的過程中,可能遇到的常見的、共性的問題,并給出解決辦法和問題排查思路。
當前,用友云開發者中心仍然背負者CloudNative模式引領者的使命,繼續踐行DevOps理念,向用戶提供更加完備的功能,以協助企業優化產品架構,提供彈性、靈活、高可用的運行環境,協助用戶應用順利上云。
若您在使用開發者中心過程中遇到任何問題,歡迎隨時與我們的技術人員反饋,如將問題反饋至我們設立的用戶暖心群等,您提出的問題將會得到專業人員的迅速解決!
1.微信群:
添加小編微信:color_ld,備注“進群+姓名+公司職位”即可,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
2.征稿:
投稿郵箱:liudan@csdn.net;微信號:color_ld。請備注投稿+姓名+公司職位。
推薦閱讀
下一次 IT 變革:邊緣計算(Edge computing)
企業云存儲建設之路
AI in 美團:吃喝玩樂背后的黑科技
開除“野狗”式程序員,團隊的效率提高了
Windows 成“棄子”,Linux 終上位?
可替代Android的6大開源移動操作系統
程序員求助:被領導強行要求寫Bug該怎么辦?網友的回答讓我笑翻
程序員搶票的正確姿勢 ↓↓交朋友還能搶票?
點擊“閱讀原文”,打開 CSDN App 閱讀更貼心!
喜歡就點擊“好看”吧!總結
以上是生活随笔為你收集整理的CloudNative时代践行DevOps躲坑指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为鸿蒙网络,这回真翻脸了?被谷歌“除名
- 下一篇: 开个一般的水果店需要的成本 投资不算很高