All Products
Search
Document Center

Container Compute Service:Konfigurasikan rotasi instans otomatis untuk kegagalan perangkat keras

Last Updated:Jun 23, 2026

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:

  1. Pemantauan kegagalan otomatis: Komponen ini terus-menerus memantau Condition kegagalan pada Pod. Infrastruktur dasar secara otomatis melaporkan sinyal ini untuk kejadian seperti kegagalan GPU, kegagalan mesin host, atau maintenance dan reboot node terjadwal.

  2. 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.

  3. 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.

    Penting

    Untuk 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

  1. Di Konsol ACS, klik nama kluster target Anda. Di panel navigasi sebelah kiri, pilih Applications > Helm.

  2. Di halaman Helm, klik Create.

    1. Informasi Dasar: Di kotak pencarian Chart, masukkan acs-instance-helper dan pilih dari hasil pencarian.

    2. 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

  1. Di panel navigasi sebelah kiri, pilih Configurations > ConfigMaps.

  2. Di halaman ConfigMaps, klik Create from YAML. Salin manifes berikut ke area Template lalu klik Create.

kubectl

  1. Dapatkan KubeConfig kluster dan hubungkan ke kluster menggunakan kubectl.

  2. 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.

Parameter

Key

Deskripsi

Contoh

customOnlineWorkloads

Menandai workload sebagai jenis "layanan online" yang menggunakan strategi skalabilitas vertikal online (scale up terlebih dahulu, lalu hapus) untuk merotasi Pod pada node yang bermasalah.

Secara default, komponen mendukung jenis workload Deployment. Anda dapat menggunakan parameter ini untuk menambahkan dukungan terhadap jenis workload kustom.

Penting
  • Pastikan controller workload kustom Anda dapat mempertahankan jumlah replika yang ditentukan (misalnya, dengan membuat replika baru secara otomatis jika jumlahnya kurang).

  • Rotasi mulus tidak dijamin untuk semua workload kustom. Saat mengaktifkan fitur ini untuk workload kustom, uji secara menyeluruh.

foo.io/SomeWorkload,bar.io/AnotherWorkload

hardwareFaultEvictionSeconds

Untuk layanan yang menggunakan strategi "scale up dan evict", parameter ini menentukan periode tunggu (dalam detik) antara penyelesaian scale-up dan eviction Pod pada instans yang bermasalah.

  • Nilai default adalah "300" (5 menit). Nilainya harus berupa string, misalnya "60".

"60"

maintenanceTime

Mengaktifkan jendela pemeliharaan untuk kluster dan menetapkan waktu mulainya dalam format RFC3339.

Gunakan identifikasi zona waktu eksplisit, seperti +08:00 atau UTC.

2025-10-09T10:00:00+08:00

Menyatakan bahwa jendela pemeliharaan dimulai pukul 10.00 pagi pada 9 Oktober 2025 (UTC+8).

maintenanceDuration

Menentukan durasi setiap jendela pemeliharaan.

  • Parameter ini hanya berlaku jika maintenanceTime dikonfigurasi.

  • Nilainya harus berupa string. Format seperti "3", "3h", dan "3H" didukung.

  • Nilai default adalah "3", yang berarti 3 jam.

"4h"

maintenanceWeeklyPeriod

Menentukan hari dalam seminggu untuk pemeliharaan.

  • Parameter ini hanya berlaku jika maintenanceTime dikonfigurasi.

  • Nilai yang valid adalah Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, dan Sunday. Pisahkan beberapa nilai dengan koma.

  • Jika parameter ini dikonfigurasi, nilai ini menggantikan nilai maintenanceRecurrence.

Saturday,Sunday

maintenanceRecurrence

Menentukan jadwal pemeliharaan kustom menggunakan sintaks aturan pengulangan RFC5545.

  • Parameter ini hanya berlaku jika maintenanceTime dikonfigurasi.

  • Saat ini, hanya FREQ=WEEKLY yang didukung. Parameter COUNT dan UNTIL tidak didukung.

  • Jika maintenanceWeeklyPeriod juga dikonfigurasi, parameter ini diabaikan.

FREQ=WEEKLY;BYDAY=SA,SU

Waktu resolusi kegagalan bergantung pada batas waktu penanganan kegagalan dan jendela pemeliharaan yang dikonfigurasi. Jika tersedia jendela pemeliharaan sebelum batas waktu, acs-instance-helper memprioritaskan perbaikan selama jendela tersebut. Jika proses tidak selesai dalam satu jendela, operasi yang tersisa akan dilanjutkan di jendela berikutnya.

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

  1. Di panel navigasi sebelah kiri kluster target Anda, pilih Workloads > Deployments.

  2. 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
  3. Di kotak dialog yang muncul, temukan aplikasi tanpa status target dan klik View . Pastikan status Pod adalah Running

kubectl

  1. 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
  2. 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.

  1. Simulasikan kegagalan: Ganti POD_NAME dengan nama aktual Pod Anda untuk menyuntikkan Condition kegagalan 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")'"
          }
        ]
      }
    }'
  2. 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-example

    Output 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
  3. Periksa event skalabilitas vertikal: Periksa event untuk Pod yang bermasalah. Anda akan melihat event NewInstanceCreationTriggered, yang mengonfirmasi bahwa skalabilitas vertikal dipicu oleh hardware-fault-helper.

    kubectl describe po POD_NAME

    Output 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
  4. 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_NAME

    Output yang diharapkan:

    ...
      Warning  InstanceEvictedGracefully     2s     hardware-fault-helper  pod is deleted due to hardware fault
      Normal   Killing                       1s     kubelet                Stopping container main-container
  5. Konfirmasi pemulihan: Terakhir, Pod yang bermasalah sepenuhnya digantikan, sehingga hanya tersisa Pod yang baru dibuat.

    kubectl get pods -l app=hardware-fault-helper-example

    Output 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