|NO.Z.00129|——————————|CloudNative|——|KuberNetes&基础标签.V12|——|pod三种探针.V04|pod退出说明|

一、pod的退出流程
二、pod退出流程说明
### --- pod退出流程说明

~~~     用户执行删除操作,这个pod就会转为一个Terminating状态,执行删除之后会有一个宽限时间
~~~     在进行terminating状态的时候,
~~~     比如配置了一个service,在这个service里面配置endpoint,它会在endpoint中删除service.IP地址。
~~~     把这个metrics-server删除,它会把endpoint的配置给删除掉,
~~~     当然他只会删除你执行删除的那个容器的IP地址。
~~~     在去执行PreStop的指令。利用好PreStop指令,可以做到零宕机的发布应用。
三、pod退出流程示例说明
### --- pod退出流程示例说明

~~~     # 在企业中用的比较多的是SpringCloud的架构;
~~~     有的业务可能把SpringCloud的整个架构都搬到了k8s上面了,包括euraka,这是非常常见的架构模式。
~~~     加入我们使用了euraka,而且这个euraka也在k8s中;eureka会做什么事呢?
~~~     # 首先我们启动一个新的容器,这个容器在启动过程中会把自己的IP地址+端口号注册到eureka中,
~~~     注册完之后euraka会把这个地址推送到SpringCloud,
~~~     或者SpringCloud会定期的从euraka上同步其他service的地址。
~~~     # 这个新的已经起来了,那么我们就需要把那个旧的下线,或者会有一个删除或者下线的操作。
~~~     # 下线操作流程:做到零宕机的操作:我们去请求一下euraka的shutdown接口
~~~     (这个接口是我们自己去写的)告诉它,我要被删除掉了,
~~~     你把我的IP地址从euraka中删除掉,容器请求了eureka之后,会把pod本身的地址给关闭掉。
~~~     但是这个pod的euraka地址在eureka注册表中关闭掉了,
~~~     但是其它的service并不知道我这个容器已经被关掉了。所以说它是还会去做这个操作。
~~~     # 若是你的euraka配置了主动推送,它会把这个新的注册表推送给SpringCloud的其它的应用;
~~~     若是没有配置主动推送,只能是等待一段时间,注册表的刷新时间,
~~~     等待SpringCloud再次去euraka中同步化新的注册表,
~~~     这个新的注册表是没有被删除的Pod的;
~~~     所以说在其它的service在同步注册表的时间间隔的这个过程中,我这个Pod是不能被删除掉的。
~~~     # 解决方案:我们需要等待这个springboot去同步其他应用的新的注册表。
~~~     等待时间一般是90秒或者60秒,根据自己的需求来配置。
四、pod退出流程示例说明
### --- 删除一个pod资源

[root@k8s-master01 ~]# kubectl delete po nginx
pod "nginx" deleted
### --- 在删除一个pod的时候,创建一个新的pod

[root@k8s-master01 ~]# kubectl create -f pod.yaml 
pod/nginx created
### --- 再次删除pod资源

[root@k8s-master01 ~]# kubectl delete po nginx              
pod "nginx" deleted
### --- 查看pod资源删除状态
~~~     执行删除操作之后,这个pod就会变为Terminating状态

[root@k8s-master01 ~]# kubectl get po               
NAME    READY   STATUS        RESTARTS   AGE
nginx   0/1     Terminating   0          7s
### --- 查看pod.yaml配置参数
~~~     宽限的时间30秒,这个时间用来进行一些收尾的工作,
~~~     若是你在这个时间段之内把所有的请求都处理完了,
~~~     那么它会立刻关闭服务,然后进行清理操作,这个时间也是可以更改的。

[root@k8s-master01 ~]# kubectl get po nginx -oyaml
  terminationGracePeriodSeconds: 30                 
### --- 在进行terminating状态的时候,比如配置了一个service,
~~~     # 在这个service里面配置了endpoint,它会在endpoint中删除service的IP地址。
~~~     把这个metrics-server删除,它会把endpoint的配置给删除掉,
~~~     当然他只会删除你执行删除的那个容器的IP地址。 

[root@k8s-master01 ~]# kubectl get svc -n kube-system
metrics-server   ClusterIP   10.97.177.184   <none>        443/TCP                  6d18h
[root@k8s-master01 ~]# kubectl get ep -n kube-system
metrics-server   172.18.195.1:4443                                   6d18h
[root@k8s-master01 ~]# kubectl get po -n kube-system -owide
metrics-server-595f65d8d5-slhtd            1/1     Running   18         6d18h   172.18.195.1   k8s-master03   <none>           <none> 

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on 2022-03-30 11:51  yanqi_vip  阅读(29)  评论(0)    收藏  举报

导航