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
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
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.tomldan 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 danTwoliter.lockmengunci intisari mereka. Untuk mengubah keduanya, jalankan./tools/twoliter/twoliter updateuntuk 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.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 metadata. Kit eksternal memasok 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, 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
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
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 |
|
|
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 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.