かべぎわブログ

ブログです

istio-proxyがinjectされちゃうせいでjobが終わらない

概要

タイトルのとおり。
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はあがっているみたいなので改善されるとよいですね。