首页 > 解决方案 > 在 Kubernetes 中是否有关闭或杀死 pod 的探测?

问题描述

有没有办法触发关闭,所以我们可以在关闭之前优雅地关闭所有连接,并且在探测之后不进行任何操作并保持探测准备好杀死。

这包括刷新日志、在移交给新 pod 之前保存应用程序的任何状态以及更多用例。

标签: kubernetes

解决方案


您有 2 个选项:

  1. 容器(PID 1)在容器(和 pod)被删除之前接收 SIGTERM。您可以捕获 SIGTERM 并对其采取行动。

  2. 您可以使用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" "-"

推荐阅读