使用DevCloud在華為云鯤鵬ECS上自動部署鳳凰商城示例程序
華為云軟件開發平臺(DevCloud)是一站式云端DevOps平臺,開發者使用DevCloud可以快速體驗全流程的DevOps,輕松開啟云端開發之旅。同時,DevCloud集成有鯤鵬開發套件的編譯器,支持開發者將軟件自動部署到華為云鯤鵬ECS或容器等云服務上。本文說明使用DevCloud在華為云鯤鵬ECS上自動部署DevOps全流程樣例項目——鳳凰商城示例程序所需的配置修改,作為鯤鵬移植的應用參考。
實踐準備工作
本次實踐假設DevCloud在已配置有鯤鵬執行機的“北京四”區域,對于未配置鯤鵬執行機的區域,可能需要客戶自行配置執行機,配置過程詳見后續說明。
首先,按照HE2E DevOps實踐的實踐準備工作完成項目創建,本次實踐截圖中的項目名稱為“phoenix-test”。
失敗的構建嘗試
按照官方文檔步驟六:構建應用,登錄容器鏡像服務控制臺獲取SWR服務器地址,并且創建組織(或復制已創建組織的名稱)。
在編譯構建頁簽下,在構建任務列表中單擊構建任務“phoenix-sample-ci”最右側“操作”那一列3個小點的圖標,在快捷菜單中選擇“復制”,然后在復制任務的基本信息頁簽中修改任務名稱為“phoenix-sample-ci-kunpeng”,修改構建環境主機類型為“鯤鵬(ARM)服務器”,單擊“復制并執行”,在接下來的對話框中修改構建配置參數dockerServer和dockerOrg為合適的值。
然而,只進行構建任務配置的修改,會出現“制作Docker鏡像失敗”的錯誤。
從全量日志的第66行可以看出在構建鏡像時出現了“exec format error”錯誤,其原因一般是基礎鏡像的指令集與執行機不一致。
... 64 [2021/06/22 15:23:17.707] Step 4/7 : RUN pip install -i https://repo.huaweicloud.com/repository/pypi/simple -r requirements.txt 65 [2021/06/22 15:23:17.954] ---> Running in e8bc2ac602fd 66 [2021/06/22 15:23:18.245] ·[91mstandard_init_linux.go:219: exec user process caused "exec format error" 67 [2021/06/22 15:23:18.614] The command '/bin/sh -c pip install -i https://repo.huaweicloud.com/repository/pypi/simple -r requirements.txt' returned a non-zero code: 1 68 [2021/06/22 15:23:18.645] [ERROR] [制作Vote鏡像并推送到SWR倉庫:制作鏡像并推送到SWR倉庫] : 錯誤信息: DEV.CB.0210043, 制作Docker鏡像失敗。 69 [2021/06/22 15:23:18.753] [ERROR] [制作Vote鏡像并推送到SWR倉庫:制作鏡像并推送到SWR倉庫] : 該步驟執行失敗。 70 [2021/06/22 15:23:18.757] [ERROR] : 該步驟執行失敗,錯誤信息:DEV.CB.0210043, 制作Docker鏡像失敗。 71 [2021/06/22 15:23:24.594] [INFO] : [JobStatusPlugin] onCompleted: j_hWvUWwku #1 72 [2021/06/22 15:23:24.595] [INFO] : [JobStatusPlugin] onCompleted end: j_hWvUWwku #1 73 [2021/06/22 15:23:24.678] Finished: FAILURE
就如同在x86服務器上構建的鏡像在鯤鵬ECS上運行時出現的錯誤:
# docker run -it b57c09a0fa62 /bin/sh WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested standard_init_linux.go:228: exec user process caused: exec format error
問題修復
在代碼托管服務中查看代碼倉phoenix-sample中的vote/Dockerfile文件:
# Using official python runtime base image FROM python:2.7-alpine ...
在容器鏡像服務的鏡像中心搜索python, 然后在“python 鏡像詳情”頁面找到支持的架構“arm64v8”點擊鏈接進入該頁面查找合適的版本。
非常不幸的是2.7版本的python已經無法從這個頁面查到,更新的版本又不一定適合應用,這里我們假設舊有的版本尚未刪除,復制vote/Dockerfile為vote/Dockerfile.kunpeng,將vote/Dockerfile.kunpeng中的基礎鏡像修改為:
FROM arm64v8/python:2.7-alpine
同樣,復制result/Dockerfile為result/Dockerfile.kunpeng,并將其中的基礎鏡像修改為:
FROM arm64v8/node:12.22.1-slim
復制worker/Dockerfile.j2為result/Dockerfile.j2.kunpeng,并將其中的基礎鏡像修改為:
FROM arm64v8/openjdk:18-ea-1-jdk-slim-buster
修改構建任務phoenix-sample-ci-kunpeng中有制作鏡像的構建步驟中的Dockerfile路徑為其對應的鯤鵬版本,修改“生成Postgres and Redis Dockerfile”這一構建步驟中的命令為:
echo FROM arm64v8/postgres:9.6.22-alpine > Dockerfile-postgres echo FROM arm64v8/redis:5.0.12-alpine > Dockerfile-redis
完成以上修改后保存并執行構建任務phoenix-sample-ci-kunpeng,能夠成功構建出可在鯤鵬ECS運行的版本。
應用部署和測試
按照官方文檔步驟七:部署應用(彈性云服務器篇)可以將構建任務phoenix-sample-ci-kunpeng構建的軟件部署到鯤鵬ECS。
其中Docker Compose的安裝可參考官方文檔鯤鵬移植指南中的安裝Docker Compose中的方法。
在網上商城(5000端口的前端應用)點擊喜歡某一商品,在管理端(5001端口的前端應用)的儀表盤中能夠看到相應的數據變化,說明除了2個前端應用外,worker、postgres和redis這3個微服務也可以正常工作。
保存基礎鏡像到私有鏡像倉庫
作為DevOps全流程樣例項目,鳳凰商城使用dockerhub中的公共鏡像作為基礎鏡像,這也無可厚非。
而對于正式的項目,出于性能、安全等方面的考慮,我們應采用私有的容器鏡像服務存儲驗證過的基礎鏡像,以避免因公共鏡像變化甚至刪除造成安全或可用性方面的問題。
此外,華為云容器鏡像服務SWR文檔中一些最佳實踐,如編寫高效的Dockerfile,值得認真閱讀。
結論
鳳凰商城示例程序采用的技術棧無需修改源代碼即可遷移到鯤鵬計算平臺,但仍需修改一些微服務組件運行依賴的基礎鏡像,同時需要修改編譯構建任務的配置信息,這可能是因為鳳凰商城示例程序編寫時還沒有考慮對鯤鵬計算平臺的支持。此外,鳳凰商城示例程序使用的一些基礎鏡像并沒有如編寫高效的Dockerfile說明的那樣使用特定的標簽,一些鏡像版本在dockerhub中已難以找到完全對應的arm64v8版本,有必要考慮進一步完善。而通過簡單的配置修改就可以輕松將鳳凰商城示例程序遷移到鯤鵬計算平臺,也說明DevCloud和鯤鵬計算平臺在產品、文檔等方面都已非常成熟,可以讓開發者放心使用。
DevOps 彈性云服務器 ECS 鯤鵬
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。