ACS melaporkan kegagalan perangkat keras melalui Kubernetes Events dan Conditions (lihat Diagnosis dan pemulihan kegagalan GPU). Konfigurasikan komponen acs-instance-helper untuk mengotomatiskan penanganan kegagalan dengan skalabilitas vertikal otomatis dan eviction guna mencegah gangguan layanan.
Cara kerja
Saat sebuah instans ACS mengalami maintenance node terjadwal atau kegagalan perangkat keras seperti GPU rusak, stabilitas dan performa layanan dapat terpengaruh. Komponen acs-instance-helper mengotomatiskan penanganan kegagalan sebagai berikut:
-
Pemantauan kegagalan otomatis: Komponen ini terus-menerus memantau
Conditionkegagalan pada Pod. Infrastruktur dasar secara otomatis melaporkan sinyal ini untuk kejadian seperti kegagalan GPU, kegagalan mesin host, atau maintenance dan reboot node terjadwal. -
Penyelarasan jendela pemeliharaan: Komponen menentukan waktu tindakan berdasarkan batas waktu penanganan kegagalan yang dilaporkan oleh node dasar dan jendela pemeliharaan opsional. Jika batas waktu memungkinkan, komponen akan menunggu hingga jendela pemeliharaan yang telah ditentukan sebelum melanjutkan.
-
Pemicuan pembaruan rotasi: Untuk aplikasi tanpa status seperti Deployments dan CloneSets, komponen menggunakan strategi skalabilitas vertikal online (scale up terlebih dahulu, lalu hapus) untuk merotasi Pod pada node yang bermasalah.
PentingUntuk aplikasi non-online, acs-instance-helper langsung melakukan eviction terhadap Pod pada instans setelah mendeteksi kondisi kegagalan.
Prasyarat
Kluster ACS Anda menggunakan versi 1.28 atau lebih baru.
ACK Virtual Node telah diinstal dan menggunakan versi v2.16.0 atau lebih baru. Untuk informasi selengkapnya, lihat ACK Virtual Node.
Instal komponen
Di Konsol ACS, klik nama kluster target Anda. Di panel navigasi sebelah kiri, pilih .
Di halaman Helm, klik Create.
Informasi Dasar: Di kotak pencarian Chart, masukkan acs-instance-helper dan pilih dari hasil pencarian.
Parameter: Untuk Chart Version, pilih versi terbaru.
Konfigurasikan pengaturan global untuk acs-instance-helper (Opsional)
Anda juga dapat mengonfigurasi jendela pemeliharaan dan menambahkan dukungan untuk jenis workload kustom.
Konsol
-
Di panel navigasi sebelah kiri, pilih Configurations > ConfigMaps.
-
Di halaman ConfigMaps, klik Create from YAML. Salin manifes berikut ke area Template lalu klik Create.
kubectl
-
Dapatkan KubeConfig kluster dan hubungkan ke kluster menggunakan kubectl.
-
Simpan konten YAML berikut sebagai file acs-instance-helper-global-configmap.yaml, lalu jalankan perintah
kubectl apply -f acs-instance-helper-global-configmap.yaml.
apiVersion: v1
kind: ConfigMap
metadata:
name: acs-instance-helper-global-config
namespace: kube-system
data:
customOnlineWorkloads: foo.io/SomeWorkload,bar.io/AnotherWorkload
hardwareFaultEvictionSeconds: "60"
maintenanceTime: "2025-10-09T10:00:00+08:00"
maintenanceDuration: "4h"
maintenanceWeeklyPeriod: "Saturday,Sunday"
# maintenanceRecurrence: "FREQ=WEEKLY;BYDAY=SA,SU" # Jendela pemeliharaan: setiap Sabtu dan Minggu
Buka bagian berikut untuk deskripsi parameter.
Buat dan konfigurasikan workload
Aktifkan fitur penanganan kegagalan untuk workload Anda dengan mengonfigurasi anotasi.
Fitur penanganan kegagalan melakukan rotasi dengan berulang kali mencoba eviction menggunakan Eviction API alih-alih langsung menghapus Pod pada instans yang bermasalah. Anda dapat mengonfigurasi kebijakan PodDisruptionBudget (PDB) untuk mengontrol konkurensi eviction dan mencegah gangguan layanan. Untuk informasi selengkapnya, lihat Gunakan PDB untuk mengontrol konkurensi eviction Pod.
Konsol
-
Di panel navigasi sebelah kiri kluster target Anda, pilih Workloads > Deployments.
-
Di halaman Deployments, klik Create from YAML. Salin konten berikut ke area Template lalu klik Create.
apiVersion: apps/v1 kind: Deployment metadata: name: hardware-fault-helper-example namespace: default spec: replicas: 1 selector: matchLabels: app: hardware-fault-helper-example template: metadata: labels: app: hardware-fault-helper-example annotations: # Anotasi utama: Mengaktifkan fitur penanganan kegagalan untuk workload. "ops.alibabacloud.com/enable-hardware-fault-helper": "true" spec: containers: - image: registry-cn-hangzhou.ack.aliyuncs.com/dev/hello-world:v1 name: main-container resources: limits: cpu: 100m memory: 100Mi restartPolicy: Always -
Di kotak dialog yang muncul, temukan aplikasi tanpa status target dan klik View . Pastikan status Pod adalah
Running.
kubectl
-
Simpan konten YAML berikut sebagai app.yaml dan jalankan perintah
kubectl apply -f app.yaml.apiVersion: apps/v1 kind: Deployment metadata: name: hardware-fault-helper-example namespace: default spec: replicas: 1 selector: matchLabels: app: hardware-fault-helper-example template: metadata: labels: app: hardware-fault-helper-example annotations: # Anotasi utama: Mengaktifkan fitur penanganan kegagalan untuk workload. "ops.alibabacloud.com/enable-hardware-fault-helper": "true" spec: containers: - image: registry-cn-hangzhou.ack.aliyuncs.com/dev/hello-world:v1 name: main-container resources: limits: cpu: 100m memory: 100Mi restartPolicy: Always -
Pastikan status Pod aplikasi target adalah
Running.kubectl get pods -l app=hardware-fault-helper-example
Simulasikan skenario kegagalan
Di lingkungan produksi, Condition ditambahkan secara otomatis oleh lapisan kontrol dasar. Pada bagian ini, Anda secara manual menyuntikkan Condition ke dalam Pod untuk mensimulasikan skenario kegagalan.
-
Simulasikan kegagalan: Ganti
POD_NAMEdengan nama aktual Pod Anda untuk menyuntikkanConditionkegagalan perangkat keras.Batas waktu penanganan kegagalan ditentukan di bidang
message.kubectl patch pod POD_NAME --type='merge' --subresource=status -p='{ "status": { "conditions": [ { "type": "Interruption.HardwareFault", "status": "True", "reason": "MockForTest", "message": "Underlying infrastructure issue [Reboot] scheduled at 2099-03-12T09:00:00.000+08:00", "lastProbeTime": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'", "lastTransitionTime": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'" } ] } }' -
Amati skalabilitas vertikal: Setelah Anda menyuntikkan kegagalan, acs-instance-helper memicu skalabilitas vertikal sesuai dengan konfigurasi jendela pemeliharaan. Jika tidak ada jendela yang dikonfigurasi, skalabilitas vertikal dipicu segera. Pod baru dibuat, dan status workload asli tetap tidak terpengaruh.
kubectl get pods -l app=hardware-fault-helper-exampleOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE hardware-fault-helper-example-7cf4cf96c5-xxxxx 1/1 Running 0 2m21s hardware-fault-helper-example-7cf4cf96c5-yyyyy 1/1 Running 0 36s # Pod baru hasil skalabilitas vertikal -
Periksa event skalabilitas vertikal: Periksa event untuk Pod yang bermasalah. Anda akan melihat event
NewInstanceCreationTriggered, yang mengonfirmasi bahwa skalabilitas vertikal dipicu olehhardware-fault-helper.kubectl describe po POD_NAMEOutput yang diharapkan:
... Normal NewInstanceCreationTriggered 62s hardware-fault-helper controller default/hardware-fault-helper-example-7cf4cf96c5 (apiVersion:apps/v1, kind:ReplicaSet) will create a new instance -
Periksa event eviction: Setelah periode tunggu
hardwareFaultEvictionSeconds, Pod yang bermasalah di-nonaktifkan. Pod tersebut memasuki status Terminating sebelum dihapus. Anda juga dapat mengamati event untuk tindakan ini.kubectl describe po POD_NAMEOutput yang diharapkan:
... Warning InstanceEvictedGracefully 2s hardware-fault-helper pod is deleted due to hardware fault Normal Killing 1s kubelet Stopping container main-container -
Konfirmasi pemulihan: Terakhir, Pod yang bermasalah sepenuhnya digantikan, sehingga hanya tersisa Pod yang baru dibuat.
kubectl get pods -l app=hardware-fault-helper-exampleOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE hardware-fault-helper-example-7cf4cf96c5-yyyyy 1/1 Running 0 5m5s
Penagihan
Menginstal komponen acs-instance-helper akan men-deploy sebuah Deployment dengan dua replika di kluster Anda. Setiap replika mengonsumsi 1 vCPU dan 2 GiB memori dari kluster Anda, yang akan dikenai biaya. Untuk informasi selengkapnya tentang penagihan, lihat Penagihan daya komputasi ACS.
FAQ
Kontrol eviction Pod dengan PDB
Untuk menjaga ketersediaan tinggi selama eviction Pod saat draining node dan autoscaling, konfigurasikan kebijakan PodDisruptionBudget (PDB). PDB mengontrol konkurensi eviction dengan parameter berikut:
-
maxUnavailable: Jumlah maksimum Pod yang boleh tidak tersedia selama proses eviction. -
minAvailable: Jumlah minimum Pod yang harus tetap tersedia selama proses eviction.
Contoh berikut memastikan setidaknya satu Pod tetap tersedia selama eviction:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: app-pdb
namespace: YOUR_NAMESPACE # Tentukan namespace tempat kebijakan berlaku. Default ke `default` jika tidak ditentukan.
spec:
minAvailable: 1
selector:
matchLabels:
app: app