忽略Sidecar容器的NotReady狀態(tài)
阿里云容器計算服務(wù)ACS支持采用Sidecar容器的形式實現(xiàn)類似DaemonSet的效果。如果Sidecar容器的狀態(tài)為NotReady,會導(dǎo)致Pod狀態(tài)為NotReady。 如果您不希望Sidecar容器的狀態(tài)影響整個Pod狀態(tài),可以通過環(huán)境變量的方式,設(shè)置忽略Sidecar容器的NotReady狀態(tài),保證Pod狀態(tài)不受Sidecar容器狀態(tài)的影響。
功能說明
在ACS場景下,由于虛擬節(jié)點的限制,不支持Kubernetes的DaemonSet功能。此時部分需要使用DaemonSet的場景可以采用為ACS Pod添加Sidecar容器的形式來實現(xiàn)類似效果。但添加Sidecar容器后,如果Sidecar容器的狀態(tài)為NotReady,會導(dǎo)致Pod狀態(tài)為NotReady。
在某些場景下,您可能會不希望Sidecar容器狀態(tài)影響整個Pod狀態(tài),例如:使用Sidecar容器用于收集日志,但日志容器出現(xiàn)問題,不應(yīng)該影響業(yè)務(wù)容器對外提供服務(wù)。
針對上述場景,ACS支持了忽略容器NotReady狀態(tài)的功能。如果您不希望某一容器的狀態(tài)影響整個Pod狀態(tài),可以為其添加忽略容器狀態(tài)的環(huán)境變量。添加后,當該容器出現(xiàn)NotReady狀態(tài)時,也不會影響Pod進入Ready狀態(tài)。
配置說明
忽略容器狀態(tài)的環(huán)境變量名為__IGNORE_READY__
,取值為true
時則表示忽略該容器狀態(tài)。
配置示例
編寫應(yīng)用的YAML配置文件,然后使用該YAML文件創(chuàng)建Deployment。
kubectl apply -f test-ignore.yaml
test-ignore.yaml的內(nèi)容示例如下,表示創(chuàng)建一個包含1個Pod副本的Deployment。Pod內(nèi)包含兩個容器,app容器可以正常運行,sidecar容器在命令里以非0碼退出, 因此永遠也無法進入Ready狀態(tài)。
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: app image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 command: ["/bin/sh", "-c", "sleep 999"] - name: sidecar image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 command: ["/bin/sh", "-c", "exit 1"] env: - name: __IGNORE_READY__ value: "true"
查看Pod的詳細信息,確認容器狀態(tài)。
kubectk get pod <pod-name> -o yaml
預(yù)期輸出:
... status: conditions: - lastTransitionTime: '2024-08-02T09:36:14Z' status: 'True' type: Initialized - lastTransitionTime: '2024-08-02T09:36:16Z' status: 'True' type: Ready - lastTransitionTime: '2024-08-02T09:36:16Z' status: 'True' type: ContainersReady - lastTransitionTime: '2024-08-02T09:36:15Z' status: 'True' type: PodScheduled - lastTransitionTime: '2024-08-02T09:36:14Z' status: 'True' type: ContainerHasSufficientDisk ...
在返回信息的status conditions中確認Ready和ContainersReady字段,可以看到兩者的status均為True,表示已經(jīng)忽略了sidecar容器的NotReady狀態(tài)。