Jika terjadi pengecualian perangkat keras pada infrastruktur dasar, Alibaba Cloud Service (ACS) melaporkannya melalui mekanisme seperti event Kubernetes dan Condition. Untuk informasi selengkapnya, lihat GPU Fault Diagnosis and Recovery. Untuk menghindari gangguan layanan, Anda dapat mengonfigurasi komponen acs-instance-helper agar mengaktifkan penanganan kesalahan. Fitur ini mengotomatiskan scale-out dan eviction workload, sehingga meningkatkan efisiensi O&M serta menjamin stabilitas layanan.
Cara kerja
Ketika terjadi event O&M terjadwal atau kesalahan perangkat keras—seperti GPU yang rusak—pada infrastruktur dasar instans ACS, hal tersebut dapat memengaruhi stabilitas dan performa layanan atau menimbulkan risiko downtime. Anda dapat mengonfigurasi komponen acs-instance-helper untuk mencapai penanganan kesalahan sepenuhnya otomatis:
Automatic fault monitoring: Komponen ini terus-menerus mendengarkan
Conditionkesalahan pod. Infrastruktur dasar secara otomatis melaporkan sinyal ini untuk kejadian seperti kegagalan GPU, kegagalan mesin penuh, atau event O&M terjadwal berupa restart node.Aligned window processing: Komponen ini menentukan waktu pemrosesan berdasarkan batas waktu penanganan kesalahan yang dilaporkan oleh node dasar dan konfigurasi jendela O&M opsional. Jika batas waktu memungkinkan, komponen akan menunggu hingga jendela O&M yang telah ditentukan dimulai sebelum memproses.
Triggered rotational updates: Komponen ini secara otomatis menggunakan kebijakan scale-out online (scale out terlebih dahulu, lalu destroy) untuk aplikasi tanpa status, seperti Deployments dan CloneSets, guna melakukan rotasi pod yang lancar pada node yang bermasalah.
PentingUntuk aplikasi non-online, acs-instance-helper langsung melakukan eviction terhadap instans setelah mendeteksi kondisi abnormal.
Cakupan penerapan
Versi kluster ACS Anda adalah 1.28 atau lebih baru.
Komponen ACK Virtual Node telah diinstal, dan versinya v2.16.0 atau lebih baru. Untuk informasi selengkapnya, lihat ACK Virtual Node.
Instal komponen
Di ACS console, klik nama kluster target Anda. Pada panel navigasi kiri, pilih .
Pada halaman Helm, klik Create.
Basic Information: Di kotak pencarian Chart, masukkan acs-instance-helper dan pilih dari hasil pencarian.
Parameters: Untuk Chart Version, pilih versi terbaru.
Konfigurasikan pengaturan global untuk komponen acs-instance-helper (Opsional)
Anda dapat mengonfigurasi tipe workload tambahan yang didukung dan jendela O&M untuk komponen ini.
Console
Pada panel navigasi kiri halaman detail kluster target, pilih Configurations > ConfigMaps.
Pada halaman ConfigMaps, klik Create from YAML. Lalu, salin manifes berikut ke area Templates dan klik Create.
kubectl
Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Simpan manifes YAML berikut sebagai file bernama
acs-instance-helper-global-configmap.yaml. Kemudian, jalankan perintahkubectl 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" # O&M window: every Saturday and SundayBentangkan bagian berikut untuk melihat deskripsi item konfigurasi.
Buat dan konfigurasikan workload
Anda dapat mengaktifkan fitur penanganan kesalahan untuk suatu workload dengan mengonfigurasi anotasinya.
Fitur penanganan kesalahan melakukan rotasi instans dengan mencoba berulang kali melakukan eviction menggunakan Eviction API, bukan menghapusnya secara langsung. Anda dapat mengonfigurasi kebijakan PodDisruptionBudget (PDB) untuk mengontrol konkurensi eviction dan mencegah gangguan layanan. Untuk informasi selengkapnya, lihat Kontrol konkurensi eviction pod menggunakan resource PDB.
Console
Pada panel navigasi kiri kluster tujuan, pilih Workloads > Deployments.
Pada 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: # Key annotation: Enables the fault handling feature for the 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: AlwaysPada jendela pop-up, temukan aplikasi tanpa status tujuan dan klik View . Pastikan status pod adalah
Running.
kubectl
Simpan konten YAML berikut sebagai file bernama `app.yaml`, lalu 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: # Key annotation: Enables the fault handling feature for the 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: AlwaysPastikan status pod aplikasi tujuan adalah
Running.kubectl get pods -l app=hardware-fault-helper-example
Simulasikan skenario kesalahan dan amati hasilnya
Dalam skenario nyata, sistem kontrol dasar secara otomatis menambahkan Condition. Di sini, kami mensimulasikan skenario kesalahan dengan secara manual menyuntikkan Condition ke salah satu pod.
Simulasikan kesalahan: Ganti
POD_NAMEdengan nama pod aktual untuk menyuntikkanConditionkesalahan perangkat keras ke pod tujuan.Batas waktu penanganan kesalahan adalah waktu yang ditentukan dalam 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 scale-out: Setelah kesalahan disuntikkan, acs-instance-helper memicu scale-out berdasarkan konfigurasi jendela O&M (atau segera jika tidak ada konfigurasi). 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 # New scaled-out podLihat event scale-out: Periksa event pod yang bermasalah. Anda akan melihat event
NewInstanceCreationTriggered, yang menegaskan bahwa operasi scale-out 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 instanceLihat event eviction: Setelah waktu yang ditentukan oleh
hardwareFaultEvictionSecondsberlalu, pod yang bermasalah di-offline (masuk ke status Terminating lalu dihapus). Anda juga dapat mengamati event offline pada saat 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-containerKonfirmasi pemulihan: Akhirnya, 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 deployment dengan dua replika di kluster Anda. Setiap replika dialokasikan 1 vCPU dan 2 GiB memori. Sumber daya ini dikonsumsi dari kluster Anda dan akan dikenai biaya. Untuk informasi selengkapnya tentang penagihan, lihat ACS computing power billing.
FAQ
Kontrol konkurensi eviction pod menggunakan resource PDB
Ketika pod harus dievict karena event eksternal seperti node draining atau scale-in otomatis, Anda dapat mengonfigurasi kebijakan PodDisruptionBudget (PDB) untuk menjamin ketersediaan tinggi layanan Anda. Kebijakan ini mengontrol konkurensi eviction menggunakan parameter berikut:
maxUnavailable: Menentukan jumlah maksimum pod yang boleh tidak tersedia selama proses eviction.minAvailable: Menentukan jumlah minimum pod yang harus tetap tersedia selama proses eviction.
Contoh berikut menjamin bahwa setidaknya satu pod tetap tersedia selama eviction.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: app-pdb
namespace: YOUR_NAMESPACE # Tentukan namespace tempat kebijakan berlaku. Jika tidak ditentukan, default-nya adalah 'default'
spec:
minAvailable: 1
selector:
matchLabels:
app: app