开发和运维对K8S中的应用都做了什么

开发和运维对K8S中的应用都做了什么,第1张

在应用的整个生命周期里,开发和运维都和它密不可分。一个塑造它,一个保养它。

如果应用需要部署到K8S中,开发和运维在其中都做了什么呢?

从开发侧来说,我们的应用应该具备以下能力:

健康 检测接口用于检测应用的 健康 状态,在K8S中,使用Readiness和Liveness分别来探测应用是否就绪和是否存活,如果未就绪或者未存活,K8S会采取相应的措施来确保应用可用。

如果我们应用未定义好相应的 健康 检测接口,K8S就无法判断应用是否正常可用,整个应用对我们来说就是黑匣子,也就谈不上应用稳定性了。

定义一个简单的 健康 检测接口如下:

如上我们定义了 health 接口,当应用启动后,只需要探测这个接口,如果返回OK,表示应用是正常的。

当然,上面的接口是非常简单的,在实际情况下,应用本身也许还依赖起来应用,比如redis,mysql,mq等,如果它们异常,应用是不是异常的呢?那我们的应用 健康 检测需不需要检测其他应用的 健康 状态呢?

既然我们定义好了 健康 检测接口,那我们的YAML模板就可以增加 健康 检测功能,如下:

应用发版是常规不能再常规的 *** 作,通常情况下都是滚动更新的方式上线,也就是先起一个新应用,再删一个老应用。

如果这时候老应用有部分的流量,突然把老应用的进程杀了,这部分流量就无法得到正确的处理,部分用户也会因此受到影响。

怎么才会不受影响呢?

假如我们在停止应用之前先告诉网关或者注册中心,等对方把我们应用摘除后再下线,这样就不会有任何流量受到影响了。

在K8S中,当我们要删除Pod的时候,Pod会变成Terminating状态,kubelet看到Pod的状态如果为Terminating,就会开始执行关闭Pod的流程,给Pod发SIGTERM信号,如果达到宽限期Pod还未结束就给Pod发SIGKILL信号,从Endpoints中摘除Pod等。

从上面可知,Pod在停止之前会收到SIG信号,如果应用本身没有处理这些信号的能力,那应用如果知道什么时候该结束呢?

下面简单定义一个处理SIG信号的功能。

当接收到SIG信号的时候,就会调用 Shutdown 方法做应用退出处理。

除此,还要结合K8S的 PreStop Hook 来定义结束前的钩子,如下:

如果使用注册中心,比如nacos,我们可以在 PreStop Hook 中先告诉nacos要下线,如下:

Metrics主要用来暴露应用指标,可以根据实际情况自定义指标,以便于监控工具Prometheus进行数据收集展示。

有些语言有现成的exporter,比如java的jmx_exporter,没有的就需要自己在应用中集成。

比如:

这种会暴露默认的>

1、HTML+CSS3+数据库

2、Java SE(Java面向对象思想;设计模式、面向对象原则、Java高阶API、线程、网络编程、反射、NIO)

3、Java web(Java web基础、JS、DOM *** 作、JSP/Servlet、第三方工具包、Tomcat)

4、框架(网络原理、>

5、高可用、高并发、高扩展(SpringBoot、缓存、分布式、插件、全文索引、服务中间件、消息中间件、云服务器、云存储、云数据库、域名服务)

6、微服务、大数据

以下是我们2020年更新的课程,您可以了解一下!

如想学习,可以在我们线上学习平台:百战程序员进行了解!

以上就是关于开发和运维对K8S中的应用都做了什么全部的内容,包括:开发和运维对K8S中的应用都做了什么、java培训要学习哪些内容、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9867959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存