All Products
Search
Document Center

Container Compute Service:Konfigurasi startup dan shutdown sidecar

Last Updated:Jun 22, 2026

Jika Anda ingin menggunakan kontainer sidecar untuk mencapai efek seperti DaemonSet serta menyediakan layanan atau fungsi tambahan—seperti logging, pemantauan, keamanan, dan routing traffic—Anda harus mengonfigurasi prioritas startup dan exit kontainer sidecar relatif terhadap kontainer aplikasi utama. Topik ini menjelaskan cara mengonfigurasi prioritas tersebut.

Deskripsi fitur

Kluster Alibaba Cloud Container Compute Service (ACS) tidak mendukung DaemonSet karena keterbatasan node virtual. Untuk mencapai efek seperti DaemonSet, Anda dapat menambahkan kontainer sidecar ke dalam Pod di kluster ACS. Siklus hidup kontainer sidecar yang ditambahkan ke dalam Pod tidak independen dari siklus hidup Pod tersebut. Oleh karena itu, Anda perlu mengonfigurasi prioritas startup dan exit kontainer sidecar. Misalnya, kontainer sidecar mungkin harus mulai berjalan sebelum kontainer aplikasi utama saat pembuatan Pod. Jika Anda menggunakan Pod bertipe Job, Anda mungkin perlu menghentikan tugas kontainer sidecar secara paksa setelah kontainer aplikasi utama dihentikan.

Untuk memenuhi persyaratan tersebut, ACS menyediakan metode berikut guna mengonfigurasi prioritas startup dan exit kontainer sidecar.

  • Konfigurasi kontainer sidecar native Kubernetes

    Pada Kubernetes versi 1.29 dan yang lebih baru, dukungan untuk konfigurasi sidecar native diaktifkan secara default. Anda dapat mengonfigurasi sidecar dengan mendefinisikannya sebagai init container dan mengatur restartPolicy-nya menjadi Always.

    Catatan

    Pendekatan native ini mengimplementasikan kontainer sidecar sebagai init container khusus. Saat startup Pod, kontainer aplikasi akan menunggu hingga kontainer sidecar telah dimulai. Pengaturan restartPolicy: Always memungkinkan kontainer sidecar untuk dimulai, dihentikan, dan dimulai ulang tanpa memengaruhi kontainer aplikasi utama atau init container lainnya.

  • Konfigurasi kontainer sidecar yang dioptimalkan ACS

    Untuk versi Kubernetes 1.28 dan yang lebih lama, ACS memungkinkan Anda menetapkan variabel lingkungan khusus, __IS_SIDECAR__, untuk menandai kontainer biasa sebagai kontainer sidecar.

    Penting

    Konfigurasi yang dioptimalkan ACS memungkinkan Anda mendeklarasikan kontainer biasa sebagai sidecar. Kontainer tersebut dimulai sebelum kontainer biasa lainnya dan secara otomatis dicoba ulang jika gagal, seolah-olah restartPolicy-nya bernilai Always. Selain itu, kluster ACS pada versi Kubernetes lama (1.28 dan di bawahnya) mencakup fitur kompatibilitas untuk memastikan status kontainer diperbarui dengan benar.

    Namun, pada versi Kubernetes yang lebih baru atau jenis kluster lainnya, metode ini dibatasi oleh pembatasan Kubernetes terkait pembaruan status kontainer. Setelah sidecar yang dikonfigurasi dengan metode ACS-optimized gagal dan dimulai ulang, containerStatus-nya dan status Pod tidak akan diperbarui menjadi Running. Untuk status yang akurat, andalkan kondisi aktual Pod. Kami menyarankan Anda melakukan upgrade kluster ke versi 1.29 atau yang lebih baru dan menggunakan konfigurasi kontainer sidecar native Kubernetes.

Metode konfigurasi kontainer sidecar

Metode konfigurasi

Parameter/variabel lingkungan

Deskripsi

Konfigurasi kontainer sidecar native Kubernetes

Bidang restartPolicy pada init container

  • Never: Kontainer merupakan init container. Ini adalah nilai default.

  • Always: Kontainer merupakan kontainer sidecar.

Konfigurasi kontainer sidecar yang dioptimalkan ACS

Variabel lingkungan untuk kontainer biasa: __IS_SIDECAR__

  • true: Kontainer merupakan kontainer sidecar.

  • false: Kontainer merupakan kontainer biasa. Ini adalah nilai default.

Contoh

  1. Buat file bernama test-sidecar.yaml dan salin konten berikut ke dalam file tersebut. File ini digunakan untuk membuat Job yang menyediakan dua kontainer bernama app dan sidecar. Kontainer app adalah kontainer aplikasi, sedangkan kontainer sidecar adalah kontainer sidecar.

    Konfigurasi kontainer sidecar yang dioptimalkan 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__   # Tambahkan variabel lingkungan ke kontainer.
              value: "true"          # Tentukan kontainer sebagai kontainer sidecar.
          restartPolicy: Never
      backoffLimit: 2

    Konfigurasi kontainer sidecar native Kubernetes

    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  # Tentukan kontainer sebagai kontainer 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: 2
  2. Jalankan perintah berikut untuk membuat Job:

    kubectl apply -f test-sidecar.yaml
  3. Lihat detail Job dan Pod serta amati efek variabel lingkungan tersebut.

    • Pastikan Job telah selesai dan statusnya Succeeded.

      kubectl describe job <job-name>

      Contoh:

      Parallelism:    1
      Completions:    1
      Completion Mode:  NonIndexed
      Start Time:     Tue, 29 Oct 2024 11:24:18 +0800
      Completed At:   Tue, 29 Oct 2024 11:25:17 +0800
      Duration:       59s
      Pods Statuses:  0 Active (0 Ready) / 1 Succeeded / 0 Failed
      Pod Template:
  4. Lihat detail kontainer sidecar dan periksa urutan startup serta kode exit aktual kontainer.

    kubectl describe pod <pod-name>
    • Gambar berikut menunjukkan bahwa kontainer sidecar dimulai sebelum kontainer app. Hal ini memastikan fungsi dependensi yang dibutuhkan kontainer utama—seperti routing traffic—sudah siap terlebih dahulu. Gambar berikut juga menunjukkan bahwa kontainer sidecar dihentikan 10 detik setelah kontainer app berhenti berjalan. Hal ini memastikan Pod yang disediakan oleh Job dapat dihentikan secara normal.

      Events:
        Type    Reason     Age    From                Message
        ----    ------     ----   ----                -------
        Normal  Scheduled  5m11s  default-scheduler   Successfully assigned default/test-729nd to virtual-kubelet-cn-shenzhen-f
        Normal  Pulling    5m13s  kubelet             Pulling image "registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28"
        Normal  Pulled     5m12s  kubelet             Successfully pulled image "registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28" in 384ms
        Normal  Created    5m12s  kubelet             Created container sidecar
        Normal  Started    5m12s  kubelet             Started container sidecar
        Normal  Pulling    5m12s  kubelet             Pulling image "registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28"
        Normal  Pulled     5m12s  kubelet             Successfully pulled image "registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28" in 342ms
        Normal  Created    5m12s  kubelet             Created container app
        Normal  Started    5m12s  kubelet             Started container app
        Normal  Killing    5m1s   kubelet             Stopping container sidecar
    • Gambar berikut menunjukkan bahwa kontainer sidecar dihentikan secara paksa dan kode exit-nya adalah 0. Hal ini memastikan Pod dapat dihentikan dengan status sukses atau gagal secara normal, tanpa terpengaruh oleh kontainer sidecar.

      sidecar:
          Container ID:  containerd://bd85de5ad7ee1cb5a4807b094f2d41fa90881916857172 0e73ef0dfbd26f1dfb
          Image:         registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
          Image ID:      registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox@sha256:141c253bc4c3fd0a20
          Port:          <none>
          Host Port:     <none>
          Command:
            sh
            -c
            touch /var/logs.txt && tail -F /var/logs.txt
          State:          Terminated
            Reason:       Completed
            Message:      Force this container to be success(137, Error, )
            Exit Code:    0
            Started:      Tue, 29 Oct 2024 11:24:32 +0800
            Finished:     Tue, 29 Oct 2024 11:25:13 +0800
          Ready:          False
          Restart Count:  0