k8s常用命令及注意点

重启pod,新的没起来,旧的不会删除

 问题:

1. 传统模式下我会先从nacos 服务下线,这样可以保证处理完成请求,并保证不会有新的请求进入到程序中,我想了解下 在k8s中 使用上文中pod宽限期和java程序捕捉信号 可以实现吗

复制代码
在 Kubernetes 中,通过设置 Pod 的宽限期 (terminationGracePeriodSeconds) 和在 Java 程序中捕捉 SIGTERM 信号,你可以实现类似于传统模式下的从 Nacos 服务下线的功能。具体来说,这种方式可以确保你的服务在处理完已有请求后,再从 Nacos 注销,避免新的请求进入,并且能够优雅地关闭。

实现步骤
配置 Kubernetes Deployment:设置 terminationGracePeriodSeconds 以确保有足够的时间进行优雅停机。
在 Java 程序中添加关闭钩子:捕捉 SIGTERM 信号并从 Nacos 注销。
启动 Kubernetes Deployment:使新的 Pod 正常运行并注册到 Nacos。

详细步骤
1. 配置 Kubernetes Deployment
在 Kubernetes Deployment 配置中,设置 terminationGracePeriodSeconds 和 preStop 钩子。preStop 钩子可以通过一个短暂的延迟来确保 SIGTERM 信号处理期间不接受新的请求。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-service
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: my-service
    spec:
      containers:
      - name: my-service
        image: my-service:latest
        ports:
        - containerPort: 8080
        lifecycle:
          preStop:
            exec:
              command: ["/bin/sh", "-c", "sleep 10"]  # 可选的短暂延迟
      terminationGracePeriodSeconds: 30  # 宽限期

工作流程
Pod 终止信号:

Kubernetes 在删除 Pod 时,会先向容器发送 SIGTERM 信号,并开始计时 terminationGracePeriodSeconds。
preStop 钩子会被调用,延迟几秒钟(可选),确保正在进行的请求能够完成。
Java 应用捕捉信号:

Java 应用程序通过注册的关闭钩子捕捉到 SIGTERM 信号,并执行注销 Nacos 的逻辑。
deregisterFromNacos 方法被调用,执行从 Nacos 注销的操作。

Kubernetes 强制终止:

如果在 terminationGracePeriodSeconds 时间内应用程序未能退出,Kubernetes 会发送 SIGKILL 信号强制终止容器。
复制代码

 

posted @   不会跳舞的胖子  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示