当您采用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状态。