Saat menggunakan kontainer Sidecar untuk mengimplementasikan fungsionalitas mirip DaemonSet guna menyediakan layanan atau fitur tambahan (seperti logging, pemantauan, keamanan, atau pengalihan lalu lintas), Anda perlu mengontrol urutan startup dan shutdown kontainer Sidecar relatif terhadap kontainer aplikasi utama. Topik ini menjelaskan cara mengonfigurasi urutan startup dan shutdown kontainer Sidecar.
Deskripsi fitur
Dalam skenario ACS, karena keterbatasan node virtual, fungsionalitas Kubernetes DaemonSet tidak didukung. Dalam kasus-kasus ini, skenario yang memerlukan DaemonSet dapat mencapai efek serupa dengan menambahkan kontainer Sidecar ke Pod. Namun, siklus hidup kontainer Sidecar tidak bisa independen dari siklus hidup Pod. Untuk mencapai efek serupa dengan DaemonSet, Anda perlu mengonfigurasi urutan startup dan shutdown kontainer Sidecar. Ini memastikan bahwa kontainer Sidecar mulai sebelum kontainer aplikasi utama ketika sebuah Pod dibuat, dan bahwa kontainer Sidecar dipaksa dihentikan ketika kontainer aplikasi dalam Pod tipe job sudah keluar.
Untuk skenario-skenario ini, ACS mendukung konfigurasi urutan startup dan shutdown kontainer Sidecar dalam dua cara:
Deklarasi Sidecar Kubernetes Natif
Pada Kubernetes versi 1.29 dan yang lebih baru, deklarasi Sidecar asli didukung secara default. Ini melibatkan konfigurasi Sidecar sebagai kontainer Init dan menyetel
restartPolicymenjadi Always.CatatanMetode Sidecar asli mengimplementasikan kontainer Sidecar sebagai kontainer Init khusus. Ketika sebuah Pod dimulai, kontainer aplikasi harus menunggu kontainer Sidecar menyelesaikan startup sebelum mereka dapat berjalan normal. Pada saat yang sama, konfigurasi
restartPolicy: Alwaysmemungkinkan kontainer Sidecar untuk mulai, berhenti, dan memulai ulang tanpa memengaruhi kontainer aplikasi utama dan kontainer Init lainnya.ACS Customs Declaration
Untuk Kubernetes versi 1.28 dan yang lebih lama, ACS mendukung penyetelan variabel lingkungan khusus
__IS_SIDECAR__untuk kontainer biasa untuk menandai apakah kontainer tersebut adalah Sidecar.PentingMetode deklarasi kustom ACS mendukung deklarasi kontainer biasa sebagai Sidecar, yang mulai sebelum kontainer biasa lainnya dan otomatis mencoba ulang sesuai prinsip
restartPolicydisetel keAlways. Pada saat yang sama, kluster ACS telah membuat penyesuaian kompatibilitas untuk versi Kubernetes yang lebih rendah (1.28 dan yang lebih lama) untuk memastikan status kontainer dapat diperbarui.Namun, pada versi yang lebih tinggi atau jenis kluster Kubernetes lainnya, karena keterbatasan Kubernetes pada pembaruan status kontainer,
containerStatusdan status pod dari kontainer Sidecar yang dideklarasikan secara kustom oleh ACS tidak akan diperbarui ke Running setelah percobaan ulang gagal. Silakan merujuk pada status pod aktual. Disarankan agar Anda meningkatkan kluster Anda ke versi 1.29 atau yang lebih baru dan menggunakan metode deklarasi Sidecar Kubernetes asli.
Instruksi konfigurasi
Metode Konfigurasi | Pod Field/Environment Variable Name | Deskripsi konfigurasi |
Deklarasi Sidecar Kubernetes asli | Bidang |
|
Deklarasi kustom ACS | Variabel lingkungan kontainer biasa: |
|
Contoh konfigurasi
Contoh isi test-sidecar.yaml adalah sebagai berikut, yang menunjukkan pembuatan Job yang berisi dua kontainer: app adalah kontainer aplikasi dan sidecar adalah kontainer Sidecar.
Deklarasi kustom ACS
apiVersion: batch/v1 kind: Job metadata: name: test spec: template: metadata: labels: app: test spec: containers: - name: app image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 command: ['sh', '-c', 'for i in $(seq 1 10);do echo "logging" >> /var/logs.txt; sleep 1; done'] - name: sidecar image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 command: ['sh', '-c', 'touch /var/logs.txt && tail -F /var/logs.txt'] env: - name: __IS_SIDECAR__ # Set variabel lingkungan untuk kontainer ini value: "true" # Tandai kontainer ini sebagai sidecar restartPolicy: Never backoffLimit: 2Deklarasi Sidecar Kubernetes asli
apiVersion: batch/v1 kind: Job metadata: name: test spec: template: metadata: labels: app: test spec: initContainers: - name: sidecar image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 command: ['sh', '-c', 'touch /var/logs.txt && tail -F /var/logs.txt'] restartPolicy: Always # Deklarasikan kontainer ini sebagai sidecar containers: - name: app image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 command: ['sh', '-c', 'for i in $(seq 1 10);do echo "logging" >> /var/logs.txt; sleep 1; done'] restartPolicy: Never backoffLimit: 2Jalankan perintah berikut untuk membuat Job.
kubectl apply -f test-sidecar.yamlLihat detail Job dan detail Pod yang sesuai untuk mengamati efek dari variabel lingkungan.
Konfirmasikan bahwa Job telah selesai dijalankan dan statusnya adalah
Succeeded.kubectl describe job <job-name>Contoh sebagai berikut:

Lihat detail kontainer Sidecar untuk mengamati urutan startup kontainer dan kode keluar aktual
kubectl describe pod <pod-name>Contoh urutan startup kontainer adalah sebagai berikut. Anda dapat melihat bahwa kontainer sidecar mulai sebelum kontainer app, memastikan bahwa fungsionalitas sidecar (seperti pengalihan lalu lintas) yang bergantung pada kontainer aplikasi utama siap sebelumnya. Selain itu, Anda dapat melihat bahwa setelah kontainer app selesai berjalan (setelah 10 detik), kontainer sidecar akan dipaksa dihentikan, memastikan bahwa pod job dapat selesai:

Contoh kode keluar adalah sebagai berikut. Anda dapat melihat bahwa kontainer sidecar dipaksa keluar dengan kode keluar 0, memastikan bahwa itu tidak mengganggu penentuan apakah pod job berhasil atau gagal.
