全部產品
Search
文件中心

Elastic Container Instance:忽略Sidecar容器的NotReady狀態

更新時間:Jul 06, 2024

當您採用Sidecar容器的形式實作類別似DaemonSet的效果時,如果Sidecar容器的狀態為NotReady,會導致Pod狀態為NotReady。某些情境下,如果您不希望Sidecar容器的狀態影響整個Pod狀態,可以通過環境變數的方式,設定忽略Sidecar容器的NotReady狀態,保證Pod狀態不受Sidecar容器狀態的影響。

功能說明

在ACK Serverless叢集+ECI情境下,由於虛擬節點的限制,ECI不支援Kubernetes的DaemonSet功能。此時部分需要使用DaemonSet的情境可以採用為ECI Pod添加Sidecar容器的形式來實作類別似效果。但添加Sidecar容器後,如果Sidecar容器的狀態為NotReady,會導致Pod狀態為NotReady。

在某些情境下,您可能會不希望Sidecar容器狀態影響整個Pod狀態,例如:使用Sidecar容器用於收集日誌,但日誌容器出現問題,不應該影響業務容器對外提供服務。

針對上述情境,ECI支援了忽略容器NotReady狀態的功能。如果您不希望某一容器的狀態影響整個Pod狀態,可以為其添加忽略容器狀態的環境變數。添加後,當該容器出現NotReady狀態時,也不會影響Pod進入Ready狀態。

配置說明

忽略容器狀態的環境變數為ECI_CONTAINER_IGNORE_READY,取值為true表示忽略該容器狀態。

配置樣本

  1. 編寫應用的YAML設定檔,然後使用該YAML檔案建立Deployment。

    kubectl apply -f test-ignore.yaml

    test-ignore.yaml的內容樣本如下,表示建立一個包含1個Pod副本的Deployment。Pod內包含兩個容器,c1容器可以正常運行,c2容器由於缺少啟動命令無法進入Ready狀態。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-ignore
      labels:
        app: test
    spec:
      replicas: 1 
      selector:
        matchLabels:
          app: test
      template:
        metadata:
          labels:
            app: test
        spec:
          containers:
          - name: c1
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["/bin/sh", "-c", "sleep 999"] 
          - name: c2
            image: registry.cn-shanghai.aliyuncs.com/eci_open/centos:7
            env:
            - name: ECI_CONTAINER_IGNORE_READY
              value: "true"
  2. 查看Pod的詳細資料,確認容器狀態。

    kubectk get pod <pod-name> -o yaml

    在返回資訊的status conditions中確認Ready和ContainersReady欄位,可以看到兩者的status均為True,表示已經忽略了c2容器的NotReady狀態。

    忽略容器notready.png