关注分享主机优惠活动
国内外VPS云服务器

nginxpodhook钩子优雅关闭的例子

一、系统环境服务器版本docker软件版本Kubernetes(k8s)集群版本CPU架构CentOS Linux 7 . 4 . 1708版(核心)Docker版本20 . 10 . 12v 1 . 21 . 9 x86 _ 64 Kubernetes集群架构:k8scloude1为主节点,k8scloude2和k8scloude3为工作节点。

服务器操作系统版本CPU架构进程功能描述K8 SCLOUDE 1/192 . 168 . 110 . 130 CentOS Linux 7 . 4 . 1708(核心)x86 _ 64 Docker、kube-apiserver、etcd、kube-scheduler、Kube-controller-manager、kubelet、kube-proxy、coredns、calicok8s主节点k 8 sloude 2/192 . 168 . 110 . 129 CentOS Linux 7.4

二。前言本文介绍了Podhook以及如何优雅地关闭nginx pod。

pod管理的前提是有一组能够正常运行的Kubernetes集群。关于Kubernetes(k8s)集群的安装和部署,请参考博客centos 7 Kubernetes(k8s)集群的安装和部署,https://www.jb51.net/article/266741.htm.

三。Podhook (Podhook)为容器的生命周期事件设置处理函数。Kubernetes支持postStart和preStop事件。当一个容器启动时,Kubernetes会立即发送postStart事件;Kubernetes将在容器终止之前发送一个preStop事件。容器可以为每个事件指定一个处理程序。

Pod hook:目前nginx进程运行在pod3容器中。启动容器时,我想在主进程之外启动一个进程。我该怎么办?这就是你需要使用pod hook (Podhook)的时候了。Podhook有两个选项:

PostStart: XXXX在容器启动后执行,和主进程同时运行,没有先后顺序;PreStop:在容器关闭前执行XXXXpostStart示例:在容器启动后执行"/bin/sh & quot;,& quot-c & quot;,& quot日期& gt& gt/tmp/bb . txt & quot;,将日期打印到/tmp/bb.txt文件中。

[root @ k 8s cloud 1 pod]# vim pod 3 . YAML[root @ k 8s cloud 1 pod]# cat pod 3 . YAML API version:v1 kind:pod metadata:creation timestamp:null标签:run:pod 3 name:pod 3 spec:terminationgraceperiodes:0 containers:-image:nginx命令:["sh "," -c "," date & gt/tmp/aa . txt;sleep 10000 "]imagePullPolicy:if not present name:n1 resources:{ } life cycle:postStart:exec:command:["/bin/sh "," -c "," date & gt& gt/tmp/bb . txt "]DNS policy:cluster first restart policy:always status:{ }[root @ k 8 scloude 1 pod]# ku bectl apply -f pod 3 . YAML pod/3 pod created[root @ k 8 sloude 1 pod]# ku bectl get pod name ready status restart age pod 3 1/1 running 0 8s查看文件,可以看到,/tmp/aa.txt /tmp/bb.txt时间相同,这意味着两个命令同时运行证明了postStart: XXXX是在容器启动后执行的,主进程同时运行,没有先后顺序。

[root @ k8 scloude 1 pod]# ku bectl exec -it pod 3 --bash root @ pod 3:/# cat/tmp/aa . txt/tmp/bb . txt thujan 13 07:40:24 UTC 2022 thujan 13 07:40:24 UTC 2022 root @ pod 3:/# exit exit # delete pod[root @ k8 sloude 1 pod]# ku bectl delete -f pod 3 . YAML pod " pod 3 "现已删除,& quot-c & quot;,& quot日期& gt& gt/tmp/bb . txt;睡眠100 & quot,将日期打印到/tmp/bb.txt文件,睡眠100秒。

[root @ k 8s cloud 1 pod]# vim pod 4 . YAML[root @ k 8s cloud 1 pod]# cat pod 4 . YAML API version:v1 kind:pod metadata:creation timestamp:null标签:run:pod 3 name:pod 3 spec:terminationgraceperiodes:600 co containers:-image:nginx命令:["sh "," -c "," date & ampgt;/tmp/aa . txt;sleep 10000 "]imagePullPolicy:if not present name:n1 resources:{ } life cycle:postStart:exec:command:["/bin/sh "," -c "," date & ampgt;& ampgt;/tmp/bb . txt "]preStop:exec:command:["/bin/sh "," -c "," date & ampgt;& ampgt;/tmp/bb . txt;sleep 100 "]DNS policy:cluster first restart policy:always status:{ }[root @ k 8 scloude 1 pod]# ku bectl apply -f pod 4 . YAML pod/3 pod created[root @ k 8 sloude 1 pod]# ku bectl get pod name ready status restart age pod 3 1/1 running 0 7s,删除pod,在关闭容器之前执行preStop的命令。preStop执行后,主程序会运行10000秒,但terminationGracePeriodSeconds的宽限期只有600秒,所以600秒后pod会被删除。

[root @ k 8 sloude 1 pod]# ku ectl delete pod 3 pod " pod 3 " deleted c # forced delete pod[root @ k 8 sloude 1 pod]# ku ectl delete pod pod 3 --force警告:立即删除不等待确认正在运行的资源已经终止。资源可能会无限期地继续在群集上运行。pod“pod 3”强制删除

四。如何优雅地关闭nginx Pod描述:当一个Pod被删除时,执行kubectl get pod命令会显示这个Pod的状态是正在终止。这种终止状态不是Pod阶段之一。Pod有一个可以体面终止的截止时间,默认为30秒。您可以使用--force参数强制终止Pod。

由于nginx默认为快速关机,关闭时间一般不超过30秒。如果想优雅地关闭nginx,可以在关闭容器之前运行nginx -s quit,从而达到nginx优雅的关闭效果。

[root @ k 8s loude 1 pod]# vimpod5 . YAML # prestop处理程序指定在容器关闭前执行“/bin/sh”、“-c”“/usr/sbin/nginx -s quit”[root @ k 8s cloud 1 pod]# cat pod 5 . YAML API version:v1 kind:pod metadata:creationTimestamp:null标签:run:pod 5 name:pod 5 spec:terminationgraceperiodes:600 co containers:-image:nginx命令:[“sh”、“-”/tmp/aa . txt;sleep 10000 "]imagePullPolicy:if not present name:n1 resources:{ } life cycle:postStart:exec:command:["/bin/sh "," -c "," date & gt& gt/tmp/bb . txt "]prestop:exec:command:["/bin/sh "," -c ","/usr/sbin/nginx -s quit "]DNS policy:cluster first restart policy:always status:{ }[root @ k8 scloude 1 pod]# ku bectl apply -f pod 5 . YAML pod/pod 5 created[root @ k8 scloude 1 pod]# ku bectl get pod name ready status重新启动AGEpod5 1/1运行0 5s[root@k8scloude1资源可能会无限期地继续在群集上运行。pod“pod 5”强制删除。以上是nginx pod hook优雅关闭示例的详细内容。更多关于nginx pod钩子关闭的信息,请关注主机频道zhujipindao的其他相关文章。com!

未经允许不得转载:主机频道 » nginxpodhook钩子优雅关闭的例子

评论 抢沙发

评论前必须登录!