Kubernetes详解(十六)——Pod容器探测

简介: Kubernetes详解(十六)——Pod容器探测

今天继续给大家介绍Linux运维相关知识,本文主要内容是Pod容器探测。

一、Pod生命周期重要行为
在Pod的生命周期中,有如下几个重要行为:
1、初始化容器
初始化容器即在应用程序的主容器在启动前要运行的容器,该容器的任务通常是为主容器的启动进行一些预置操作。初始化容器具有以下两点特征:
(1)初始化容器必须运行完成直至结束,如果初始化容器阶段运行失败,那么Kubernetes需要重启并等待初始化完成,除非在Pod的spec.restartPolicy中设置为Never对该项进行限制。
(2)每个初始化容器必须按照定义的顺序串行运行。
2、容器探测
容器探测是Pod在运行时,由Kubelet对容器进行周期性的健康诊断,诊断的具体操作由容器的处理器进行定义。尽管Kubernetes使用Controller来管理Pod,当Pod启动发生错误时会重新启动,但是Pod中容器的部分非错误性故障却无法使得Controller识别。例如,Pod中的容器虽然工作正常,但是80端口无法提供Web服务等。在这种情况下,就需要我们通过容器探测,进一步探测容器所处的状态,并根据容器的健康情况决定对容器的重启等操作。

二、容器探测分类
按照容器探测的方法进行分类,容器探测可以分为以下三种:
1、ExecAction
在容器内执行指定命令,如果该命令返回为0表示健康,否则即为不健康状态,这种检测方式为Exec探测。
2、HTTPGetAction
通过向容器的指定路径发起HTTP Get的请求,如果返回2xx或者3xx的状态码则表示健康,否则即为不健康,这种检测方式为HTTP的探测。
3、TCPSocketAction
通过与容器的某端口尝试建立TCP链接,如果能够成功建立链接,则处于健康状态,如果不能则视为不健康,这种检测方式为TCP的探测。
按照容器探测的类型进行分类,容器探测可以分为以下两种:
1、存活性探测
存活性探测用于判定Pod是否处于“健康”状态,如果判定Pod中的容器处于不健康状态,kubectl将会杀死容器并根据重启策略来决定是否对该容器进行重启。未定义存活性检测的容器的默认状态为Success。
2、就绪性探测
就绪性探测用于判断容器是否准备就绪,是否可以为外部提供服务。如果就绪性探测失败,Pod的端点控制器(如Service)就会将该Pod的IP移除,从而使得外部流量避免访问该未就绪的容器,当就绪性检测成功后,其IP会被添加回来。
一般而言,灵活性探测和就绪性探测的选择要基于以下原则:
1、如果容器能够在遇到问题或者不能提供服务的情况下自行崩溃,则不需要使用存活探针,Kubernetes集群本身即可完成这样的操作。
2、如果希望容器在探测处于不健康状态时能够被杀死并重新启动,那么可以指定一个存活性探针,并且指定restartPolicy为Always或者是OnFailure。
3、如果要仅在探测成功后才向Pod发送数据流量,则应该使用就绪性探测。就绪性探测会使得Pod启动,并继续完成其初始化过程,直至Pod初始化完成后,才开始向Pod内引导数据流量。
4、如果希望容器能够自行维护,则可以合理的指定就绪探测和存活探测,并分别探测不同的端点。
5、如果想在Pod容器被删除后终止请求,则无需使用任何探针,因为Kubernetes集群会自动帮助我们做到这一点。

三、容器的重启策略
在Pod.spec中,有一个resatartPolicy字段,该字段适用于所有Pod中容器,其值可以设置为Always、OnFailure和Never。Always是默认设置,表示一旦Pod对象终止,就立即重启;OnFailure表示仅在Pod对象出现错误时才进行重启;而Never则表示从不重启。
如果Pod中的容器需要重启,那么其第一次重启时会根据需要,立即重启,之后的重启操作由kubelet延迟一段时间后进行。之后的重启操作时长依次为10秒、20秒、40秒……并依次倍增,直至达到300秒的最大延迟时间。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_40228200/article/details/124286708

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
8天前
|
运维 Kubernetes 持续交付
Docker与Kubernetes:容器化技术的黄金搭档
【6月更文挑战第10天】Docker和Kubernetes是容器化技术的黄金组合,Docker提供轻量级、可移植的容器引擎,简化应用部署,而Kubernetes作为容器编排系统,实现自动化部署、扩展和管理,确保高可用性和可扩展性。两者的协作使得容器化应用更高效、可靠,共同推动软件开发和运维的创新。
|
12天前
|
监控 Kubernetes 网络协议
上云业务的k8s容器排障与思考
本文主要讲述了在完成业务上云后,面临因业务请求量激增导致的系统复杂故障和挑战。作者通过排查分析,发现了一个长时间处于“进行中”状态的异常任务,客户端(APP2)进程卡死,而服务端(APP3)进程正常结束。进一步分析发现,问题出在kube-proxy代理的会话超时机制,由于请求处理延迟,kube-proxy清理了会话记录,导致服务端回包异常,客户端无法识别,从而形成进程假死。 最后,作者强调了在成本控制背景下,通过分析流量增长原因、优化技术架构和调整运营策略来改善系统性能和稳定性的必要性。
265 5
上云业务的k8s容器排障与思考
|
12天前
|
运维 Kubernetes Java
Java一分钟之Kubernetes(K8s):容器编排深入浅出
【6月更文挑战第6天】Kubernetes是容器编排的主流工具,简化分布式系统运维。本文介绍了K8s核心概念:节点、Pod、服务、部署和副本集。讨论了资源不足、依赖服务未就绪等常见问题及其解决策略,并提供创建Deployment的代码示例。学习K8s能提升部署效率和运维灵活性。
112 5
|
18天前
|
Kubernetes 算法 调度
k8s群集调度之 pod亲和 node亲和 标签指定
k8s群集调度之 pod亲和 node亲和 标签指定
|
18天前
|
存储 Kubernetes Linux
pod介绍之 容器分类与重启策略
pod介绍之 容器分类与重启策略
|
21天前
|
弹性计算 Kubernetes 监控
【阿里云弹性计算】阿里云 ECS 与 Kubernetes 集成:轻松管理容器化应用
【5月更文挑战第28天】阿里云ECS与Kubernetes集成,打造强大容器管理平台,简化应用部署,实现弹性扩展和高效资源管理。通过Kubernetes声明式配置在ECS上快速部署,适用于微服务和大规模Web应用。结合监控服务确保安全与性能,未来将深化集成,满足更多业务需求,引领容器化应用管理新趋势。
201 2
|
22天前
|
运维 Prometheus Kubernetes
基于Kubernetes的容器化运维实践
本文将介绍如何在Kubernetes平台上进行容器化运维。首先,我们将了解Kubernetes的基本概念和组件。然后,我们将探讨如何部署和管理应用程序,以及如何使用Kubernetes进行自动化运维。最后,我们将讨论一些最佳实践和常见问题解答。通过阅读本文,您将能够更好地理解Kubernetes在现代IT环境中的重要性,并学会如何有效地利用它来提高运维效率。
|
2天前
|
监控 Java 数据安全/隐私保护
性能监控之 JMX 监控 Docker 容器中的 Java 应用
【6月更文挑战9天】性能监控之 JMX 监控 Docker 容器中的 Java 应用
17 1
|
2天前
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
|
6天前
|
运维 Ubuntu Docker
深入理解容器化技术:Docker的应用与实践
在这个数字化转型迅速推进的时代,容器化技术为软件开发和部署提供了新的路径。本文将深入探讨Docker技术的基本原理、应用场景以及实际操作,旨在帮助读者全面理解并掌握这一关键技术。
35 2