【问题标题】:Downscaling of pods is not graceful when using Kafka-connect on kubernetes在 kubernetes 上使用 Kafka-connect 时,Pod 的缩减并不优雅
【发布时间】:2020-06-07 19:13:37
【问题描述】:

我在两台 ec2 机器上运行我的 kafka-connect。因此,无论任务数量如何,这两台机器都会始终保持运行任务。因此在二手机器下。 最近我在 kubernetes 上迁移了 kafka-connect。我实现了良好的 CPU/内存效率。

但是当 Kubernetes 缩减规模时,问题就出现了。 Pod 的缩减不会正常进行。

例如假设有 2 个 pod p1 和 p2。 p1 正在运行 3 个任务 t1,t2,t3 p2 正在运行 2 个任务 t4,t5 (这里的任务 t5 是将数据从 postgres 带到 kafka 的源连接器的任务)

当任何 pod 在缩减期间消失时,在其上运行的任务会在其他 pod 上重新平衡。 假设 pod p2 消失了。

任务重新平衡后集群的新状态是:- P1 正在运行 5 个任务 t1,t2,t3,t4_new,t5_new

但是我的源连接器的日志显示一些其他任务(可能是在旧 pod t5 上运行的任务)仍在运行并访问 postgres db 数据。

我如何确保 pod 缩小规模时,它会优雅地发生,因为在 pod 上运行的所有任务都已停止。

【问题讨论】:

    标签: kubernetes apache-kafka-connect connect-rest


    【解决方案1】:

    可能是默认的grace period 对你来说不够 在收到SIGTERM 信号后完成其任务的应用程序。

    SIGTERM 信号被发送到容器中的主进程,一旦收到信号,容器应该开始正常关闭正在运行的应用程序并退出。

    kubernetes official documentation 中描述了关于Termination of Pods 的非常好的解释/流程。

    您可以尝试在部署中扩展terminationGracePeriodSeconds 看看是否有帮助(默认为 30):

    spec:
        replicas: 
        template:
            spec:
                containers:
                  - name: test
                    image: ...
                terminationGracePeriodSeconds: 60
    

    另一种方法是使用preStop 钩子。 preStop 钩子在容器终止之前立即执行。 它的工作原理是当容器需要终止时,Kubelet 将运行 pre-stop hook,然后才将SIGTERM 发送到进程。这可用于启动容器的正常关闭。

    它还可以用于在关闭之前执行一些其他操作,而无需在应用程序本身中实现这些操作。

    这是一个简单的例子(它是一个HTTP GET请求,将被发送到`http:///shutdown):

    lifecycle:
       preStop:
          httpGet:
             port: 80
             path: shutdown
    

    这里还链接到kubernetes documentation 关于Container hooks。让我知道这是否有帮助。

    【讨论】:

    • 感谢增加终止GracePeriodSeconds 为我工作。
    • 我真的很高兴这有帮助!你会考虑接受并支持它吗? Here 是一个链接为什么这在堆栈上很重要。
    【解决方案2】:

    只需在 kafka-connect 配置中增加关闭超时“task.shutdown.graceful.timeout.ms”。还可以使用 preStop hook pods hooks 并在 hook 中使用一些 sleep 命令,以便 kubelet 等待 hook 完成并在此之后运行 SIGTERM。

    【讨论】:

    • 谢谢,这很有帮助。
    猜你喜欢
    • 2017-07-09
    • 2020-04-16
    • 2020-10-27
    • 1970-01-01
    • 2021-09-02
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多