kubernetes - 在 Kubernetes 中是否有关闭或杀死 pod 的探测?
问题描述
有没有办法触发关闭,所以我们可以在关闭之前优雅地关闭所有连接,并且在探测之后不进行任何操作并保持探测准备好杀死。
这包括刷新日志、在移交给新 pod 之前保存应用程序的任何状态以及更多用例。
解决方案
您有 2 个选项:
容器(PID 1)在容器(和 pod)被删除之前接收 SIGTERM。您可以捕获 SIGTERM 并对其采取行动。
您可以使用preStop 生命周期挂钩
重要的实现细节可以在这里找到:https ://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods
httpGet 示例
apiVersion: v1
kind: Pod
metadata:
name: prestop-pod
spec:
terminationGracePeriodSeconds: 5
containers:
- name: nginx
image: nginx
lifecycle:
preStop:
httpGet:
# only port is reqired
port: 80
path: "?preStop"
# scheme: HTTP
# host: ...
# httpHeaders:
# name: ...
# value: ...
在kubectl apply -f
此文件上之后,在另一个终端上kubectl log -f prestop-pod
执行时运行。kubectl delete pod prestop-pod
您应该会看到如下内容:
$ kubectl apply -f prestop.yaml
pod/prestop-pod created
$ kubectl logs -f prestop-pod
10.244.0.1 - - [21/Mar/2019:09:15:20 +0000] "GET /?preStop HTTP/1.1" 200 612 "-" "Go-http-client/1.1" "-"
推荐阅读
- android - 如何在 android 中通过改造接收来自 laravel 的字符串响应?
- c++ - Arduino C++中的字典类数据结构
- r - 在R中的矩阵中按组求和
- javascript - 如何在 Angular 6 中进行社交登录(Facebook、Google、LInkedin 和 Github)
- php - 在 Woocommerce 的自定义“我的帐户”部分获取 $_GET 或 $_POST
- swift - 线程 1 EXC_BAD_ACCESS(代码=2,地址=0x7ffeeb1aeff8)
- asp.net-mvc - 编辑视图中的恢复日期时间值
- ios - iOS - Objective C 动态框架为 arch x86_64 (模拟器)发出位码
- android - 无法从身份验证成功侦听器写入 Firebase 数据库
- javascript - 用于在 Web 浏览器中查看和填写 PDF 表单的 JS 库