當您采用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
表示忽略該容器狀態。
配置示例
編寫應用的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"
查看Pod的詳細信息,確認容器狀態。
kubectk get pod <pod-name> -o yaml
在返回信息的status conditions中確認Ready和ContainersReady字段,可以看到兩者的status均為True,表示已經忽略了c2容器的NotReady狀態。