Bantu meningkatkan 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 GitHub tautan Edit halaman ini di 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 Bottlerocket AMI khusus untuk Amazon EKS
Saat menjalankan beban kerja GPU di Amazon Elastic Kubernetes Service (Amazon EKS), Anda memilih varian Bottlerocket. Varian harus sesuai dengan versi Kubernetes dan jenis 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
-
Basis dasar yang diperketat yang dibutuhkan oleh tim keamanan Anda
Karena Bottlerocket
penting
Jenis g7 instance memerlukan driver NVIDIA versi 595 atau yang lebih baru, didukung pada EKS Bottlerocket NVIDIA 1.37 AMI. EKS Bottlerocket NVIDIA AMI 1.36 dan yang lebih lama saat ini menyertakan driver NVIDIA versi 580, yang tidak mendukung instance. g7
Lihat repositori Bottlerocket
Bagaimana sistem build bekerja
Ketika Anda berlaricargo make -e BUILDSYS_VARIANT=aws-k8s-1.36-nvidia, tiga hal terjadi:
-
Ambil dependensi. Twoliter (orkestrator build Bottlerocket) membaca
Twoliter.tomldan menarik tiga artefak Open Container Initiative (OCI) dari:public.ecr.aws/bottlerocket-
bottlerocket-sdk — gambar wadah dengan toolchain kompilasi silang lengkap (makro GCC, Rust, Go, RPM).
-
bottlerocket-kernel-kit — RPM pra-build 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 wadah, plugin pengaturan, dan layanan sistem.
Twoliter.tomlmenyematkan versi dan mengTwoliter.lockunci cerdasannya. Untuk mengubah keduanya, jalankan./tools/twoliter/twoliter updateuntuk menyelesaikan ulang.
-
-
Bangun varian. Twoliter meluncurkan build Docker di dalam wadah SDK. Ini mengkompilasi peti pengaturan default varian Anda, menyelesaikan pohon ketergantungan RPM dari kit, dan merakit semuanya ke dalam gambar disk.
-
Keluaran. Twoliter menulis
.img.lz4file terakhir ke.build/images/Build menghasilkan output deterministik:Twoliter.tomlpin dan varian yang samaCargo.tomlselalu 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 adalah metadata. Kit eksternal menyediakan kernel, driver, dan ruang pengguna.
-
Settings-defaults file adalah symlink, bukan salinan. Gunakan
cp -R(bukancp -rdi macOS) untuk melestarikannya. -
Menambahkan varian memerlukan pengeditan di lima tempat: dua
Cargo.tomlfile ruang kerja, dua.specfile, danREADME.md.
Prasyarat
Untuk menyelesaikan panduan, 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
-
Karat (rantai alat stabil, dipasang melalui rustup)
-
cargo-make (versi terbaru)
-
Keakraban dengan konsep pengemasan Git, Rust's Cargo, dan RPM
catatan
Setelah menyelesaikan panduan ini, hentikan instans EC2 dan hapus pendaftaran AMI yang tidak lagi Anda perlukan untuk menghindari biaya 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 gp3 150 GB dan lampirkan kebijakan terkel AmazonSSMManagedInstanceCore ola untuk akses SSM.
Hubungkan ke instance menggunakan AWS Manajer Sesi Sistem (SSM):
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 tersebut 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
cd ~/bottlerocket
Untuk membuat build yang dapat direproduksi, lihat rilis yang ditandai (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: Atasi masalah jalur pembuatan kargo
Twoliter menyetel CARGO_HOME ke~/bottlerocket/.cargo, yang mencegah proses Kargo bagian dalam menemukan pabrik kargo Anda yang terpasang secara global. Buat symlink:
mkdir -p ~/bottlerocket/.cargo/bin ln -sf /root/.cargo/bin/cargo-make ~/bottlerocket/.cargo/bin/cargo-make
Tanpa langkah ini, pembangunan gagal denganerror: no such command: make.
Langkah 5: Temukan cabang driver yang tersedia
Paket NVIDIA kmod dikirim ke dalambottlerocket-kernel-kit. Untuk informasi tentang paket driver yang tersedia, lihat direktori paket kernel-kit
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 Bottlerocket NVIDIA 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 mempertahankan 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 settings-dedefault:
"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:
cd ~/bottlerocket/sources cargo update --workspace
penting
Jangan gunakancargo generate-lockfile. Ini menulis ulang seluruh lockfile dan menabrak 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 peluncuran template.
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 memotong kit:
| Apa yang Anda inginkan | Apa yang harus diubah dalam varian Cargo.toml |
|---|---|
|
Cabang driver NVIDIA yang berbeda |
|
|
Versi kernel yang berbeda |
|
|
Hapus NVIDIA seluruhnya |
Hapus tiga |
|
Tambahkan dukungan EFA |
Tambahkan |
|
Ganti versi runtime kontainer |
|
Untuk informasi tentang paket yang tersedia, lihat kernel-kit
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
Membersihkan
Jika Anda tidak lagi memerlukan host build, hentikan instans EC2 untuk menghindari biaya yang sedang berlangsung. AMI tetap ada secara independen di akun Anda; hapus daftarnya 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 menyalin 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.