Kubernetes中Pod的声明周期

Pod的声明周期

删除pod时,加上–force选项能提高删除pod的速度,这是一种粗暴的删除方式。不加–force选项为什么慢呢?
原因在于kubernetes对pod的删除有个延期删除期,这个时间默认是30s。当对一个pod发出删除指令时,这个pod状态会被标记为”terminating”,此时不会立即删除,而是等pod继续处理手头的任务,如果在30s内任务完成的话则pod会被自动删除,超过30s任务还没有结束则pod会被强制删除。这种删除方式叫做优雅的删除pod。这个宽限期可以通过参数terminationGracePeriodSeconds来指定。

  • 修改yaml文件
vi t1.yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: t1
  name: t1
spec:
  terminationGracePeriodSeconds: 15
  containers:
  - image: busybox
    imagePullPolicy: IfNotPresent
    command: ["sh","-c","sleep 1000"]
    name: t1
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
  • 创建pod
kubectl apply -f t1.yaml
kubectl get pod
kubectl describe pods t1
kubectl delete pods t1

删除pod时有15s宽限期,容器里执行的命令为sleep 1000,要1000s后才能结束,所以15s后pod会被强制删除。
在这里插入图片描述
在这里插入图片描述

注意:如果pod里执行的是nginx进程,就不一样了,因为nginx处理信号的方式和kubernetes处理信号的方式并不一样,nginx pod进程使用fast shutdown,pod里的nginx进程会很快被关闭,之后pod也很快被删除,不会使用kubernets的删除宽限期。

pod hook(钩子)

在删除某个pod时,如果客户端正在连接此pod,强制删除会导致客户端访问报错。可以通过pod钩子来解决问题。
在pod生命周期内,有两个hook是可用的:

  1. postStart:创建pod时随着pod主进程同时运行,没有先后顺序。
  2. preStop:当删除pod时,要先运行preStop里的程序,之后再关闭pod。
    对于preStop来说,也必须在宽限期内完成,没有在宽限期内完成仍然会被强制删除。
  • 修改yaml文件
vi t2.yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: t2
  name: t2
spec:
  terminationGracePeriodSeconds: 600
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: t2
    resources: {}
    lifecycle:
      preStop:
        exec:
          command: ["/bin/sh","-c","/usr/sbin/nginx -s quit"]
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
  • 创建pod
kubectl apply -f t2.yaml
kubectl get pod
kubectl delete pods t2

当删除pod时,pod状态被标记为”terminating”,此时删除信号并没有发送到pod里的主进程nginx –g daemon off,而是 先执行 preStop hook里的进程,即/usr/sbin/nginx –s quit。

/usr/sbin/nginx –s quit是一种优雅的关闭nginx的方式,即先处理完手头已有的任务,再关闭nginx进程该任务完成后pod里主程序接收关闭信号,再把nginx pod删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值