Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Seekable OCI (SOCI) によるコンテナ起動の高速化

takahash
March 07, 2024
440

Seekable OCI (SOCI) によるコンテナ起動の高速化

takahash

March 07, 2024
Tweet

Transcript

  1. GET /v2/<repo>/manifests/<tag/digest> LookUp Tag -> Digest Get Object 200 +

    Manifest GET /v2/<repo>/blobs/<digest> GetItem 307 + <S3 pre-signed URL> GET <S3 pre-signed URL> 200 + Layer Data Image Pull (from: Amazon ECR) Amazon S3 Amazon DynamoDB Amazon ECR AWS Fargate Layerの取得 Manifestの取得
  2. Our analysis shows that pulling packages accounts for 76% of

    container start time, but only 6.4% of that data is read. [Harter, et al., 2016] Pullは高コスト
  3. 2. コンテナイメージの軽量化 軽量な ベースイメージ を使用する 不要なファイルや フレームワーク を除外する レイヤー数を 減らす

    圧縮方式を 変更する Zstandard RUN apt update && ¥ apt install –y ¥ bzr ¥ cvs ¥ 様々なプラクティスが存在する distroless
  4. zTOC File Offset Start Span End Span bin/bash 12345 0

    0 bin/ls 23456 1 1 etc/user 34567 1 2 etc/group 45678 2 4 レイヤー内のファイルの一覧と位置情報を示すメタデータ layerN.tar.gz span 0 span 1 span N ・・・ span レイヤーのtar.gzの論理的な区画。 すべてのspanは同じサイズ。 レイヤー自体を変更するわけではない。
  5. Lazy loading 引用:Under the hood: Lazy Loading Container Images with

    Seekable OCI and AWS Fargate File Offset Start Span End Span bin/bash 12345 0 0 bin/ls 23456 1 1 etc/user 34567 1 2 etc/group 45678 2 4 zTOC
  6. SOCI Index Builder 引用: CFN AWS SOCI Index Builder on

    AWS Partner Solution Deployment Guide CloudFormationでデプロイ可能なソリューション
  7. SOCI CLI • awslabs/soci-snapshotterでCLIが公開されているのでダウンロードして 利用 • 作業を手動で行う場合やCI/CDパイプラインに処理として組み込む場合に 有効 • Finchには標準で入っている。設定ファイルを記述しておけばコンテナイ

    メージのPush時にSOCI IndexもPushできる。 CLIによるSOCI Indexの作成 AWS_ACCOUNT_ID=111222333444 AWS_REGION=eu-west-1 finch push --snapshotter soci ¥ $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/myimage:latest
  8. 考慮事項 • Linux プラットフォームバージョン 1.4.0 で実行されるタスクのみ SOCI インデックスを使用できます。 Fargate で

    Windows コンテナを実行するタスクはサポートされていません。 • X86_64 または ARM64 CPU アーキテクチャ上で実行されるタスクがサポートされています。ARM64 アーキテ クチャの Linux タスクでは、Fargate Spot キャパシティプロバイダーはサポートされません。 • タスク定義内のコンテナイメージには、イメージと同じコンテナレジストリに SOCI インデックスが必要です。 • タスク定義内のコンテナイメージは、互換性のあるイメージレジストリに保存する必要があります。以下に互 換性のあるレジストリを示します。 • Amazon ECR プライベートレジストリ • gzip 圧縮を使用する、または圧縮されていないコンテナイメージのみがサポートされます。zstd 圧縮を使用す るコンテナイメージはサポートされていません。 • 圧縮サイズが 250 MiB より大きいコンテナイメージを使用して遅延読み込みを試すことをお勧めします。小さ いイメージを読み込む時間が短くなる可能性は低くなります。 • 遅延読み込みによってタスクの開始にかかる時間が変わる可能性があるため、Elastic Load Balancing のヘル スチェック猶予期間など、さまざまなタイムアウトを変更する必要がある場合があります。 • コンテナイメージが遅延読み込みされないようにするには、コンテナレジストリーから SOCI インデックスを 削除します。タスク内のコンテナイメージが考慮事項のいずれかを満たさない場合、そのコンテナイメージは デフォルトの方法でダウンロードされます。 出典: Fargate 考慮事項