首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确配置Kubernetes探测定时(用于Spring应用程序)

如何正确配置Kubernetes探测定时(用于Spring应用程序)
EN

Stack Overflow用户
提问于 2020-10-08 17:43:54
回答 2查看 922关注 0票数 1

我们有一个简单的Spring应用程序,它的启动时间不到30秒。因此,我将探测配置如下:

代码语言:javascript
复制
    readinessProbe:
      httpGet:
        path: /actuator/health/readiness
        port: 8080
      initialDelaySeconds: 30
      periodSeconds: 1
    livenessProbe:
      httpGet:
        path: /actuator/health/liveness
        port: 8080
      initialDelaySeconds: 30
      periodSeconds: 1

我的理解是,准备就绪探测器等待30秒,然后将成功(如果应用程序启动)。还有激活探测,延迟30秒(从部署开始)开始,并且几乎同时成功,就绪探测成功(如果应用程序已经准备好)。但我在日志中看到的是,准备好的探测器等待30秒,然后成功,但在那之后,又有30秒的等待时间,然后旧舱被关闭:

代码语言:javascript
复制
develop/demo-57c8984866-6v5sl[demo]: {"ts":"2020-10-08T17:33:07.378Z","logger":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer","level":"INFO","thread":"main","message":"Tomcat started on port(s): 8080 (http) with context path ''"}
develop/demo-57c8984866-6v5sl[demo]: {"ts":"2020-10-08T17:33:07.387Z","logger":"org.springframework.data.repository.config.DeferredRepositoryInitializationListener","level":"INFO","thread":"main","message":"Triggering deferred initialization of Spring Data repositories…"}
develop/demo-57c8984866-6v5sl[demo]: {"ts":"2020-10-08T17:33:09.441Z","logger":"org.springframework.data.repository.config.DeferredRepositoryInitializationListener","level":"INFO","thread":"main","message":"Spring Data repositories initialized!"}
develop/demo-57c8984866-6v5sl[demo]: {"ts":"2020-10-08T17:33:09.469Z","logger":"com.example.Application","level":"INFO","thread":"main","message":"Started Application in 23.918 seconds (JVM running for 25.343)"}
develop/demo-57c8984866-6v5sl[demo]: {"ts":"2020-10-08T17:33:14.251Z","logger":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]","level":"INFO","thread":"http-nio-8080-exec-1","message":"Initializing Spring DispatcherServlet 'dispatcherServlet'"}
develop/demo-57c8984866-6v5sl[demo]: {"ts":"2020-10-08T17:33:14.258Z","logger":"org.springframework.web.servlet.DispatcherServlet","level":"INFO","thread":"http-nio-8080-exec-1","message":"Initializing Servlet 'dispatcherServlet'"}
develop/demo-57c8984866-6v5sl[demo]: {"ts":"2020-10-08T17:33:14.292Z","logger":"org.springframework.web.servlet.DispatcherServlet","level":"INFO","thread":"http-nio-8080-exec-1","message":"Completed initialization in 30 ms"}
develop/demo-79cc9bc757-xlg6z[demo]: 2020-10-08T17:33:44.590172 Shutting down...
develop/demo-79cc9bc757-xlg6z[demo]: {"ts":"2020-10-08T17:33:44.658Z","logger":"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean","level":"INFO","thread":"SpringContextShutdownHook","message":"Closing JPA EntityManagerFactory for persistence unit 'default'"}
develop/demo-79cc9bc757-xlg6z[demo]: {"ts":"2020-10-08T17:33:44.664Z","logger":"org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor","level":"INFO","thread":"SpringContextShutdownHook","message":"Shutting down ExecutorService 'applicationTaskExecutor'"}
develop/demo-79cc9bc757-xlg6z[demo]: {"ts":"2020-10-08T17:33:44.667Z","logger":"com.zaxxer.hikari.HikariDataSource","level":"INFO","thread":"SpringContextShutdownHook","message":"HikariPool-1 - Shutdown initiated..."}
develop/demo-79cc9bc757-xlg6z[demo]: {"ts":"2020-10-08T17:33:44.680Z","logger":"com.zaxxer.hikari.HikariDataSource","level":"INFO","thread":"SpringContextShutdownHook","message":"HikariPool-1 - Shutdown completed."}

第二个30秒等待时间的原因是什么(见第一个“关闭.”)?为了记录在案,不存在SIGTERM问题(应用程序正确地响应SIGTERM)。

更多信息

如果我对这些探测是如何工作的,请纠正我的错误:容器启动,此时准备就绪的初始延迟的计时器也启动。25秒后,应用程序就准备好了。再过5秒,就绪探测器开始击中应用程序/容器,它成功了,这样应用程序就准备好了(对吗?)在这一点上,我希望k8s发送到旧荚,要求关闭它的西格术语。但是,正如日志中所示,在新容器准备好之后,旧吊舱还在运行30秒。

也许,重新措辞这个问题会有帮助。我想在应用程序准备好后立即关闭旧吊舱。这款应用还不到30秒就准备好了。换句话说,我需要整个部署只需30秒(考虑到启动时间小于30秒,关机时间不到1秒)。为什么上面的配置不这样做呢?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-12 09:07:17

好的,我们用来管理库贝格清单的工具( k8s )和库对于minReadySeconds属性有一个不同的默认值(30秒)。我改变了这一切,一切都如期而至。

票数 3
EN

Stack Overflow用户

发布于 2020-10-08 18:50:23

根据你的描述,你做的一切都很好。

我们观察到的是,与第一次记录启动信息的豆荚不同,另一个豆荚正在关闭。如果没有更多的信息,这看起来就像一个滚动的更新,等待关闭旧的豆荚,直到新的豆荚变得可用和健康。

您可以通过查看日志消息来判断:荚名位于每一行的前面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64267964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档