背景
在Kubernetes上执行定时任务,用于每天的某些数据备份任务。由于namespace中设置了istio-injection: enabled,在cronjob执行的Pod就会创建两个容器,一个是备份任务,另一个就是istio的sidecar容器。
问题记录
问题1: 任务调度时,job创建的pod尝试通过svc名称连接其它服务时,日志提示 "Can't connect to server on 'xxx' "
通过进入Pod ping对应的内部服务名称,但是发现又是正常了。
猜测是istio在搞鬼,在一通搜索之后,发现istio的启动会耗费一些时间,而我的任务在istio未就绪就开始执行,因此导致了上面的问题。
在执行任务之前先sleep 10秒左右,发现任务正常执行了,但又发现了新的问题。
问题2: 任务执行已经结束,但是Pod的状态始终是NotReady,当时没有理会,因为我想要的东西已经拿到了。但是过了几天一看我的定时任务后续没有执行了,同时那个容器的状态已经NotReady2天了。
又是你 istio!!! Cronjob创建的Pod就不应该注入istio的sidecar。
在deployment中禁用sidecar:
spec:
template:
metadata:
annotations:
sidecar.istio.io/inject: "false"
那么在conjob中则是:
spec:
jobTemplate:
spec:
template:
metadata:
annotations:
sidecar.istio.io/inject: "false"
那么问题来了,如果我通过helm
安装了某个组件,由于该namespace自动注入label。那么除了将该组件安装到别的namespace,还有别的方式处理吗?