首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tdengine映像(2.4.0.3)在与kubernetes一起拉起时不能正常关闭

tdengine映像(2.4.0.3)在与kubernetes一起拉起时不能正常关闭
EN

Stack Overflow用户
提问于 2022-02-14 09:12:16
回答 1查看 18关注 0票数 1

我使用tdEngineVersion2.4.0.3映像通过k8s部署创建了一个三节点集群。查看吊舱信息:

代码语言:javascript
复制
kubectl get pods -n mytdengine
代码语言:javascript
复制
NAME          READY       STATUS        RESTART       AGE
tdengine-01    1/1         Running       0             1m45s
tdengine-02    1/1         Running       0             1m45s
tdengine-03    1/1         Running       0             1m45s

一切都很顺利。

但是,当我尝试用delete操作停止这些豆荚时:

代码语言:javascript
复制
kubectl delete pod tdengine-03 -n mytdengine

目标吊舱不会像预期的那样被删除。情况转到:

代码语言:javascript
复制
NAME          READY       STATUS        RESTART       AGE
tdengine-01    1/1         Running       0             2m35s
tdengine-02    1/1         Running       0             2m35s
tdengine-03    1/1         Terminating   0             2m35s

经过几次测试,pod将被成功删除,直到3分钟,这是不正常的。我实际上没有使用tdengine实例,这意味着没有过多的负载或存储占用。我找不到理由解释为什么需要3分钟才能关闭。

EN

回答 1

Stack Overflow用户

发布于 2022-02-14 09:12:16

经过测试,我消除了kubernetes配置的问题。此外,我发现在Pod: 180的yaml文件中配置了参数‘terminationgraceperiodseconds’

代码语言:javascript
复制
terminationgraceperiodseconds:180

这意味着吊舱没有被优雅地关闭,而是在超时后被强行移除。

一般来说,吊舱的停止通常会发出信号。容器正确地处理信号并进行优雅的关机。但是,如果它没有停止,或者容器没有响应该信号,并且超过了上述参数‘终止优美秒’设置的超时,容器将接收信号并强制杀死容器。参考文献:https://tasdikrahman.me/2019/04/24/handling-singals-for-applications-in-kubernetes-docker/

原因是tdengine2 4.0.3映像的启动脚本首先拔出taos适配器,然后是taosd,但它没有重写信号项信号的处理方法。由于Linux 1的特殊性,只有PID 1在k8s将其发送到pod内容容器(如下图所示,PID 1是启动脚本)后接收信号,而不通知taos适配器和taosd (变成僵尸进程)。

代码语言:javascript
复制
    PID USER     PR   NI VIRT     RES    SHR  S  %CPU  %MEM  TIME+    COMMAND
     9 root      20   0 2873404  80144   2676 S   2.3  0.5 112:30.81 taosadapter                     
     8 root      20   0 2439240  41364   2996 S   1.0  0.3 130:53.67 taosd                           
     1 root      20   0   20044   1648   1368 S   0.0  0.0   0:00.01 run_taosd.sh                    
     7 root      20   0   20044    476    200 S   0.0  0.0   0:00.00 run_taosd.sh                    
   135 root      20   0   20176   2052   1632 S   0.0  0.0   0:00.00 bash                            
   146 root      20   0   38244   1788   1356 R   0.0  0.0   0:00.00 top 

我个人选择了在k8s yaml文件中重写钩子函数的方式,以便立即删除容器:

代码语言:javascript
复制
lifecycle:
   preStop:
      command:
      - /bin/bash
      - -c
      - procnum=`ps aux | grep taosd | grep -v -e grep -e entrypoint -e run_taosd
            | awk '{print $2}'`; kill -15 $procnum; if ["$?" -eq 0]; then echo "kill

当然,一旦我们知道了问题的原因,这里就没有讨论其他的解决办法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71109426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档