- Pod 设置为
Terminating
状态,并从所有服务的Endpoints列表中删除 - 此时,Pod停止,但是Pod中运行的容器不受影响 流量不在转发进来 但是已经进来的流量继续处理
- PreStop Hook被执行 nacos下线 后后面同步执行 所以可以sleep 25s 虽然经过测试好像没啥用 terminationGracePeriod 30s 这个时间管用 经过测试 无论怎么设置 sleep 容器都是到这个时间 才 kill掉
- preStop Hook发送容器特殊命令或者Http请求到Pod中
- 此时,Kubernetes将向Pod中的容器发送SIGTERM信号,这个信号即通知容器他们很快将进行关闭。
- Kubernetes等待优雅的终止
- 此时,Kubernetes等待指定的时间称为优雅终止宽限期。默认情况下,这是30秒(可以修改),值得注意的是,PreStop Hook和SIGTREM信息是属于并行执行,Kubernetes不会等待PreStop Hook完成。
nacos 下线代码
package com.hnradio.saas.cms.controller;
import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
@Slf4j
public class NacosController {
@Autowired
private NacosAutoServiceRegistration nacosAutoServiceRegistration;
@GetMapping(value = "/noauth/api/nacos/deregister")
public String deregisterInstance() {
log.info("---------------------开始停止pod到naocs--------------------");
nacosAutoServiceRegistration.stop();
log.info("---------------------结束停止pod到naocs--------------------");
return "success";
}
}
spec:
#在这个imagePullPolicy加 liftcyle
imagePullPolicy: Always
lifecycle:
preStop:
exec:
command:
- /bin/sh
- -c
- curl http://localhost:57010/cms/noauth/api/nacos/deregister
- sleep 25
name: cms-service
重启第一次 旧pod卸载 再次重启一次才行