Setelah mengaktifkan mode Smart Hosting pada kluster, Anda dapat menggunakan kelompok node terkelola untuk menskalakan sumber daya GPU secara dinamis. Hal ini secara signifikan mengurangi biaya untuk beban kerja GPU dengan lalu lintas yang fluktuatif, seperti inferensi online.
Penerapan
Kluster ACK yang dikelola dengan mode Smart Hosting diaktifkan
Sistem operasi node adalah ContainerOS 3.6 atau lebih baru. Untuk meningkatkan versi ContainerOS, lihat Mengubah sistem operasi.
Langkah 1: Buat kelompok node terkelola dengan tipe instans GPU
Buat kelompok node terpisah untuk beban kerja GPU. Saat Anda mengirimkan beban kerja yang memerlukan sumber daya GPU, sistem akan secara otomatis membuat node GPU berdasarkan kebutuhan tersebut. Node tersebut akan dilepas secara otomatis saat tidak digunakan dan memenuhi kondisi skala-masuk, sehingga Anda hanya dikenai biaya atas sumber daya yang benar-benar digunakan.
Klik Create Node Pool dan konfigurasikan parameter.
Parameter utama dijelaskan di bawah ini. Untuk informasi selengkapnya tentang parameter, lihat Create a node pool.
Item Konfigurasi
Deskripsi
Hosting Configuration
Pilih Smart Hosting.
VSwitch
Saat kelompok node melakukan penskalaan, node diperluas atau dikurangi di zona vSwitch yang dipilih berdasarkan Scaling Policy. Untuk ketersediaan tinggi, pilih dua atau lebih vSwitch di zona yang berbeda.
Konfigurasi terkait instans
Atur Instance Configuration Method menjadi Specify Instance Type.
Architecture: Elastic GPU Service.
Instance Type: Pilih instance family yang sesuai sesuai kebutuhan, misalnya ecs.gn7i-c8g1.2xlarge (NVIDIA A10). Untuk meningkatkan tingkat keberhasilan skala keluar, pilih beberapa tipe instans.
Taints
Untuk mencegah beban kerja non-GPU dijadwalkan ke node GPU yang lebih mahal, gunakan taint untuk isolasi logis.
Key: nvidia.com/gpu
Value: true
Effect: NoSchedule
Langkah 2: Konfigurasikan permintaan sumber daya dan toleransi taint untuk beban kerja GPU
Untuk memastikan aplikasi Anda dapat dijadwalkan ke kelompok node dan memicu pembuatan otomatis node GPU, Anda harus menentukan kebutuhan sumber daya GPU serta toleransi terhadap taint node dalam konfigurasi YAML.
Konfigurasikan permintaan sumber daya GPU: Tentukan sumber daya GPU yang dibutuhkan dalam bidang
resourceskontainer.# ... spec: containers: - name: gpu-automode resources: limits: nvidia.com/gpu: 1 # Meminta 1 sumber daya kartu GPU # ...Konfigurasikan toleransi taint: Tambahkan bidang
tolerationsuntuk mencocokkan taint kelompok node. Hal ini memungkinkan Pod dijadwalkan ke node dengan taint tersebut.# ... spec: tolerations: - key: "nvidia.com/gpu" # Cocokkan Key dari taint yang ditetapkan untuk kelompok node operator: "Equal" value: "true" # Cocokkan Value dari taint yang ditetapkan untuk kelompok node effect: "NoSchedule" # Cocokkan Effect dari taint yang ditetapkan untuk kelompok node # ...
Langkah 3: Sebarkan beban kerja GPU dan verifikasi skalabilitas elastis
Bagian ini menggunakan aplikasi Stable Diffusion Web UI sebagai contoh untuk menunjukkan proses penyebaran dan memverifikasi skalabilitas elastis.
Buat dan sebarkan beban kerja.
Verifikasi skala keluar otomatis node.
Setelah penyebaran, Pod masuk ke status
Pendingkarena sumber daya GPU belum tersedia.Periksa status Pod.
kubectl get pod -l app=stable-diffusionPeriksa event Pod.
kubectl describe pod -l app=stable-diffusionDi bagian
Events, pertama kali muncul eventFailedScheduling, diikuti oleh eventProvisionNode. Hal ini menunjukkan bahwa skala keluar telah dipicu....... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 15m default-scheduler 0/3 nodes are available: 1 node(s) had untolerated taint {node.kubernetes.io/not-ready: }, 2 Insufficient cpu, 2 Insufficient memory, 2 Insufficient nvidia.com/gpu. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling., , Normal ProvisionNode 16m GOATScaler Provision node asa-2ze2h0f4m5ctpd8kn4f1 in Zone: cn-beijing-k with InstanceType: ecs.gn7i-c8g1.2xlarge, Triggered time 2025-11-19 02:58:01.096 Normal AllocIPSucceed 12m terway-daemon Alloc IP 10.XX.XX.141/16 took 4.764400743s Normal Pulling 12m kubelet Pulling image "yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion:v1.0.0-gpu" Normal Pulled 3m48s kubelet Successfully pulled image "yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion:v1.0.0-gpu" in 8m47.675s (8m47.675s including waiting). Image size: 11421866941 bytes. Normal Created 3m42s kubelet Created container: stable-diffusion Normal Started 3m24s kubelet Started container stable-diffusionAmbil nama node tempat Pod berjalan.
# Simpan nama node tempat Pod berjalan ke variabel NODE_NAME NODE_NAME=$(kubectl get pod -l app=stable-diffusion -o jsonpath='{.items[0].spec.nodeName}') # Cetak nama node echo "Stable Diffusion berjalan di node: $NODE_NAME" # Lihat detail node untuk memastikan node berada dalam status Ready kubectl get node $NODE_NAME
Akses Stable Diffusion.
Tunggu beberapa menit hingga node baru bergabung ke kluster dan Pod mulai berjalan. Setelah itu, Anda dapat mengakses aplikasi melalui Internet.Jalankan perintah berikut untuk mengambil alamat IP publik (
EXTERNAL-IP) layanan.kubectl get svc stable-diffusion-svcDalam keluaran, temukan
EXTERNAL-IP.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE stable-diffusion-svc LoadBalancer 192.XXX.XX.196 8.XXX.XX.68 7860:31302/TCP 18mBuka browser, lalu arahkan ke
http://<EXTERNAL-IP>:7860.Jika halaman Stable Diffusion Web UI berhasil dimuat, berarti beban kerja sedang berjalan di node GPU.
Verifikasi skala-masuk otomatis node (pemicu manual).
Untuk memverifikasi kemampuan skala-masuk otomatis, hapus deployment secara manual agar node menjadi idle.Hapus deployment dan layanan yang telah Anda buat.
# Hapus deployment kubectl delete deployment stable-diffusion # Hapus layanan kubectl delete service stable-diffusion-svcAmati skala-masuk node.
Komponen penskalaan node secara otomatis menghapus node dari kluster untuk menghemat biaya setelah delay pemicu skala-masuk tercapai. Delay default adalah 3 menit dalam mode Smart Hosting. Gunakan nama node yang telah Anda peroleh sebelumnya untuk mengkueri kembali node tersebut.
kubectl get node $NODE_NAMEKeluaran yang diharapkan menunjukkan bahwa node tidak ditemukan. Hal ini mengonfirmasi bahwa node telah secara otomatis diskala-masuk dan dilepas sesuai harapan.
Error from server (NotFound): nodes "<nodeName>" not found