我的 GKE 集群版本上运行着一个 Kubernetes Daemonset:
Server Version: version.Info{Major:"1", Minor:"9+", GitVersion:"v1.9.6-gke.1", GitCommit:"cb151369f60073317da686a6ce7de36abe2bda8d", GitTreeState:"clean", BuildDate:"2018-04-07T22:06:59Z", GoVersion:"go1.9.3b4", Compiler:"gc", Platform:"linux/amd64"}
当 Pod 被删除时,我的容器会正常处理发出的 SIGTERM 并关闭。Pod 中的两个容器都会立即报告以下内容:
State: Terminated Reason: Completed Exit Code: 0 Started: Tue, 22 May 2018 17:09:39 -0500 Finished: Tue, 22 May 2018 17:24:11 -0500 Ready: False
但是,吊舱在之后的约 30 秒内仍处于 状态Ready: 0/2
。Status: Terminating
您知道为什么会发生这种情况或如何诊断吗?
答案1
默认宽限期为 30 秒。与任何默认值一样,它可能适合您的用例,也可能不适合。有两种方法可以更改宽限期:
1.在yaml文件中
例如,以下 .yaml 显示了一个简单的 DaemonSet 配置,具有 30 秒的终止宽限期
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
.
.
.
terminationGracePeriodSeconds: 30
2.在命令行中,运行“kubeclt delete”
例如,
kubectl 删除 pod 名称 --grace-period=0
按照@Zied 的帖子强制删除。
答案2
如果我们专注于您描述的删除部分,我们可以参考kubectl delete
帮助来弄清楚荚资源有grace-period
某些资源(例如 Pod)支持优雅删除。这些资源定义了强制终止前的默认期限(宽限期),但您可以使用 --grace-period 标志覆盖该值,或传递 --now 将宽限期设置为 1。
您可以尝试:
kubectl delete pod NAME --grace-period=0