優化 AWS 應用程序容器生成的碼頭映像 - AWS Prescriptive Guidance

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

優化 AWS 應用程序容器生成的碼頭映像

由瓦倫夏爾馬 (AWS) 創建

环境:PoC 或試驗

技術:容器與微服務;現代化;DevOps

AWS 服務:Amazon ECS

Summary

AWS App2Container 是命令列工具,可協助將在內部部署或虛擬機器上執行的現有應用程式轉換為容器,而不需要變更程式碼。

根據應用程序類型,App2Container 採用保守的方法來識別依賴關係。對於處理程序模式,應用程式伺服器上的所有非系統檔案都包含在容器映像中。在這種情況下,可能會產生相當大的影像。

這種模式提供了優化由 App2Container 生成的容器映像的方法。它適用於在進程模式下由 App2 容器發現的所有 Java 應用程序。模式中定義的工作流程被設計為在應用程序服務器上運行。

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • 在 Linux 伺服器上的應用程式伺服器上執行的 Java 應用程式

  • 應用程式容器安裝並設定在 Linux 伺服器上符合所有先決條件

Architecture

來源技術堆疊

  • 在 Linux 伺服器上執行的 Java 應用程式

目標技術堆疊

  • 由應用程序容器生成的碼頭映像

目標架構流程

  1. 探索應用程式伺服器上執行的應用程式,並分析應用程式。

  2. 容器化應用程式。

  3. 評估 Docker 映像的大小。如果影像太大,請繼續步驟 4。

  4. 使用 shell 腳本(附加)來識別大文件。

  5. 更新appExcludedFilesappSpecificFiles列表中analysis.jsonfile.

Tools

工具

  • AWS 應用程式 2 容器— AWS App2Container (A2C) 是一種命令列工具,可協助您提升和移轉在現場部署資料中心或虛擬機器上執行的應用程式,以便在由 Amazon 彈性容器服務 (Amazon ECS) 或 Amazon 彈性 Kubernetes 服務 (Amazon EKS) 管理的容器中執行。

Code

所以此optimizeImage.shshell 腳本和一個示例analysis.json檔案已貼附。

所以此optimizeImage.sh文件是用於查看 App2Container 生成文件的內容的實用程序腳本,ContainerFiles.tar。檢閱會識別大型且可排除的檔案或子目錄。該腳本是以下 tar 命令的包裝器。

tar -Ptvf <path>|tr -s ' '|cut -d ' ' -f3,6| awk '$2 ~/<filetype>$/'| awk '$2 ~/^<toplevel>/'| cut -f1-<depth> -d'/'|awk '{ if ($1>= <size>) arr[$2]+=$1 } END { for (key in arr) { if(<verbose>) printf("%-50s\t%-50s\n", key, arr[key]) else printf("%s,\n", key) } } '|sort -k2 -nr

在 tar 命令中,指令碼會使用下列值:

pathThe path to ContainerFiles.tar
FileTypeThe file type to match
頂層The top-level directory to match
depthThe depth of the absolute path
sizeThe size for each file

此指令碼會執行下列操作:

  1. 它使用tar -Ptvf列出文件而不解壓縮它們。

  2. 它會依檔案類型篩選檔案,從頂層目錄開始。

  3. 根據深度,它會產生絕對路徑作為索引。

  4. 根據索引和存儲,它提供了子目錄的總大小。

  5. 它打印子目錄的大小。

您也可以在 tar 指令中手動取代值。

Epics

任務描述所需技能
探索內部部署 Java 應用程式。

若要探索應用程式伺服器上執行的所有應用程式,請執行下列命令。

sudo app2container inventory 
AWD 開發
分析探索到的應用程式。

若要分析每個應用程式,藉由使用application-id,執行下列命令。

sudo app2container analyze --application-id <java-app-id>
AWD 開發
將已分析的應用程式容器化。

若要容器化應用程式,請執行下列命令。

sudo app2container containerize --application-id <application-id>

該命令會在工作區位置中生成 Docker 映像以及 tar 服務包。

如果 Docker 映像太大,請繼續下一個步驟。

AWD 開發
任務描述所需技能
識別人工因素 tar 檔案大小。

識別ContainerFiles.tar檔案位於{workspace}/{java-app-id}/Artifacts,其中workspace是應用程式容器工作區,java-app-id是應用程式 ID。 

./optimizeImage.sh -p /{workspace}/{java-app-id}/Artifacts/ContainerFiles.tar -d 0 -t / -v

這是優化後 tar 文件的總大小。

AWD 開發
列出/目錄下的子目錄及其大小。

若要識別下主要子目錄的大小/上層目錄,執行下列命令。

./optimizeImage.sh -p /{workspace}/{java-app-id}/Artifacts/ContainerFiles.tar -d 1 -t / -s 1000000 -v /var                         554144711 /usr 2097300819 /tmp 18579660 /root 43645397 /opt 222320534 /home 65212518 /etc 11357677                                    
AWD 開發
識別/目錄下的大型子目錄。

針對上一個命令中列出的每個主要子目錄,識別其子目錄的大小。使用-d來增加深度,-t來指示頂層目錄。

例如,使用/var作為頂層目錄。DER/var,識別所有大型子目錄及其大小。

./optimizeImage.sh -p /{workspace}/{java-app-id}/Artifacts/ContainerFiles.tar -d 2 -t /var -s 1000000 -v

針對上一個步驟中列出的每個子目錄重複此程序 (例如/usr/tmp/opt,以及/home

AWD 開發
分析/目錄下每個子目錄中的大型資料夾。

針對上一個步驟中列出的每個子目錄,識別執行應用程式所需的任何資料夾。

例如,使用上一個步驟的子目錄,列出/var目錄及其大小。識別應用程式所需的任何子目錄。

/var/tmp                        237285851 /var/lib 24489984 /var/cache                      237285851

若要排除應用程式不需要的子目錄,請在analysis.json檔案中,將這些子目錄新增至appExcludedFiles區段下containerParameters

一個例子analysis.json檔案已貼附。

AWD 開發
從「應用程式排除」清單中識別所需的檔案。

針對新增至 AppExcludes 清單的每個子目錄,識別該子目錄中應用程式所需的任何檔案。在分析 .json 檔案中,新增特定檔案或子目錄appSpecificFiles區段下containerParameters。 

例如,如果/usr/lib目錄被添加到排除列表中,但/usr/lib/jvm由應用程序需要,添加/usr/lib/jvmappSpecificFiles部分。

AWD 開發
任務描述所需技能
容器化已分析的應用程式。

若要容器化應用程式,請執行下列命令。

sudo app2container containerize --application-id <application-id>

該命令會在工作區位置中生成 Docker 映像以及 tar 服務包。

AWD 開發
識別人工因素 tar 檔案大小。

識別ContainerFiles.tar檔案位於{workspace}/{java-app-id}/Artifacts,其中 workspace是應用程式容器工作區, java-app-id是應用程式 ID。 

./optimizeImage.sh -p /{workspace}/{java-app-id}/Artifacts/ContainerFiles.tar -d 0 -t / -v

這是優化後 tar 文件的總大小。 

AWD 開發
執行 Docker 影像。

若要確認映像是否啟動而沒有錯誤,請使用下列命令在本機執行 Docker 映像。

若要識別 imageId的容器,請使用docker images |grep java-app-id

若要執行容器,請使用docker run -d <image id>

AWD 開發

相關資源

Attachments

attachment.zip