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が実装されれば状況はかなりよくなりそうです。