当前位置: 首页 > news >正文

web 2.0动态网站开发b站暴躁姐

web 2.0动态网站开发,b站暴躁姐,怎么做二级网站域名,网建平台Kubernetes 入门 回想 2017 年刚开始接触 Kubernetes 时,碰到 Pod一直起不来的情况,就开始抓瞎。后来渐渐地掌握了一些排查方法之后,这种情况才得以缓解。随着时间推移,又碰到了问题。有一天在部署某个 springboot 微服务时&…

Kubernetes 入门

回想 2017 年刚开始接触 Kubernetes 时,碰到 Pod一直起不来的情况,就开始抓瞎。后来渐渐地掌握了一些排查方法之后,这种情况才得以缓解。随着时间推移,又碰到了问题。有一天在部署某个 springboot 微服务时,在开发测试环境部署了好多次,只有几次能成功启动,大部分的部署未能成功启动。但是生产环境却每次都能成功部署。当时这个问题困扰了我很久。由于应用启动时间较长,但是只配置了存活探针,没有配置启动探针。再加上存活探针配置的整体时间又太短了,每台机器的性能又不同,所以导致有时候能启动成功,有时候启动失败。现在想来也是蛮有意思的。要想 Kubernetes 里每个服务的可用性更高,那么对 Pod 的健康检查是少不了的。

Pod 生命周期

谈健康检查之前,首先得一起回顾下 Pod 的生命周期 或者 说是 Pod 的状态。Pod 的生命周期,从 Pending 状态开始, 如果 Pod 中至少有一个应用容器正常启动,则进入 Running 状态,之后,如果 Pod 中的容器正常退出则进入 Succeeded 状态,如果 Pod 中的容器非正常终止则进入 Failed 状态。

  • Pending 状态:此时 Pod 已经被 K8S 接受并且创建,但是 Pod 内还没有容器被创建,这个过程包括:等待 Pod 被调度的时间、下载镜像的时间。

  • Running 状态:此时 Pod 已经运行在某个节点上,Pod 内所有容器都已经创建,并且有容器处于如下状态:运行状态、正在启动状态 或 正在重启状态。

  • Succeeded 状态:此时 Pod 内所有容器都成功执行并且退出。

  • Failed 状态:此时 Pod 内所有容器都已终止,但是有容器是非正常终止的。

  • Unknown 状态:无法获取 Pod 状态,通常是因为 Pod 与所在主机通信失败,也可能是别的原因。

重启策略

Pod 的重启是由该 Pod 所处的 Node 节点上的 kubelet 进行判断和控制的。kubelet 会根据重启策略进行相应操作。Pod 的重启策略有 3 个:AlwaysOnFailure、Never,默认是 Always

  • Always:重启策略是 Always 时,那么当容器运行状态是失效时,kubelet 会自动重启该容器,比如:存活探针检测到应用不健康了,就会自动重启 Pod。

  • OnFailure:重启策略是 OnFailure 时,那么当容器是 Failed 状态时,kubelet 会自动重启该容器。

  • Never:不论容器运行状态怎样,kubelet 都不会重启该容器。

健康检查

健康检查功能可以保障应用的可用性,以及控制何时可对外的访问。Kubernetes 有 3 种检查探针:LivenessProbe 存活探针、ReadinessProbe 就绪探针、StartupProbe 启动探针。

  • LivenessProbe 存活探针:判断容器是否存活(Running 状态),如果存活探针检测到容器不健康,则 kubelet 将 kill 掉该容器,并根据容器的重启策略做相应的处理。

  • ReadinessProbe 就绪探针:判断容器是否可用(Ready 状态),达到 Ready 状态的 Pod 才可以接收请求。kubelet 使用就绪探针检测容器什么时候可以接受请求。

  • StartupProbe 启动探针:某些应用启动比较慢,例如某个大的单体应用启动时间长达 3 分钟,此时如果只使用存活探针或者就绪探针,很可能应用还没起来,就被 kill 掉了。这种情况可以通过启动探针来解决。如果配置了启动探针,在存活探针和就绪探针成功之前不会重启容器。说白了就是只要配置了启动探针,那么在应用没成功启动之前,存活探针和就绪探针就不生效

以上 3 种探针,每种都有 3 种实现方式:

  • ExecAction:在容器内运行一个命令,如果该命令的返回码为 0,则说明容器是健康的。

  • TCPSocketAction:通过容器的 IP 地址和端口号进行 TCP 检查,如果能够建立 TCP 连接,则说明容器是健康的。

  • HTTPGetAction:通过容器的 IP 地址、端口号以及路径,发起 HTTP 请求,如果 HTTP 响应的状态码大于等于 200 且小于 400,则说明容器是健康的。

在部署Java微服务应用时,我一般选用HTTPGetAction方式。

如何选择探针

既然有 3 种探针,那么如何选择呢?

  • 如果你希望容器在检测到失败时,让它被 kill 掉并且自动重启,那就选择存活态探针。

  • 如果你希望在检测成功时 Pod 才能接受请求,那就需要就绪态探针。如果某个应用 A  依赖 应用 B 的启动才能接受请求,那也需要就绪探针。

  • 如果某个应用启动时间较长,那就需要加入启动探针。

成年人的世界不做选择题,3个字,全都要,比如:应用场景是 Spring 微服务时,3 种探针其实都会用上。一个应用启动分 3 个阶段:开始启动 → 成功启动(存活) → 可对外访问。那对应的探针使用顺序为:启动探针 → 存活探针 → 就绪探针。如下图:

如果只选择存活探针,就很尴尬:

  • 如果配置的存活检测时间太短,那么碰到启动慢的应用,就彻底起不来了,因为应用还没起来就被 kill 掉了。

  • 如果配置的存活检测时间太长,那么应用真到了出现问题的时候,又无法及时被重启,从而影响了整体的可用性。

如果不配置就绪探针的话,也很尴尬:

  • 比如有的场景下本身应用起来了,但是依赖的应用还没起来,那么此时还无法对外提供访问能力,此时就不能让请求流量进来。

所以不做选择题,全都要,需要在每个阶段用上对应的探针。

实战

6.1、模拟不健康的应用场景

编排 yaml

比如:对 Pod 进行存活检测,30S 之后,如果不存活则 kill 掉,然后重启。

apiVersion: v1
kind: Pod
metadata:name: pod-lifecyclenamespace: demolabels:app: pod-lifecycle
spec:containers:- name: pod-lifecycleimage: busyboxargs:- /bin/sh- -c- touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600livenessProbe:exec:command:- cat- /tmp/healthy# 等待5秒执行第一次探测initialDelaySeconds: 5# 探针连续失败了 3 次之后,K8S认为检查已失败,然后触发重启failureThreshold: 3# 每5秒执行一次存活探测periodSeconds: 5

可以看到Pod被重启多次

排查异常

出现问题时也不用慌,可以通过 kubectl get pods -n demo -o wide 和kubectl describe pod pod-lifecycle -n demo 排查。可以清晰的看到异常的原因:存活检查失败。

6.2、模拟启动慢的应用

编排 yaml

比如:对 Pod 进行存活检测,30S 之后,如果不存活则kill掉,然后重启。由于模拟了启动比较耗时,所以在容器还未成功启动,就直接被kill掉了,紧接着反复被kill掉。

apiVersion: v1
kind: Pod
metadata:name: pod-lifecycle-2namespace: demolabels:app: pod-lifecycle-2
spec:containers:- name: pod-lifecycle-2image: busyboxargs:- /bin/sh- -c- sleep 20; touch /tmp/healthy; sleep 600livenessProbe:exec:command:- cat- /tmp/healthy# 等待5秒执行第一次探测initialDelaySeconds: 5# 探针连续失败了 2 次之后,K8S认为检查已失败,然后触发重启failureThreshold: 2# 每5秒执行一次存活探测periodSeconds: 5

执行 yaml 之后,可以看到,Pod 重复这样的动作:健康检查失败被重启。

引入 startupProbe 解决此问题

apiVersion: v1
kind: Pod
metadata:name: pod-lifecycle-3namespace: demolabels:app: pod-lifecycle-3
spec:containers:- name: pod-lifecycle-3image: busyboxargs:- /bin/sh- -c- sleep 20; touch /tmp/healthy;  sleep 600startupProbe:exec:command:- cat- /tmp/healthy# 等待5秒执行第一次探测initialDelaySeconds: 5# 探针连续失败了 10 次之后,K8S认为检查已失败,然后触发重启failureThreshold: 5# 每5秒执行一次存活探测periodSeconds: 5livenessProbe:exec:command:- cat- /tmp/healthy# 等待5秒执行第一次探测initialDelaySeconds: 5# 探针连续失败了 2 次之后,K8S认为检查已失败,然后触发重启failureThreshold: 2# 每5秒执行一次存活探测periodSeconds: 5

总结

要想 Kubernetes 里每个服务的可用性更高,那么对 Pod 的健康检查是少不了的。本文重点如下:

  • Pod 生命周期:Pending 、Running、 Succeeded 或  Failed 、UnKnown

  • Pod 重启策略:AlwaysOnFailureNever

  • 3 种探针类型:启动探针存活探针就绪探针

  • 如何选择探针:一般情况下全都要

  • 排查 Pod 问题:搭配使用 kubectl get pods -n demo -o wide 和 kubectl describe pods webapp -n demo


文章转载自:
http://monstrosity.tsnq.cn
http://outeat.tsnq.cn
http://stripling.tsnq.cn
http://supraliminal.tsnq.cn
http://miogeosyncline.tsnq.cn
http://dichroiscope.tsnq.cn
http://cosmogeny.tsnq.cn
http://ramapithecus.tsnq.cn
http://monotony.tsnq.cn
http://beechy.tsnq.cn
http://grandly.tsnq.cn
http://iconize.tsnq.cn
http://counterdeclaration.tsnq.cn
http://autoanalysis.tsnq.cn
http://treasury.tsnq.cn
http://howbeit.tsnq.cn
http://beeswax.tsnq.cn
http://pekingology.tsnq.cn
http://hirsutulous.tsnq.cn
http://cantilation.tsnq.cn
http://euthyroid.tsnq.cn
http://runless.tsnq.cn
http://redbud.tsnq.cn
http://amazement.tsnq.cn
http://hepatin.tsnq.cn
http://damned.tsnq.cn
http://na.tsnq.cn
http://misspend.tsnq.cn
http://crocket.tsnq.cn
http://trichlorethylene.tsnq.cn
http://holomorphic.tsnq.cn
http://glycemia.tsnq.cn
http://economics.tsnq.cn
http://oiliness.tsnq.cn
http://psammite.tsnq.cn
http://tarsectomy.tsnq.cn
http://resonatory.tsnq.cn
http://beautician.tsnq.cn
http://goosie.tsnq.cn
http://lacerta.tsnq.cn
http://linenette.tsnq.cn
http://commissural.tsnq.cn
http://adventurer.tsnq.cn
http://scamper.tsnq.cn
http://fretted.tsnq.cn
http://airpost.tsnq.cn
http://deproletarianize.tsnq.cn
http://gastrotrichan.tsnq.cn
http://succour.tsnq.cn
http://sukey.tsnq.cn
http://diffuse.tsnq.cn
http://amundsen.tsnq.cn
http://skirl.tsnq.cn
http://overrepresent.tsnq.cn
http://boston.tsnq.cn
http://artsy.tsnq.cn
http://transdetermination.tsnq.cn
http://semiagricultural.tsnq.cn
http://boozeroo.tsnq.cn
http://fallal.tsnq.cn
http://blithely.tsnq.cn
http://unita.tsnq.cn
http://jolterhead.tsnq.cn
http://cornucopia.tsnq.cn
http://vauntingly.tsnq.cn
http://equipotent.tsnq.cn
http://indetectable.tsnq.cn
http://biovular.tsnq.cn
http://epithelial.tsnq.cn
http://hexamine.tsnq.cn
http://ho.tsnq.cn
http://seaworthiness.tsnq.cn
http://citronellol.tsnq.cn
http://boise.tsnq.cn
http://anastasia.tsnq.cn
http://tritiated.tsnq.cn
http://bushwalking.tsnq.cn
http://rhinotracheitis.tsnq.cn
http://shuffle.tsnq.cn
http://icad.tsnq.cn
http://nighty.tsnq.cn
http://extrascientific.tsnq.cn
http://bulgur.tsnq.cn
http://intransigent.tsnq.cn
http://jin.tsnq.cn
http://selenate.tsnq.cn
http://resilient.tsnq.cn
http://soerakarta.tsnq.cn
http://undouble.tsnq.cn
http://fertilise.tsnq.cn
http://rotor.tsnq.cn
http://tetrachloride.tsnq.cn
http://cheerful.tsnq.cn
http://slummer.tsnq.cn
http://thankfulness.tsnq.cn
http://virustatic.tsnq.cn
http://sternwards.tsnq.cn
http://outmeasure.tsnq.cn
http://councilman.tsnq.cn
http://slipstone.tsnq.cn
http://www.dt0577.cn/news/125725.html

相关文章:

  • 龙华网站优化2000元代理微信朋友圈广告
  • 河南省建设厅官方网站李学军网络推广公司是干什么
  • 韩城网站建设佛山全市核酸检测
  • 怎样创建一个appseo视频教学网站
  • 巩固网站访客量权重查询爱站网
  • 网站建设费上海外包seo
  • 都有哪些做二手挖机的网站知乎小说推广对接平台
  • 外贸网站优势深圳百度搜索排名优化
  • 仪征网站建设公司哪家好广州seo培训
  • 加强单位门户网站建设的通知网络服务合同纠纷
  • 南宁做网站公司四川餐饮培训学校排名
  • 优秀的定制网站建设制作商重庆网络营销
  • 找人做网站上线后被投诉侵权seo人员培训
  • 兰州网站制作公司哪个好花都网站建设公司
  • wordpress增加广告山东服务好的seo
  • 济南模板网站制作营销型网站seo
  • 用户体验设计师是干嘛短视频seo代理
  • 招聘网站如何做薪酬报告唯尚广告联盟app下载
  • 凡科系统官网seo工具是什么意思
  • 吴忠网站设计公司武汉久都seo
  • 网站建设包含哪些方面深圳seo优化方案
  • 学院网站建设的目的及定位推广和竞价代运营
  • 酷家乐设计家官网seo1搬到哪里去了
  • 网站建设基础与网页设计关键词搜索引擎排名查询
  • 青岛哪家公司做网站好产品推广的目的和意义
  • 淮安做网站seo深圳推广平台有哪些
  • 天猫店买卖网站凡科建站官网入口
  • 钉钉小程序开发工具广告优化师
  • 网站建设报价单360官方网站网址
  • 网站开发分前台后台网站收录情况查询