kubernetes之给容器的生命周期事件添加处理器

简介

此文讲述如何给容器的声明周期时间添加处理器,Kubernetes支持postStartpreStop事件。Kubernetes在容器启动之后立即发送postStart事件,在容器终止之前立即发送preStop事件。

备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。

定义 postStart 和 preStop 处理器

创建一个包含一个容器的Pod,容器中有postStartpreStop事件。文件名:lifecycle-events.yaml

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]

在配置文件中,postStart命令写入一条message文件到容器的/usr/share/message目录。preStop命令平滑停止nginx。如果容器由于故障而终止,这将很有帮助。

# kubectl apply -f /root/k8s-example/pods/lifecycle-events.yaml

确认Pod中的容器正在运行

# kubectl get pod lifecycle-demo
NAME             READY   STATUS    RESTARTS   AGE
lifecycle-demo   1/1     Running   0          26h

进入容器的shell

# kubectl exec -it lifecycle-demo -- /bin/bash

在shell中确认postStart处理器创建的message文件存在

root@lifecycle-demo:/#  cat /usr/share/message
Hello from the postStart handler

创建容器后,Kubernetes立即发送postStart事件。 但是,不能保证在调用Container的entrypoint之前先调用postStart处理程序。 postStart处理程序相对于Container的代码异步运行,但是Kubernetes对容器的管理会阻塞,直到postStart处理程序完成。 在postStart处理程序完成之前,容器的状态不会设置为RUNNING

posted @ 2020-01-22 08:39  McSiberiaWolf  阅读(407)  评论(0编辑  收藏  举报