配置鏡像目標(biāo)架構(gòu)
隨著ARM64架構(gòu)服務(wù)端的流行,為了讓您選擇更加多元化,EDAS在K8s集群中使用WAR、JAR包部署應(yīng)用時(shí),支持選擇多平臺架構(gòu)。本文介紹如何在EDAS控制臺配置鏡像目標(biāo)架構(gòu)。
使用限制
僅支持Kubernetes ACK集群。
僅支持使用WAR、JAR包部署應(yīng)用的場景。
Java環(huán)境為Open JDK≥8或Dragonwell JDK。
當(dāng)構(gòu)建倉庫類型為ACR倉庫時(shí),您使用的是自己的鏡像構(gòu)建機(jī)器。此時(shí),需使用Linux內(nèi)核版本大于4.8的操作系統(tǒng),版本如下:
Alibaba Cloud Linux全系列
Anolis OS全系列
Ubuntu 18.04.0 LTS +
Centos 8+
前提條件
升級arms-pilot至ack-onepilot 3.0.13版本。您需手工檢查及升級arms-pilot版本,操作如下:
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇
。在Helm頁面,檢查是否有ack-onepilot,且Chart版本≥3.0.13。如果沒有,請?jiān)?span data-tag="menucascade" id="menucascade-h5s-gfu-g88" class="menucascade">運(yùn)維管理 > 組件管理頁面,查找ack-onepilot,進(jìn)行安裝或升級。
安裝ack-onepilot完成后,在
頁面,卸載ack-arms-pilot或arms-pilot。
操作步驟
您可在創(chuàng)建或部署應(yīng)用時(shí),配置鏡像目標(biāo)架構(gòu)。
登錄EDAS控制臺,在左側(cè)導(dǎo)航欄單擊 ,在頂部菜單欄選擇地域并在頁面上方選擇微服務(wù)空間,然后在應(yīng)用列表頁面左上角單擊創(chuàng)建應(yīng)用。
在應(yīng)用基本信息頁簽,選擇集群類型為Kubernetes集群,然后單擊下一步。
在應(yīng)用配置頁簽的鏡像目標(biāo)架構(gòu)右側(cè),選擇所需架構(gòu),單擊下一步。
linux/amd64:指構(gòu)建的鏡像支持運(yùn)行在Linux x86_64平臺架構(gòu)上。
linux/arm64:指構(gòu)建的鏡像支持運(yùn)行在Linux arm_64平臺架構(gòu)上。
如果您希望在一個(gè)集群里同時(shí)存在linux/amd64、linux/arm64的Worker,存在以下兩種使用場景:
場景
建議
優(yōu)缺點(diǎn)分析
不同的應(yīng)用運(yùn)行在不同的架構(gòu)上
推薦。
優(yōu)點(diǎn):可控性高,可避免不同架構(gòu)的節(jié)點(diǎn)性能不一致帶來的性能問題。
缺點(diǎn):需為ARM架構(gòu)的Worker打上污點(diǎn),同時(shí)調(diào)度到ARM架構(gòu)的應(yīng)用需配置調(diào)度策略。具體操作,請參見如何在一個(gè)已經(jīng)運(yùn)行應(yīng)用的集群上,添加不同架構(gòu)的Worker,并調(diào)度至新架構(gòu)Worker。
同一個(gè)應(yīng)用的Pod被隨機(jī)調(diào)度到不同架構(gòu)的機(jī)器上
不推薦。
優(yōu)點(diǎn):無需配置調(diào)度策略。
缺點(diǎn):兩種架構(gòu)的機(jī)器性能通常不一致。在負(fù)載較重時(shí),對于微服務(wù)應(yīng)用,如果Consumer端使用round robin策略,可能導(dǎo)致性能差的機(jī)器工作隊(duì)列堆積,從而造成運(yùn)行慢的機(jī)器RT拉長,性能好的機(jī)器空閑。
多選時(shí),利用多架構(gòu)鏡像技術(shù)構(gòu)建的鏡像支持所有選擇的平臺架構(gòu)。所使用技術(shù),請參見本地構(gòu)建和推送多架構(gòu)鏡像到容器鏡像服務(wù)。
說明當(dāng)鏡像目標(biāo)架構(gòu)選擇多種架構(gòu)時(shí),構(gòu)建時(shí)間較長,分為以下兩種情況:
構(gòu)建倉庫類型為EDAS鏡像倉庫時(shí),由于使用EDAS構(gòu)建機(jī)器,機(jī)器性能較好,多一種架構(gòu)構(gòu)建時(shí)間增加10~60秒之間。
構(gòu)建倉庫類型為ACR倉庫時(shí),構(gòu)建機(jī)器使用自己的機(jī)器,默認(rèn)限制了CPU性能,多一種架構(gòu)構(gòu)建時(shí)間增加2~6分鐘之間。
建議構(gòu)建機(jī)器使用amd64機(jī)器,可通過為機(jī)器添加標(biāo)簽
edas.image.build: enable
,讓構(gòu)建任務(wù)調(diào)度至指定機(jī)器。請參見如何調(diào)整鏡像構(gòu)建資源限制?, 調(diào)整資源限制加速構(gòu)建鏡像。
在應(yīng)用高級設(shè)置頁簽,根據(jù)業(yè)務(wù)需求配置相關(guān)參數(shù)。
完成設(shè)置后單擊創(chuàng)建應(yīng)用,然后在應(yīng)用創(chuàng)建完成頁簽,單擊確定創(chuàng)建應(yīng)用。
在應(yīng)用變更預(yù)檢確認(rèn)對話框,單擊開始預(yù)檢。
在應(yīng)用變更預(yù)檢確認(rèn)的下一頁,確認(rèn)預(yù)檢項(xiàng)和預(yù)檢結(jié)果,單擊繼續(xù)。
可選:如您有更改以上預(yù)檢項(xiàng),請單擊重新檢測。
應(yīng)用創(chuàng)建可能需要幾分鐘,創(chuàng)建過程中,可以通過查看變更記錄跟蹤應(yīng)用的創(chuàng)建流程。創(chuàng)建完成后,返回應(yīng)用總覽頁面,查看實(shí)例Pod的運(yùn)行狀態(tài)。若運(yùn)行狀態(tài)為運(yùn)行中,說明應(yīng)用發(fā)布成功。單擊Pod的運(yùn)行狀態(tài)可以查看應(yīng)用實(shí)例的工作負(fù)載(Deployment)、容器組(Pod)和高級配置信息。
說明預(yù)檢任務(wù)將為多架構(gòu)部署檢查以下異常情況。
所選架構(gòu)沒有相應(yīng)架構(gòu)的Worker節(jié)點(diǎn)。例如,在EDAS中僅選擇linux/arm64,但集群只有linux/amd64的Worker節(jié)點(diǎn)。
構(gòu)建倉庫類型為ACR倉庫且所選架構(gòu)數(shù)量≥1,但集群中無內(nèi)核版本≥4.8的Worker節(jié)點(diǎn)。
對于一些EDAS中較舊的應(yīng)用,仍在使用非Open JDK、dragonwell JDK的Java環(huán)境。
常見問題
如何在一個(gè)已經(jīng)運(yùn)行應(yīng)用的集群上,添加不同架構(gòu)的Worker,并調(diào)度至新架構(gòu)Worker
例如,集群原有linux/amd64的機(jī)器,需添加linux/arm64的機(jī)器,請按以下步驟操作:
在ACK集群管控頁面添加新的arm64節(jié)點(diǎn)池,節(jié)點(diǎn)池配置中添加污點(diǎn)
kubernetes.io/arch=arm64
,且Effect設(shè)置為NoSchedule,確保只有指定運(yùn)行在ARM節(jié)點(diǎn)上的應(yīng)用和組件才會被調(diào)度至ARM節(jié)點(diǎn)上。操作入口,請參見創(chuàng)建節(jié)點(diǎn)池。在EDAS應(yīng)用高級設(shè)置頁簽配置調(diào)度策略,設(shè)置節(jié)點(diǎn)親和性和調(diào)度容忍,調(diào)度至arm64的應(yīng)用。
構(gòu)建鏡像任務(wù)一直在執(zhí)行中或失敗時(shí),怎么辦
構(gòu)建倉庫類型為ACR倉庫時(shí),當(dāng)構(gòu)建鏡像任務(wù)一直在執(zhí)行中或失敗時(shí),可通過以下命令查看相關(guān)狀態(tài)。
執(zhí)行以下命令,查詢構(gòu)建鏡像的Pod狀態(tài)及名稱。
kubectl get pods -o wide | grep -i 應(yīng)用名 | grep imagebuild
執(zhí)行以下命令,查看構(gòu)建鏡像日志。
kubectl logs Pod名稱
應(yīng)用Pod狀態(tài)為Error或CrashLoopBackOff時(shí),怎么辦
執(zhí)行以下命令,查詢Pod日志。
kubectl logs Pod名稱
日志顯示:
exec /bin/sh: exec format error
請檢查所選鏡像架構(gòu)是否包含節(jié)點(diǎn)架構(gòu)。如果不包含,請參見如何在一個(gè)已經(jīng)運(yùn)行應(yīng)用的集群上,添加不同架構(gòu)的Worker,并調(diào)度至新架構(gòu)Worker,完成相關(guān)配置。
應(yīng)用啟動(dòng)或執(zhí)行很慢時(shí),怎么辦
在Pod容器中運(yùn)行以下命令:
ps -ef | grep java
若
java
命令前有qemu
字樣,表明當(dāng)前節(jié)點(diǎn)使用qemu模式運(yùn)行該鏡像。請參見如何在一個(gè)已經(jīng)運(yùn)行應(yīng)用的集群上,添加不同架構(gòu)的Worker,并調(diào)度至新架構(gòu)Worker,完成相關(guān)配置。
相關(guān)文檔
非WAR包、JAR包創(chuàng)建及部署應(yīng)用場景下,支持多鏡像目標(biāo)架構(gòu)參考文檔如下所示:
構(gòu)建多架構(gòu)容器鏡像:
調(diào)度負(fù)載:調(diào)度負(fù)載至Arm節(jié)點(diǎn)