View a markdown version of this page

Buat varian AMI Bottlerocket khusus untuk Amazon EKS - Amazon EKS

Bantu tingkatkan halaman ini

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Untuk berkontribusi pada panduan pengguna ini, pilih Edit halaman ini pada GitHub tautan yang terletak di panel kanan setiap halaman.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Buat varian AMI Bottlerocket khusus untuk Amazon EKS

Saat Anda menjalankan beban kerja GPU di Amazon Elastic Kubernetes Service (Amazon EKS), Anda memilih varian Bottlerocket. Varian harus sesuai dengan versi Kubernetes dan tipe akselerator Anda. Bottlerocket mengirimkan varian yang divalidasi untuk konfigurasi umum. Namun, organisasi Anda mungkin memerlukan varian yang berbeda untuk salah satu alasan berikut:

  • Cabang driver NVIDIA yang lebih baru

  • Versi driver yang disematkan untuk kepatuhan terhadap peraturan

  • Paket tambahan untuk pemantauan

  • Garis dasar yang diperkeras yang dibutuhkan oleh tim keamanan Anda

Karena Bottlerocket di GitHub situs web sepenuhnya open-source, Anda dapat membuat varian khusus yang memenuhi kebutuhan ini. Topik ini menunjukkan cara mengkloning varian yang ada dan menukar driver NVIDIA dari cabang R580 ke R595 (versi 595.71.05). Anda kemudian membangun gambar dan mendaftarkannya sebagai AMI pribadi.

penting

Jenis instans G7 EC2 memerlukan driver NVIDIA versi 595 atau yang lebih baru. EKS Bottlerocket NVIDIA AMI saat ini menyertakan driver NVIDIA versi 580, yang tidak mendukung instance G7.

Lihat repositori Bottlerocket di GitHub situs web untuk petunjuk tentang membangun varian dengan driver NVIDIA versi 595. Topik ini berjalan melalui proses lengkap mulai dari Langkah 1.

Cara kerja sistem build

Ketika Anda berlaricargo make -e BUILDSYS_VARIANT=aws-k8s-1.36-nvidia, tiga hal terjadi:

  • Ambil dependensi. Twoliter (orkestrator build Bottlerocket) membaca Twoliter.toml dan menarik tiga artefak Open Container Initiative (OCI) dari: public.ecr.aws/bottlerocket

    • bottlerocket-sdk — gambar kontainer dengan rantai alat kompilasi silang lengkap (makro GCC, Rust, Go, RPM).

    • bottlerocket-kernel-kit — RPM pra-bangun untuk kernel, modul kernel (termasuk paket NVIDIA kmod), dan firmware.

    • bottlerocket-core-kit — RPM pra-bangun untuk ruang pengguna: kubelet, containerd, plugin perangkat NVIDIA dan toolkit kontainer, plugin pengaturan, dan layanan sistem.

      Twoliter.tomlmenyematkan versi dan Twoliter.lock mengunci intisari mereka. Untuk mengubah keduanya, jalankan ./tools/twoliter/twoliter update untuk menyelesaikan kembali.

  • Bangun variannya. Twoliter meluncurkan build Docker di dalam wadah SDK. Ini mengkompilasi peti pengaturan-default varian Anda, menyelesaikan pohon ketergantungan RPM dari kit, dan merakit semuanya menjadi image disk.

  • Keluaran. Tdoliter menulis .img.lz4 file terakhir ke. build/images/ Build menghasilkan output deterministik: Twoliter.toml pin dan varian yang sama Cargo.toml selalu menghasilkan gambar yang sama, terlepas dari host.

Tata letak repositori

Direktori berikut relevan dengan pekerjaan varian:

bottlerocket/ ├── Cargo.toml # workspace: lists every variant ├── Twoliter.toml # pins SDK + kit versions ├── Twoliter.lock # locked digests for the above ├── Licenses.toml # you create this (NVIDIA license acknowledgement) ├── Infra.toml # you create this (AMI publish regions) │ ├── variants/ │ ├── aws-k8s-1.36-nvidia/ # example variant you'll copy │ │ ├── Cargo.toml # package list + kernel params │ │ └── amispec.toml # symlink → ../shared/amispec-split.toml │ └── shared/ # shared AMI spec templates │ ├── sources/ │ ├── Cargo.toml # workspace: lists every settings-defaults crate │ ├── shared-defaults/ # the actual defaults (symlink targets) │ └── settings-defaults/ │ └── aws-k8s-1.36-nvidia/ │ ├── Cargo.toml │ └── defaults.d/ # 30+ symlinks into shared-defaults/ │ └── packages/ ├── settings-defaults/ │ └── settings-defaults.spec # RPM: declares which variants exist └── settings-plugins/ └── settings-plugins.spec # RPM: maps variants to settings plugins

Tinjau catatan berikut tentang struktur repositori:

  • Varian sebagian besar metadata. Kit eksternal memasok kernel, driver, dan ruang pengguna.

  • Settings-defaults file adalah symlink, bukan salinan. Gunakan cp -R (bukan cp -r di macOS) untuk melestarikannya.

  • Menambahkan varian memerlukan pengeditan di lima tempat: dua Cargo.toml file ruang kerja, dua .spec file, dan. README.md

Prasyarat

Untuk menyelesaikan penelusuran, Anda perlu:

  • AWS Akun dengan izin untuk meluncurkan instans EC2 dan mendaftarkan AMI

  • Instans EC2 (atau host Linux x86_64 yang setara) dengan setidaknya 8 core, memori 16 GiB, dan disk 150 GB

  • Ubuntu 24.04 LTS (atau Fedora; macOS tidak didukung sebagai host build)

  • Docker 20.10 atau yang lebih baru

  • Rust (rantai alat stabil, dipasang melalui rustup)

  • cargo-make (versi terbaru)

  • Keakraban dengan konsep pengemasan Git, Kargo Rust, dan RPM

catatan

Saat Anda menyelesaikan panduan ini, hentikan instans EC2 dan deregister AMI apa pun yang tidak lagi Anda perlukan untuk menghindari tagihan yang sedang berlangsung. Untuk petunjuk tentang pembersihan, lihatMembersihkan.

Langkah 1: Siapkan host build

Luncurkan instance EC2 - misalnya, c7i.8xlarge (32 vCPU, memori 64 GiB). Gunakan volume root 150 GB gp3 dan lampirkan kebijakan AmazonSSMManagedInstanceCore terkelola untuk akses SSM.

Connect ke instans menggunakan AWS Systems Manager (SSM) Session Manager:

aws ssm start-session --target <instance-id> cd ~

Instal paket sistem operasi yang diperlukan:

apt-get update apt-get install -y build-essential openssl libssl-dev pkg-config lz4 \ git ca-certificates curl gnupg
catatan

BUILDING.mdReferensi resmiliblz4-tool. Pada versi Ubuntu terbaru, paket ini diberi namalz4.

Instal Docker menggunakan perintah berikut:

install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \ https://download.docker.com/linux/ubuntu noble stable" \ > /etc/apt/sources.list.d/docker.list apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin systemctl enable --now docker

Instal Rust dan cargo-make menggunakan perintah berikut:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y . "$HOME/.cargo/env" cargo install cargo-make

Langkah 2: Kloning repositori

Kloning repositori Bottlerocket di situs web dan navigasikan ke GitHub direktori:

cd ~/bottlerocket

Untuk membuat build yang dapat direproduksi, lihat rilis yang diberi tag (misalnya,). git checkout v1.62.1 Untuk menggunakan paket terbaru, tetap di develop cabang.

Langkah 3: Verifikasi versi kit

Buka Twoliter.toml dan konfirmasikan versi kit. Untuk dukungan R595, Anda memerlukan bottlerocket-kernel-kit versi 6.2.2 atau yang lebih baru:

[[kit]] name = "bottlerocket-kernel-kit" version = "6.2.2" vendor = "bottlerocket"

Jika versinya lebih lama, perbarui dan buat ulang kunci:

./tools/twoliter/twoliter update

Langkah 4: Mengatasi masalah jalur pembuatan kargo

Twoliter disetel CARGO_HOME ke~/bottlerocket/.cargo, yang mencegah proses Cargo bagian dalam menemukan pembuatan kargo yang diinstal secara global. Buat symlink:

mkdir -p ~/bottlerocket/.cargo/bin ln -sf /root/.cargo/bin/cargo-make ~/bottlerocket/.cargo/bin/cargo-make

Tanpa langkah ini, build gagalerror: no such command: make.

Langkah 5: Temukan cabang driver yang tersedia

Paket NVIDIA kmod dikirim ke dalam. bottlerocket-kernel-kit Untuk informasi tentang paket driver yang tersedia, lihat direktori paket kernel-kit di GitHub situs web, atau catatan rilis di situs web. GitHub

Untuk kernel 6.18 (digunakan oleh aws-k8s-1.36 varian):

kmod-6.18-nvidia-r580 ← driver 580.159.03 (current default) kmod-6.18-nvidia-r595 ← driver 595.71.05

Untuk kernel 6.12 (digunakan olehaws-k8s-1.33,1.34,1.35):

kmod-6.12-nvidia-r580 kmod-6.12-nvidia-r595
catatan

Setiap paket kmod mengirimkan subpaket (-tesla,,, -open-gpu -grid-fabricmanager,-imex). Referensi varian NVIDIA Bottlerocket resmi-tesla, yang menarik semua subpaket yang diperlukan melalui dependensi RPM. Saat boot, Bottlerocket secara otomatis memilih ragam driver yang sesuai berdasarkan jenis instance.

Langkah 6: Buat varian baru

Salin varian yang ada. Gunakan cp -R untuk melestarikan symlink:

cp -R variants/aws-k8s-1.36-nvidia variants/aws-k8s-1.36-nvidia-595 cp -R sources/settings-defaults/aws-k8s-1.36-nvidia \ sources/settings-defaults/aws-k8s-1.36-nvidia-595

Suntingvariants/aws-k8s-1.36-nvidia-595/Cargo.toml:

- name = "aws-k8s-1_36-nvidia" + name = "aws-k8s-1_36-nvidia-595" - "kmod-6.18-nvidia-r580-tesla", + "kmod-6.18-nvidia-r595-tesla",

Suntingsources/settings-defaults/aws-k8s-1.36-nvidia-595/Cargo.toml:

- name = "settings-defaults-aws-k8s-1_36-nvidia" + name = "settings-defaults-aws-k8s-1_36-nvidia-595"

Langkah 7: Daftarkan varian

Daftarkan varian baru dalam lima file:

1. Cargo.toml— tambahkan anggota ruang kerja:

"variants/aws-k8s-1.36-nvidia", + "variants/aws-k8s-1.36-nvidia-595", "variants/aws-k8s-1.36-nvidia-fips",

2. sources/Cargo.toml— tambahkan anggota pengaturan-default:

"settings-defaults/aws-k8s-1.36-nvidia", + "settings-defaults/aws-k8s-1.36-nvidia-595",

3. packages/settings-defaults/settings-defaults.spec— tambahkan %package blok, entri di kedua loop build, dan %files bagian:

%package aws-k8s-1.36-nvidia-595 Summary: Settings defaults for the aws-k8s 1.36 nvidia-595 variant Requires: %{_cross_os}variant(aws-k8s-1.36-nvidia-595) Provides: %{_cross_os}settings-defaults(any) Provides: %{_cross_os}settings-defaults(aws-k8s-1.36-nvidia-595) Conflicts: %{_cross_os}settings-defaults(any) %description aws-k8s-1.36-nvidia-595 %{summary}.

Tambahkan ke kedua for defaults in loop:

aws-k8s-1.36-nvidia \ + aws-k8s-1.36-nvidia-595 \ metal-dev \

Tambahkan %files bagian:

%files aws-k8s-1.36-nvidia-595 %{_cross_defaultsdir}/aws-k8s-1.36-nvidia-595.toml %{_cross_tmpfilesdir}/storewolf-defaults-aws-k8s-1.36-nvidia-595.conf

4. packages/settings-plugins/settings-plugins.spec— tambahkan Provides: baris di bawah%package aws-k8s-nvidia:

Provides: %{_cross_os}settings-plugin(aws-k8s-1.36-nvidia) +Provides: %{_cross_os}settings-plugin(aws-k8s-1.36-nvidia-595) Conflicts: %{_cross_os}settings-plugin(any)

Langkah 8: Segarkan file kunci

Menambahkan anggota ruang kerja tidak validsources/Cargo.lock. Segarkan itu:

cd ~/bottlerocket/sources cargo update --workspace
penting

Jangan gunakancargo generate-lockfile. Ini menulis ulang seluruh file kunci dan menghilangkan dependensi transitif, yang menyebabkan kesalahan versi duplikat. cargo-deny

Langkah 9: Buat file lisensi NVIDIA

NVIDIA membatasi redistribusi sumber driver. Anda harus menambahkan pengakuan lisensi eksplisit sebelum membangun:

cat > ~/bottlerocket/Licenses.toml <<'EOF' [nvidia] spdx-id = "LicensesRef-NVIDIA-Customer-Use" licenses = [ { path = "LICENSE", license-url = "https://www.nvidia.com/en-us/drivers/nvidia-license/" } ] EOF

Langkah 10: Bangun dan publikasikan AMI

Buat Infra.toml dengan wilayah target Anda:

cat > ~/bottlerocket/Infra.toml <<'EOF' [aws] regions = ["us-west-2", "us-east-1", "us-east-2"] EOF

Bangun gambar:

cd ~/bottlerocket cargo make \ -e BUILDSYS_VARIANT=aws-k8s-1.36-nvidia-595 \ -e BUILDSYS_UPSTREAM_SOURCE_FALLBACK=true \ -e BUILDSYS_UPSTREAM_LICENSE_FETCH=true \ -e BUILDSYS_JOBS=32

Build pertama menarik gambar SDK dan kit (total ~2 GB). Build selanjutnya membutuhkan waktu 3-5 menit pada host 32-core.

Publikasikan AMI:

cargo make \ -e BUILDSYS_VARIANT=aws-k8s-1.36-nvidia-595 \ -e PUBLISH_REGIONS=us-west-2,us-east-1,us-east-2 \ ami

Build menulis ID AMI kebuild/images/x86_64-aws-k8s-1.36-nvidia-595/latest/*-amis.json. Gunakan ini di grup node terkelola EKS Anda, KarpenterEC2NodeClass, atau template peluncuran.

Kombinasi lain yang dapat Anda bangun

Panduan ini menukar cabang driver NVIDIA, tetapi Anda dapat menggunakan pendekatan yang sama untuk paket apa pun yang tersedia di kit hulu. Contoh-contoh berikut menunjukkan apa yang dapat Anda rakit tanpa melakukan forking kit:

Apa yang Anda inginkan Apa yang harus diubah dalam varian Cargo.toml

Cabang driver NVIDIA yang berbeda

kmod-6.18-nvidia-r580-teslakmod-6.18-nvidia-r595-tesla

Versi kernel yang berbeda

kernel-6.18kernel-6.12 (sesuaikan kmod sesuai)

Hapus NVIDIA seluruhnya

Hapus tiga nvidia-* baris dari included-packages

Tambahkan dukungan EFA

Tambahkan kmod-6.18-efa ke included-packages

Ganti versi runtime kontainer

containerd-2.2containerd-2.1

Untuk informasi tentang paket yang tersedia, lihat kernel-kit di GitHub situs web dan core-kit di situs web. GitHub

penting

Sistem file root Bottlerocket tidak dapat diubah. Anda tidak dapat menginstal paket saat runtime. Setiap paket dalam kit dikompilasi silang khusus untuk Bottlerocket — RPM hulu standar tidak berfungsi. Jika Anda memerlukan perangkat lunak yang belum ada dalam kit, pertimbangkan wadah bootstrap di GitHub situs web atau wadah host di GitHub situs web sebagai alternatif runtime.

Membersihkan

Jika Anda tidak lagi membutuhkan host build, hentikan instans EC2 untuk menghindari tagihan yang sedang berlangsung. AMI bertahan secara independen di akun Anda; deregister mereka dengan konsol EC2 atau CLI jika Anda tidak lagi membutuhkannya.

Ringkasan

Topik ini menunjukkan cara membuat varian Bottlerocket kustom dengan cabang driver NVIDIA yang berbeda. Prosesnya melibatkan penyalinan varian yang ada, mengubah satu referensi paket, mendaftarkan varian baru di ruang kerja dan spesifikasi RPM, dan menjalankan build. Pendekatan yang sama berlaku untuk kustomisasi apa pun: menukar versi kernel, menambahkan paket, atau membuat varian untuk rilis Kubernetes baru.