All Products
Search
Document Center

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

Last Updated:Jun 21, 2026

Jika Anda menggunakan kontainer sidecar untuk meniru perilaku DaemonSet, Pod bertipe pekerjaan (job) mungkin gagal menyelesaikan eksekusinya. Dalam kasus ini, Anda dapat mengonfigurasi variabel lingkungan untuk menentukan tipe kontainer sidecar dan mengabaikan kode keluarnya, sehingga pekerjaan dapat diselesaikan sesuai harapan.

Deskripsi fitur

Jika Anda menggunakan Elastic Container Instance di kluster Container Service for Kubernetes (ACK) Serverless, Elastic Container Instance tidak mendukung fitur DaemonSet Kubernetes karena keterbatasan node virtual. Pada skenario tertentu yang biasanya memerlukan DaemonSet, Anda dapat menambahkan kontainer sidecar ke Pod berbasis Elastic Container Instance untuk mencapai efek serupa. Namun, jika parameter RestartPolicy diatur ke OnFailure atau Never, siklus hidup Pod akan terpengaruh. Misalnya, setelah menambahkan kontainer sidecar filebeat ke suatu pekerjaan, kontainer sidecar tersebut tetap berjalan meskipun kontainer aplikasi telah berhenti, sehingga pekerjaan tidak mencapai status yang diinginkan dan gagal diselesaikan.

Untuk mengatasi hal tersebut, Elastic Container Instance menyediakan dua fitur berikut:

  • Tentukan tipe kontainer

    Anda dapat menggunakan variabel lingkungan untuk memberi label tipe pada kontainer sidecar. Dengan demikian, ketika kontainer aplikasi berhenti dan tidak melakukan restart, Elastic Container Instance akan menghentikan secara paksa kontainer sidecar yang sedang berjalan guna memastikan pekerjaan dapat diselesaikan.

  • Abaikan kode keluar kontainer

    Ketika Elastic Container Instance menghentikan secara paksa kontainer sidecar, kode keluarnya bukan 0, yang menandakan bahwa kontainer berhenti dalam status gagal. Akibatnya, status akhir pekerjaan menjadi Failed. Untuk mengatasi masalah ini, Anda dapat menggunakan variabel lingkungan kontainer untuk mengabaikan kode keluar kontainer sidecar dan memaksa statusnya menjadi Succeeded, sehingga status akhir pekerjaan juga menjadi Succeeded.

Deskripsi konfigurasi

Item konfigurasi

Nama variabel lingkungan

Deskripsi

Tentukan tipe kontainer

ECI_CONTAINER_TYPE

Nilai yang valid:

  • normal: menentukan bahwa kontainer adalah kontainer normal. Jika variabel lingkungan ini dibiarkan kosong, nilai default-nya adalah normal.

  • sidecar: menentukan bahwa kontainer adalah kontainer sidecar.

Abaikan kode keluar kontainer

ECI_CONTAINER_IGNORE_EXIT_CODE

Menentukan apakah kode keluar kontainer diabaikan. Ketika kontainer yang memiliki variabel lingkungan ini dihentikan dan kode keluarnya bukan 0, Elastic Container Instance akan memaksa status kontainer menjadi Succeeded dan menambahkan kode keluar aktual, penyebab kegagalan, serta informasi kegagalan ke bidang Message dalam bentuk teks.

Contoh konfigurasi

  1. Buat file konfigurasi YAML untuk pekerjaan, lalu gunakan file tersebut untuk membuat pekerjaan.

    kubectl apply -f test-sidecar.yaml

    Contoh berikut menunjukkan file YAML bernama test-sidecar.yaml yang mendefinisikan pekerjaan dengan dua kontainer: c1 sebagai kontainer aplikasi dan c2 sebagai kontainer sidecar. Variabel lingkungan ditambahkan untuk menentukan tipe kontainer dan mengabaikan kode keluarnya.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test
    spec:
      template:
        metadata:
          labels:
            app: test
            alibabacloud.com/eci: "true" 
        spec:
          containers:
          - name: c1
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]
          - name: c2
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["/bin/sh","-c","sleep 999"] 
            env:
            - name: ECI_CONTAINER_TYPE
              value: "sidecar"
            - name: ECI_CONTAINER_IGNORE_EXIT_CODE
              value: "true"
          restartPolicy: Never
          backoffLimit: 2
  2. Periksa detail pekerjaan dan Pod untuk mengamati efek variabel lingkungan tersebut.

    • Jalankan perintah berikut untuk memverifikasi bahwa status akhir pekerjaan adalah Succeeded.

      kubectl describe job <job-name>

      Contoh tanggapan:

      :~$ kubectl describe job test
      Name:           test
      Namespace:      default
      Selector:       batch.kubernetes.io/controller-uid=c8a69ddd-34db-4716-
      Labels:         alibabacloud.com/eci=true
                      app=test
                      batch.kubernetes.io/controller-uid=c8a69ddd-34db-4716-
                      batch.kubernetes.io/job-name=test
                      controller-uid=c8a69ddd-34db-4716-8be4-528e556a8533
                      job-name=test
      Annotations:    <none>
      Parallelism:    1
      Completions:    1
      Completion Mode:    NonIndexed
      Start Time:     Wed, 29 Nov 2023 08:58:40 +0000
      Completed At:   Wed, 29 Nov 2023 08:59:37 +0000
      Duration:       57s
      Pods Statuses:  0 Active (0 Ready) / 1 Succeeded / 0 Failed
    • Periksa detail kontainer sidecar untuk melihat kode keluar aktual dan informasi terkaitnya.

      kubectl describe pod <pod-name>

      Contoh tanggapan:

      c2:
          Container ID:   containerd://970f2424854aa19796e7883026435de2dae4ecf
          Image:          registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
          Image ID:       registry.cn-shanghai.aliyuncs.com/eci_open/perl@sha2
          Port:           <none>
          Host Port:      <none>
          Command:
            /bin/sh
            -c
            sleep 999
          State:          Terminated
            Reason:       Completed
            Message:      Force this container to be success(137, Error, )
            Exit Code:    0