k8s 和 nacos 如何优雅的停止 不宕机
·
- 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卸载 再次重启一次才行
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)