持续交付与Kubernetes在AWS上的部署
1. 程序关闭与SIGTERM处理
在容器化环境中,Kubernetes只能向容器内的PID 1进程发送信号。当编写Dockerfile时,有两种形式来调用程序:shell形式和exec形式。在Linux容器中,运行shell形式命令的默认命令是 /bin/sh -c 。这就引出了几个关于应用程序能否接收SIGTERM信号的问题:
- 应用程序是如何被调用的?
- 镜像中使用的是哪种shell实现?
- shell实现是如何处理 -c 参数的?
1.1 SIGTERM未发送到应用程序进程
如果在Dockerfile中使用shell形式命令 CMD python -u app.py 来执行应用程序,容器的启动命令将是 /bin/sh -c "python3 -u app.py" 。容器启动后,其内部进程结构如下:
# 镜像来自 "graceful_docker/Dockerfile.shell-sh"
$ kubectl run --generator=run-pod/v1 \
--image=devopswithkubernetes/ch93:shell-sh my-app
pod/my-app created
$ kubectl exec my-app ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 /bin/sh
超级会员免费看
订阅专栏 解锁全文
997

被折叠的 条评论
为什么被折叠?



