koukiblog

たぶんweb系の話題

istio-proxyが有効なJobを正常終了させる

以前の記事で、現在は有効な手段がないという記事を書きましたが、数ヶ月たって状況が変わっていたのでアップデート

Sidecarを利用しているとk8sのjobが終了しない - koukiblog

workaround

Podの起動コマンドの最後にistio-proxyを停止させるコマンドを追加するという手段が有効です。

具体的には、

  • Pod specに "shareProcessNamespace: true"を追加
  • コンテナのコマンドに"pkill -f /usr/local/bin/pilot-agent"を追加

の2つです。

manifestsは下記のようになります。

          containers:
          - name: job_container
            image: job_image
            command: ["/bin/sh","-c"]
            args: ["/container_start && pkill -f /usr/local/bin/pilot-agent"]
          shareProcessNamespace: true

Istio 1.0.x では、pkillしてもistio-proxyが正常終了せず、Jobが完了しなかったのですが、1.1.xから正常終了するように変わっていました。

このIssue内に記載があります。

Better support for sidecar containers in batch jobs · Issue #6324 · istio/istio · GitHub

kubernetes本体の対応

kubernetes本体で、この問題を根本的に解決する対応が進んでいます。まだ開発中ですが、そう遠くない将来使えるようになりそうです。

Sidecar Containers · Issue #753 · kubernetes/enhancements · GitHub

manifests内でcontainerがsidecarかどうかを宣言することができて、sidecarの場合は他のPodが終了するときに一緒に終了してくれるようです。

今後

当面はSidecar毎に都度回避策を考えていくしかない状態ですが、Sidecar Containersが実装されれば状況はかなりよくなりそうです。