Topik ini menjelaskan cara menggunakan variabel lingkungan untuk mengonfigurasi prioritas startup dan exit kontainer dalam sebuah Pod ECI agar dimulai dan dihentikan sesuai urutan yang ditentukan.
Cara kerja
Secara default, kontainer dalam sebuah Pod ECI dimulai dan dihentikan secara paralel tanpa urutan tertentu. Namun, beberapa skenario melibatkan ketergantungan antarkontainer sehingga satu kontainer hanya boleh dimulai setelah kontainer lainnya berjalan atau hanya boleh dihentikan setelah kontainer lainnya berhenti. Contohnya:
-
Dalam skenario tata kelola layanan Istio, kontainer istio-proxy harus dalam status Ready sebelum kontainer aplikasi menghasilkan traffic dan harus dihentikan hanya setelah kontainer aplikasi berhenti.
-
Untuk pengumpulan log, kontainer agen log harus dalam status Ready sebelum kontainer aplikasi menghasilkan log dan harus dihentikan hanya setelah kontainer aplikasi berhenti.
Untuk mengatasi skenario tersebut, ECI memungkinkan Anda menetapkan prioritas startup dan exit untuk kontainer dengan menggunakan variabel lingkungan sehingga kontainer tersebut dimulai dan dihentikan sesuai urutan yang ditentukan.
Konfigurasi
Variabel lingkungan berikut mengatur urutan startup dan exit kontainer:
|
Parameter |
Variabel lingkungan |
Deskripsi |
|
Prioritas startup kontainer |
ECI_CONTAINER_LAUNCH_PRIORITY |
|
|
Prioritas exit kontainer |
ECI_CONTAINER_EXIT_PRIORITY |
|
Mengonfigurasi urutan exit kontainer dapat menyebabkan total waktu terminasi Pod melebihi nilai TerminationGracePeriodSeconds dalam spesifikasi Pod-nya.
Contoh
Konfigurasikan urutan startup kontainer
-
Gunakan perintah berikut untuk membuat Penyebaran dari file konfigurasi YAML.
kubectl apply -f test-launch.yamlKonten
test-launch.yamlberikut mendefinisikan sebuah Penyebaran dengan satu replika. Pod tersebut berisi dua kontainer, c1 dan c2, di mana c1 memiliki prioritas startup lebih tinggi daripada c2. Pemeriksaan kesiapan dikonfigurasi untuk c1 agar memastikan c2 hanya dimulai setelah c1 siap.apiVersion: apps/v1 kind: Deployment metadata: name: test-launch labels: app: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine name: c1 env: - name: ECI_CONTAINER_LAUNCH_PRIORITY value: "1000" readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 30 periodSeconds: 3 - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine name: c2 env: - name: ECI_CONTAINER_LAUNCH_PRIORITY value: "0" args: - /bin/sh - -c - sleep 3600s -
Periksa waktu startup kontainer dalam status Pod.
kubectl describe pod <pod name>Bagian
Containerspada output menunjukkan bahwa kontainer c2 dimulai setelah kontainer c1. Berikut contohnya:Containers: c1: Container ID: containerd://779ec5b6d9ad1164c929ab0b8bbc4a3a3b24fe1f9654867e842f2dcfe7b24beb Image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine Image ID: registry.cn-shanghai.aliyuncs.com/eci_open/nginx@sha256:2ec3c026183996087f26c6b3 Port: <none> Host Port: <none> State: Running Started: Wed, 16 Aug 2023 07:11:48 +0000 Ready: True Restart Count: 0 Readiness: http-get http://:80/ delay=30s timeout=1s period=3s #success=1 #failure=3 Environment: ECI_CONTAINER_LAUNCH_PRIORITY: 1000 Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-2qkqp (ro) c2: Container ID: containerd://fe6261cc2e659ee9afb07c2efd516250aeb854544504d66ac011b557e94a0cb6 Image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine Image ID: registry.cn-shanghai.aliyuncs.com/eci_open/nginx@sha256:2ec3c026183996087f26c6b38 Port: <none> Host Port: <none> Args: /bin/sh -c sleep 3600s State: Running Started: Wed, 16 Aug 2023 07:12:20 +0000 Ready: True Restart Count: 0 Environment: ECI_CONTAINER_LAUNCH_PRIORITY: 0
Konfigurasi urutan keluar kontainer
-
Gunakan perintah berikut untuk membuat Penyebaran dari file konfigurasi YAML.
kubectl apply -f test-exit.yamlKonten
test-exit.yamlberikut mendefinisikan sebuah Penyebaran dengan satu replika. Pod tersebut berisi tiga kontainer, dengan prioritas exit diatur secara menurun: c1, c2, dan c3.apiVersion: apps/v1 kind: Deployment metadata: name: test-exit labels: app: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine name: c1 env: - name: ECI_CONTAINER_EXIT_PRIORITY value: "1000" - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine name: c2 env: - name: ECI_CONTAINER_EXIT_PRIORITY value: "0" args: - /bin/sh - -c - sleep 3600s - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine name: c3 env: - name: ECI_CONTAINER_EXIT_PRIORITY value: "-1000" args: - /bin/sh - -c - sleep 3600s -
Hapus Pod tersebut, lalu amati urutan event
Killinguntuk kontainer-kontainer tersebut.CatatanEvent-event ini bersifat sementara dan mungkin tidak tersedia setelah Pod dihapus.
kubectl describe pod <pod name>Bagian
Eventspada output menunjukkan kontainer berhenti sesuai urutan prioritas exit-nya: c1, c2, lalu c3. Berikut contohnya:Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning MissingClusterDNS 2m10s virtual-kubelet pod: default/test-exit-pr and cannot create Pod using "ClusterFirst" policy. Falling back to "Default" policy. Normal DefaultInstanceTypeMatch 2m10s EciService [eci.containergroup]The de Warning ImageCacheMissed 2m9s EciService [eci.imagecache]Missed ima Normal ImageCacheAutoCreated 2m9s EciService [eci.imagecache]Image cach Normal Pulling 115s kubelet Pulling image "registry.cn Normal Pulled 113s kubelet Successfully pulled image ing) Normal Created 113s kubelet Created container c1 Normal Started 113s kubelet Started container c1 Normal Pulled 113s kubelet Container image "registry. Normal Created 113s kubelet Created container c2 Normal Started 113s kubelet Started container c2 Normal Pulled 113s kubelet Container image "registry. Normal Created 112s kubelet Created container c3 Normal Started 112s kubelet Started container c3 Normal Killing 37s kubelet Stopping container c1 Normal Killing 37s kubelet Stopping container c2 Normal Killing 7s kubelet Stopping container c3