Kubernetes中Pod生命周期

KubernetesPod是容器管理的最小单位, 有着各种各样的Pod管理器. 那么一个Pod从启动到释放, 在这期间经历了哪些过程呢?

Pod自开始创建, 到正常运行, 再到释放, 其时间跨度及经历的阶段大致如下:

在这里插入图片描述

说一下各个阶段的作用以及是为了解决什么问题. 容器调度和下载镜像的过程就忽略了, 也没什么好说的.

init

Pod启动一个容器时, 可以有一组init容器先行启动(当然也可以没有), 这些init容器会依次执行, 且前一个成功之后, 后一个才会执行. 同时还会监控init容器的退出状态, 若init容器异常退出, 则会根据配置restartPolicy的重启策略选择重新启动或退出(这里的退出, 说明Pod启动失败了). 通过配置文件的pod.spec.initContainers进行配置, 其配置项与containers相同

init容器可应用与如下场景:

  • 可以将服务的创建和部署进行解耦. 以防止主容器过于臃肿
  • 检测依赖. 比如服务 A 必须要等服务 B 启动成功之后才能运行, 那么就可以在服务 A 的 init 阶段进行循环检测等待, 直到服务 B 启动成功了, 才开始启动服务 A
  • 具有访问Secret的权限. Secret是用来存储一些敏感数据的, 会进行加密处理. 主容器是没有权限访问的, 这也很好理解, 如果一个容器被攻破了, 如果能够拿到Secret的数据, 很可能会导致一串服务都被攻破. 而init容器在Pod提供服务之前就退出了, 可以提高数据的安全.
  • 等等

Podinit容器启动完成之前, 是不会对外提供服务的, 其状态一直为Pending

start/stop

容器启动和释放时运行的钩子. 通过配置文件的pod.spec.containers.lifecycle.postStartpod.spec.containers.lifecycle.preStop进行配置. 配置相同, 这里用postStart举例了. 具体配置可通过kubectl explain pod.spec.containers.lifecycle.postStart查看, 官方文档很详细.

# 执行一组命令
postStart: command: ["/bin/sh", "-c", "sleep 1"]
---
# 调用 http 接口通知
postStart: host: baidu.compath: /startport: 80

readiness

既就绪探针. 检测容器中的服务是否已经启动成功并可以对外提供访问了. 只有检测成功后, 才会将状态改为就绪状态(Running). 定义在配置文件的pod.spec.containers.readinessProbe位置. 默认success

readiness是为了解决服务的启动时间问题, 比如容器已经启动成功了, 但是提供服务的进程还没有启动完毕, 此时对外提供服务的话就会有问题. Kubernetes提供了如下三种探针:

  • ExecAction: 在容器中执行指定命令. 若命令返回0, 则成功
  • TCPSocketAction: 对指定端口进行 TCP 检查, 若端口开放, 则认为成功
  • HTTPGetAction: 对指定端口进行 HTTP Get 请求, 若响应码区间为[200, 400), 则认为成功

其配置文件大致如下:

# 命令探针
readinessProbe: exec: command: ["cat", "/tmp/file"]# 以下这些字段为通用字段, 下面不再重复# 探针失败的最大重试次数, 超过这个次数则认为本次探测失败, 容器启动失败. 默认3failureThreshold: 3# 探测的循环周期, n秒后进行下一次探测. 与 failureThreshold 配合确定启动时间. 默认10speriodSeconds: 1# 执行第一次探测前需要等待5s. 默认0sinitialDelaySeconds: 5# 探测超时时间. 默认1stimeoutSeconds: 1# 当探测失败后, 需要连续探测成功3次才认为成功. 默认1successThreshold: 3# 当探测失败后, 优雅释放可等待的时间. 超过则会被强制释放terminationGracePeriodSeconds: 5
---
# tcp 探针
readinessProbe: tcpSocket: host: baidu.comport: 80
---
# http 探针
readinessProbe: httpGet: host: baidu.compath: /port: 80# 设置请求的 header, 是个对象数组httpHeaders: - name: headerNamevalue: headerValue# 请求方式. HTTP 或 HTTPS. 默认 HTTPscheme: HTTP

liveness

既存活探测, 在容器执行的这段时间, 探测容器是否存活, 若已经无法提供服务, 则需要重启容器. 定义在配置文件的pod.spec.containers.livenessProbe位置. 其配置项与readiness相同, 不再赘述. 默认success

在容器运行过程中, 可能容器还活着, 但里面提供服务的进程已经死了(例如死锁). 这时容器其实已经无法对外提供服务了. 需要这样一种机制来检测是否还能正常提供服务.

注意, liveness并不是在readiness探测完毕后才会启动.而是几乎同时启动, 而liveness探测失败后, 会导致容器重启, 因此livenessinitialDelaySeconds配置就需要稍微花点心思了, 要延时一些时间, 等待服务启动成功后再开始. 否则可能导致readiness还没有完成探测任务, 就被liveness探测失败而重启了.

startup

上面说livenessreadiness是同时运行的, 通过配置livenessinitialDelaySeconds参数来等待. 但对于一些服务, 我们并不能确定其启动需要多久呀, 如果一味延长等待时间就太不划算了.

startup就是为了解决livenessreadiness执行顺序的问题, 将服务就绪探测和服务的存活探测彻底分开. 定义在配置文件的pod.spec.containers.startupProbe位置, 探针项与readiness相同.

startup探针会在探测成功后, 再将探测任务交由后续的探测任务. 默认success

所以一般使用livenessstartup配合探测即可, readiness貌似没有什么用武之地了.

原文链接: https://hujingnb.com/archives/707

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wait函数的作用

前言 在编写C程序的时候, 通过fork函数来创建新的进程, wait函数来等待子进程结束. 那么就有一个问题了, 什么情况下父进程需要等待子进程结束后继续执行呢? 如果需要等待子进程结束, 那直接将操作放到父进程执行不就醒了么? 反正等着也是等着. 当然, 还有有一种情况, 任务…

OAuth1.0介绍

背景 为什么需要OAuth授权呢? 最典型的应用场景就是第三方登录了, 我们开发了一个网站希望用户可以QQ登录, 但是怎么能拿到用户的 QQ 信息呢? 用户将 账号密码告诉我们当然可以, 但是这样有如下隐患: 我们拿到了用户的密码, 这样很不安全. 而且任意一个应用被黑, 所有相关…

PHP 数组的内部实现

前言 这几天在翻github的时候, 碰巧看到了php的源码, 就 down 下来随便翻了翻. 地址: https://github.com/php/php-src 那么PHP中什么玩意最引人注目嘞? 一定是数组了, PHP中的数组太强大了, 于是就想着不如进去看看数组的实现部分. 这篇文章打算全程针对代码进行解读了. 以…

base64编码原理

引出 众所周知, ASICC编码共127个, 使用了7个bit进行编码. 而文件在存储的时候是以 字节为单位, 也就是8bit. 这就难免导致有一部分编码是没有定义在ASICC编码中的. 而在网络中传输二进制数据的时候(字符串本质上也是二进制数据嘛), 如果直接传输比特流, 倒也不是不可以, 只是…

页面加载速度-合并资源文件

前言 一直觉得自己的博客站点页面加载很慢, 就想着去优化一下. 呐, 下图是一次文章页面的加载, 需要2.5s. 其中 js 文件就有18个. 众所周知, 浏览器对资源文件的并行下载数量是有限制的(不同浏览器限制不同). 也就是说, 这18个 js 文件是无法同时下载的, 再说了, 页面中还有其…

hbase/thrift/go连接失败

问题 在通过Go连接hbase的过程中, 发现 get操作可以查到数据, 但是scanner命令访问数据失败, 也没有报错, 就是单纯的查不到数据. 而且Python PHP都一切正常. 这里简单复述一下我出现问题的情况, 安装过程和网上大部分内容一致, 这里简单列一下, 只是为了查询问题时参考安装过…

printf缓冲区踩坑

问题 碰到了这样一段代码(经过简化的): #include "stdio.h" #include "unistd.h" #include "sys/wait.h"int main(){fork();printf("1\n");fork();printf("1\n");wait(NULL);return 0; }这里我们简单算一下, 结果会打印几…

进程切换时是如何保存上下文的

前言 当前操作系统大部分采用分时的进程调度, 既每个进程运行一小段时间, 然后切换到下一个进程运行, 依次往复. 当进程运行的时候是独占CPU的, 此时操作系统是无法强行介入的, 为了将执行权让出来, 就需要硬件的配合了. 硬件每个一个时钟周期(比如10ms), 就会产生一个时钟中…

GO/testing包

前言 之前在写GO单元测试的时候, 使用了这个结构testing.T. 进来无事翻了翻, 发现testing包中还有一些其他的结构体, 想来是不同用处. 没想到GO的testing包竟然默默做了这么多支持, 之前竟然不知道. 在testing包中包含一下结构体: testing.T: 这就是我们平常使用的单元测试t…

CPU的分支预测

前言 最近在进行性能调优的时候, 碰到了这样的一段代码(为了展示问题而简化的代码): <?php // 第一次运行 $start microtime(true); for ($i 0; $i < 100; $i) {for ($j 0; $j <1000; $j) {for ($k 0;$k < 10000; $k) {}} } $end microtime(true); echo fi…

PHP获取Opcode及C源码

是什么 在开始之前, 必须要先介绍一下Opcode是什么. 众所周知, Java在执行的时候, 会将.java后缀的文件预先编译为.class字节码文件, JVM加载字节码文件进行解释执行. 而字节码文件存在的意义, 就是为了加速执行. 那么PHP的Opcode与之类似, 也是从.php文件到执行的过程中, 所…

PHP require/include 区别

前言 在PHP中, 载入文件可以选择使用require, 也可以使用include, 那么那他们有什么区别呢? 看了网上的一些文章, 说他们使用场景不同, require一般在文件开头引入文件, include一般在函数中动态引入文件. 但是我觉得并不是这么简单, require是作为语言结构(关键字)出现的, …

Golang 接口原理

问题 小提示, 若想直接查看原理, 可从接口原理开始查看. 有这样一段GO代码: func main() {var obj interface{}fmt.Printf("obj nil. %b\n", obj nil)type st struct{}var s *stobj sfmt.Printf("s nil. %b\n", s nil)fmt.Printf("obj nil. …

三星识别文字_比亚迪电子助力三星Galaxy Note 10系列霸气首发!

三星有子初长成气宇轩昂 秀美俊逸减之一分则嫌柔增之一分则嫌赘2019年8月7日于纽约巴克莱发布Galaxy Note 10系列用简约 重构美三星Galaxy Note 10与Galaxy Note 10分别搭载了6.3英寸和6.8英寸的超感官全视曲面屏&#xff0c;均采用单摄挖孔屏&#xff0c;开孔位于屏幕正上方。…

lisp 设计盘形齿轮铣刀_机械设计基础——周转轮系传动比的计算

点击上方蓝色字体&#xff0c;关注我们15(视频来源于网络&#xff0c;仅供学习交流&#xff0c;侵权请联系删除)机械计重点学习指导机械原理全书重点提要轴的结构改错机械设计作业集01机械设计作业集02机械设计作业集答案机械原理作业集机械原理作业集答案轴的强度计算院校推荐…

b+树阶怎么确定_B站公布年度弹幕,这个排名我不太服气

也忘记了是从什么时候开始&#xff0c;B站开始公布自己的年度弹幕了&#xff0c;今年的年度弹幕排名前五的分别是&#xff1a;爷青回、武汉加油、有内味了、双厨狂喜、禁止套娃。话说今年真的是不容易啊&#xff0c;过年那段时间以及上半年不会忘记那一幕幕感人深邃的瞬间&…

css打印适应纸张_从生态平衡到打印机故障分析

生态平衡(ecological equilibrium)是指在一定时间内生态系统中的生物和环境之间、生物各个种群之间&#xff0c;通过能量流动、物质循环和信息传递&#xff0c;使它们相互之间达到高度适应、协调和统一的状态。也就是说当生态系统处于平衡状态时&#xff0c;系统内各组成成分之…

html5调用系统声音1s响一次_20款奔驰GLC260提车改柏林之声音响,音乐诉请,为爱发声!...

奔驰GLC车型在2020上半年可谓是风生水起&#xff0c;尤其是2020年1-5月份的豪华品牌SUV排名中&#xff0c;奔驰GLC车型以58982的销售量遥遥领先&#xff0c;同比增长了2%&#xff0c;奔驰GLC5月销量高达15275辆&#xff0c;再次打败老对手奥迪Q5L&#xff0c;夺得豪华SUV销量冠…

kotlin将对象转换为map_将网站转换为Photoshop文档

WebToLayers是一款能够帮助大家将网页转换成图像格式的软件&#xff0c;能够Web页面转换成PNG&#xff0c;JPG以及PSD格式的图片。当网页转换为PSD的时候&#xff0c;网页的各个要素都会自动转换为相应的图层&#xff0c;使得大家能够对PSD格式的网页进行设计与管理。WebToLaye…

centos更换网卡后怎么更新配置_CentOS安装

服务器使用的Linux操作系统都使用了CentOS来进行安装&#xff0c;CentOS是一个开源的Linux发行版&#xff0c;具有很好的稳定性和更多的可扩展行。为了能够正常使用Docker&#xff0c;我们将使用CentOS7及以上版本。​下载地址&#xff1a;https://www.centos.org/download/ ​…