java程序配合k8s实现滚动更新
kubersphere平台
前言
在滚动更新过程中,Go 程序通常具有更快的启动速度,这使得它更适合于需要快速替换正在运行的程序的场景。相比之下,Java 应用程序(尤其是在 Spring Boot 框架下)的启动时间可能较长,甚至可能超过一分钟。
这是因为 Java 语言和 Spring Boot 框架在启动时需要进行复杂的初始化过程,包括类加载、依赖注入、Bean 实例化等操作。这些操作可能需要较长的时间,特别是在大型应用程序中或者存在大量依赖关系时。
一、滚动更新是什么?
滚动更新的目标是逐步替换现有部署中的旧实例(Pod)为新的实例,以避免服务中断和不可用。
二、使用步骤
1、java程序中引入spring-boot-starter-actuator依赖
代码如下(示例):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、配置启动探针
kubersphere中配置健康检查增加启动探针
不配置启动探针k8s拉取镜像成功后就会将容器删除配置后会在程序暴漏出/actuator/health 端点并返回{status:“UP”}后再删除容器 确保服务的连续性
/actuator/health 端点,用于检查应用程序的健康状态。通过访问该端点,可以获取应用程序的健康信息,如是否存活、是否就绪等。这对于容器编排平台(如 Kubernetes)来说十分重要,可以根据应用程序的健康状态做出相应的处理。
可以看到容器内在检测/actuator/health接口,直到程序启动成功或者配置的检测时间超时
![在这里插入图片描述](https://img-blog.csdnimg.cn/f464464c4af243059b1ce09fb06ead5a.png
3、 就绪探针
就绪探针配置和上文操作一致即可
总结
通过使用滚动更新策略,可以有效地更新应用程序而不会中断服务。这种策略使得系统可以平滑地从旧版本过渡到新版本,并确保在整个过程中保持可用性和稳定性。