概要
タイトルのとおり。
istio-proxyがauto-injectされちゃうような構成というかサイドカー構成だと、JobやCronJobを実行したとき、いつまでたってもCompletedにならなかったりする。
$ kubectl get pods NAME READY STATUS RESTARTS AGE hello-1598853420-5stdh 1/2 Running 0 3m39s hello-1598853480-sfjds 1/2 Running 0 2m39s hello-1598853540-dpvrm 1/2 Running 0 98s
なんでそうなるのか
Jobを実行するコンテナの方は正常終了していたとしても、サイドカーコンテナ(この場合istio-proxy)はそれを検知せず、実行し続けてしまう。
Istio環境での解決策
metadataに以下の様にtemplateにmetadata.annotations.sidecar.istio.io/inject: "false"
を設定してあげる。
apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: metadata: annotations: sidecar.istio.io/inject: "false" spec: containers: - name: hello image: busybox args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: Never
そうすると当然Jobが実行されるコンテナしか動作しないためCompletedになる。
$ kubectl get pods NAME READY STATUS RESTARTS AGE hello-1598853600-dz7vj 0/1 Completed 0 24s
おわりに
これはIstioではなく、k8s自体の問題。
Issueはあがっているみたいなので改善されるとよいですね。