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