当 Kubernetes Pod 关闭时,Sidecar 容器会立即关闭吗?

问题描述 投票:0回答:1

我有一个 sidecar 容器与 Kubernetes pod 中的 Java 服务容器一起运行。这个 sidecar 容器的工作是当 Java 服务容器因 OOM 崩溃而重新启动时,将 heapdump 传输到 GCP 存储桶。 Sidecar 就是这样做的:

- name: heapdump-sidecar
  image: google/cloud-sdk:latest
  command:
    - /bin/sh
    - -c
    - |
      while true; do
        heap_dump_file="/appdata/java/heapdumps/heapdump.hprof";
        gs_bucket="gs://namespace-non-prod/heap-dump-{{ .Values.environment }}-bucket/";
        if [ -f "$heap_dump_file" ]; then
          echo "Heap dump file found. Uploading to GCS...";
          gsutil cp "$heap_dump_file" "$gs_bucket{{ .Chart.Name }}-$(date +%Y-%m-%d-%H-%M-%S).hprof";
          if [ $? -eq 0 ]; then
            echo "Heap dump uploaded successfully.";
            rm -rf /appdata/java/heapdumps/*;
          else
            echo "Heap dump upload failed";
          fi;
        else
          echo "Heap dump file not found. Waiting...";
        fi;
        sleep 5;
      done

问题: 当 Pod 必须关闭时,此容器是否会延迟 Pod 的关闭?我的期望是 sidecar 容器立即关闭,并且不会强制 pod 等待终止宽限期,从而延迟关闭。

bash kubernetes google-cloud-platform heap-dump
1个回答
0
投票

您的期望是正确的,当 Pod 必须关闭时,容器可能会延迟 Pod 的关闭。当 Kubernetes Pod 关闭时,Sidecar 容器会立即关闭。

根据 Sandeep Dinesh 的官方 GCP 博客

“Kubernetes 等待指定的时间,称为终止宽限期。默认情况下,该时间为 30 秒。值得注意的是,这与 preStop 挂钩和 SIGTERM 信号同时发生。 Kubernetes 不会等待 preStop 钩子完成。如果您的 Pod 通常需要超过 30 秒才能关闭,请确保增加宽限期。您可以通过在 Pod YAML 中设置终止GracePeriodSeconds 选项来做到这一点。”

根据 Marko Lukša 撰写的 Medium 博客,“如果 sidecar 容器提供了一个等待 sidecar 准备就绪的可执行文件,您可以在容器的启动后挂钩中调用它,以阻止其余容器的启动吊舱。”

注意:根据这个开放的github问题评论,这个功能还不稳定。 Kubernetes 仍在接受用户的反馈

© www.soinside.com 2019 - 2024. All rights reserved.