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 信号强制终止容器。
越学越感到自己的无知
分类:
K8S
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现