All Products
Search
Document Center

Elastic Container Instance:Hentikan secara paksa kontainer sidecar dan abaikan kode keluarnya

Last Updated:Apr 01, 2026

Saat sebuah Pekerjaan Kubernetes menggunakan kontainer sidecar (seperti Filebeat untuk pengumpulan log), kontainer sidecar terus berjalan setelah kontainer aplikasi keluar, sehingga mencegah Pekerjaan mencapai status terminal. Elastic Container Instance (ECI) memungkinkan Anda mendeklarasikan suatu kontainer sebagai tipe sidecar dan mengabaikan kode keluarnya, sehingga Pekerjaan dapat selesai sesuai harapan.

Cara kerja

Di kluster ACK Serverless (Container Service for Kubernetes), ECI berjalan pada node virtual yang tidak mendukung fitur DaemonSet Kubernetes. Solusi umum adalah menambahkan kontainer sidecar ke dalam Pod untuk meniru perilaku DaemonSet—misalnya, menambahkan Filebeat guna mengumpulkan log bersamaan dengan pekerjaan batch.

Masalah muncul ketika restartPolicy diatur ke OnFailure atau Never: setelah kontainer aplikasi keluar dan tidak melakukan restart, kontainer sidecar tetap berjalan. Akibatnya, Pekerjaan tidak dapat mencapai status terminal Succeeded atau Failed.

ECI mengatasi hal ini melalui dua variabel lingkungan yang diatur pada kontainer sidecar:

  • `ECI_CONTAINER_TYPE`: Mendeklarasikan kontainer sebagai sidecar. Ketika kontainer aplikasi keluar dan tidak melakukan restart, ECI akan menghentikan secara paksa semua kontainer yang diberi label sidecar.

  • `ECI_CONTAINER_IGNORE_EXIT_CODE`: Mengabaikan kode keluar non-nol yang dihasilkan dari penghentian paksa kontainer sidecar. ECI mengatur status kontainer sidecar menjadi Succeeded dan mencatat kode keluar aktual, penyebab kegagalan, serta detail kegagalan di bidang Message Pod.

Tanpa ECI_CONTAINER_IGNORE_EXIT_CODE, kontainer sidecar yang dihentikan secara paksa akan keluar dengan kode non-nol, sehingga mengatur status akhir Pekerjaan menjadi Failed meskipun kontainer aplikasi telah berhasil menyelesaikan tugasnya.

Variabel lingkungan

Variabel lingkunganNilaiDeskripsi
ECI_CONTAINER_TYPEsidecarMendeklarasikan kontainer sebagai sidecar. Saat kontainer aplikasi keluar dan tidak melakukan restart, ECI akan menghentikan secara paksa semua kontainer dengan label ini. Jika dibiarkan kosong atau diatur ke normal, kontainer tersebut diperlakukan sebagai kontainer biasa.
ECI_CONTAINER_IGNORE_EXIT_CODEtrueMengabaikan kode keluar non-nol saat kontainer dihentikan secara paksa. ECI mengatur status kontainer menjadi Succeeded dan menuliskan kode keluar aktual beserta informasi kegagalannya ke bidang Message.

Konfigurasikan penghentian sidecar untuk pekerjaan

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster ACK Serverless dengan ECI yang diaktifkan

  • kubectl yang telah dikonfigurasi untuk terhubung ke kluster

  • Izin untuk membuat Pekerjaan di namespace target

Terapkan konfigurasi

  1. Buat file YAML bernama test-sidecar.yaml dengan konten berikut:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test
    spec:
      template:
        metadata:
          labels:
            app: test
            alibabacloud.com/eci: "true"   # Arahkan Pod ini ke node virtual ECI
        spec:
          containers:
          - name: c1                        # Kontainer aplikasi
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]
          - name: c2                        # Kontainer sidecar
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["/bin/sh","-c","sleep 999"]
            env:
            - name: ECI_CONTAINER_TYPE
              value: "sidecar"              # Deklarasikan c2 sebagai kontainer sidecar
            - name: ECI_CONTAINER_IGNORE_EXIT_CODE
              value: "true"                 # Abaikan kode keluar non-nol saat ECI menghentikan c2
          restartPolicy: Never
          backoffLimit: 2
  2. Terapkan konfigurasi:

    kubectl apply -f test-sidecar.yaml

Verifikasi hasil

  1. Periksa status akhir Pekerjaan:

    kubectl describe job <job-name>

    Output-nya mirip seperti berikut. Cari Succeeded: 1, yang menunjukkan bahwa Pekerjaan berhasil diselesaikan.

    job-1.png

  2. Periksa informasi kode keluar yang dicatat untuk kontainer sidecar:

    kubectl describe pod <pod-name>

    Dalam output tersebut, temukan entri kontainer c2. Bidang Message berisi kode keluar aktual, penyebab kegagalan, dan detail kegagalan yang dicatat ECI saat menghentikan kontainer sidecar.

    job-2.png