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:
|
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
Buat file konfigurasi YAML untuk pekerjaan, lalu gunakan file tersebut untuk membuat pekerjaan.
kubectl apply -f test-sidecar.yamlContoh 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-
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
-