日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

配置Sidecar容器啟停順序

當您采用Sidecar容器的形式實現類似DaemonSet的效果,從而提供額外的服務或功能(如日志記錄、監控、安全性或流量轉發),這些功能需要控制Sidecar容器相對于主應用容器的啟停順序。本文介紹如何配置Sidecar容器啟停順序。

功能說明

在ACS場景下,由于虛擬節點的限制,不支持Kubernetes的DaemonSet功能。此時部分需要使用DaemonSet的場景可以采用為Pod添加Sidecar容器的形式來實現類似效果。 然而,Sidecar容器的生命周期無法獨立于Pod的生命周期。為了達到類似于DaemonSet的效果,您需要進行一些配置來控制Sidecar容器的啟停順序。保證Sidecar容器在Pod創建時先于應用主容器啟動, 并保證在Job類Pod中業務容器已經退出的情況下, 強制終止Sidecar容器。

針對上述場景,ACS支持通過兩種方式配置Sidecar容器的啟停順序:

  • 社區原生Sidecar聲明

    在K8s 1.29及以上的版本, 默認支持原生的Sidecar聲明方式。 即通過把Sidecar配置為Init容器,并將restartPolicy設置成Always

    說明

    常規的Sidecar方式不同,原生Sidecar方式將Sidecar容器作為一個特殊的Init容器來實現。Pod啟動時,應用容器需要等待Sidecar容器完成啟動之后才可以正常運行。同時restartPolicy: Always的配置使得Sidecar容器可以啟動、停止和重新啟動,且不會影響主應用容器和其他Init容器。

  • ACS定制聲明

    對于K8s 1.28及以下的版本, ACS支持為普通容器設置一個特殊的環境變量__IS_SIDECAR__,來標記此容器是否為Sidecar。

配置說明

配置方法

Pod字段/環境變量名稱

配置說明

社區原生Sidecar聲明

Init容器的restartPolicy字段

  • Never: 表示容器類型為普通的Init容器。 默認值為Never。

  • Always:表示容器類型為Sidecar容器。

ACS定制聲明

普通容器的環境變量:__IS_SIDECAR__

  • true:表示容器類型為Sidecar容器。

  • false:表示容器類型為普通容器。默認值為false。

配置示例

  1. test-sidecar.yaml的內容示例如下,表示創建一個Job,Job內包含兩個容器,app為業務容器,sidecar為Sidecar容器。

    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__   # 為此容器設置環境變量
              value: "true"          # 標記此容器為sidecar
          restartPolicy: Never
      backoffLimit: 2

    社區原生Sidecar聲明

    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  # 聲明此容器為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. 執行以下命令,創建Job。

    kubectl apply -f test-sidecar.yaml
  3. 查看Job詳情和對應的Pod詳情,觀察環境變量的效果。

    • 確認Job已經運行完成,且狀態為Succeeded

      kubectl describe job <job-name>

      示例如下:

      image

  4. 查看Sidecar容器詳情,觀察容器的啟動順序和實際的退出碼

    kubectl describe pod <pod-name>
    • 容器的啟動順序示例如下,可以看到sidecar容器先于app容器啟動, 從而保證應用主容器依賴的sidecar功能(例如流量轉發)提前就緒;另外,可以看到app容器運行結束后(10s后),sidecar容器會被強制殺掉,從而保證作業Pod可以完成:

      image

    • 退出碼示例如下,可以看到sidecar容器被強制退出,且退出碼是0,保證不會干擾作業Pod運行是成功還是失敗的判斷。

      image