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卸载 再次重启一次才行 

你可能感兴趣的:(计算机网络,kubernetes,docker,容器)