kubernetes基础知识之容器生命周期和探针

B站影视 2025-01-26 08:20 2

摘要:kubernetes集群default命名空间有一个kubernetes服务,所有的pod要想访问api-server,都必须要访问这个服务。

kubernetes svc的FQDN:{servicename}.{namespace}.svc.cluster.local

kubernetes集群default命名空间有一个kubernetes服务,所有的pod要想访问api-server,都必须要访问这个服务。

查看pod的事件:

kubectl describe pod $pod_name

可以查看到pod的Events相关事件。

探针是kubelet对容器执行的定期诊断。要执行诊断,kubelet调用由容器实现的Handler处理器,这个kubelet是pod所在的当前worker node节点的kubelet,每个worker node节点上都有kubelet。有三种类型的处理程序:ExecAction、TCPSocketAction、HTTPGetAction。

ExecAction:在容器内执行指定命令。如果命令退出时返回码为0,则认为诊断成功。执行的返回码是非0,就认为诊断是失败的。

tcpSocketAction:对指定端口上的容器的IP地址进行TCP检查。如果端口打开,就认为是诊断成功。它会对定义的端口做TCP访问,如果TCP连接成功,就代表检测成功。如果TCP 端口连接拒绝或者失败,就代表这一次检测是错误的。

HTTPGetAction:对指定的端口和路径上的容器的IP地址执行HTTP Get请求。如果响应的状态码大于等于200并且小于400,那么诊断被认为是成功的。它会根据当前访问的状态码去做判断,如果大于等于200且小于400,代表的含义是成功。除此以外,就代表检测是失败的。

每次探针的探测都会获得三种结果之一:

成功:容器通过诊断

失败:容器未通过诊断

未知:诊断失败,但是不会采取任何行动。这种情况对应着kubelet错过返回状态码的接收。

鲁棒性:程序的鲁棒性越高,程序越稳定。

探针的分类分成三种:

startupProbe:启动探针

livenessProbe: 存活探针

readinessProbe: 就绪探针

只有启动探测startupProbe执行完成之后,存活探测liveness Probe和就绪探测readiness Probe 才会开始执行。

存活探针livenessProbe: pod容器处在Running运行中,并且可以给客户提供正常访问。

就绪探测readiness Probe:pod的状态必须是就绪的,否则不允许客户进行访问。

就绪探测readiness Probe:kubernetes通过添加就绪指针,解决尤其是扩容的时候,提供给客户的服务都是可用的。

负载均衡可以用nginx、lvs,还可以用云环境中的LoadBalancer去做。

标签选择器做的是一个子集匹配。

Service的条件:

①:标签做子集匹配

②:pod必须是就绪的。

Deployment是一种pod的控制器。在pod的控制器里面可以定义创建的pod类型和pod的数量。deployment控制器可以按照要求,创建多个pod。

如果把多个pod提供给客户访问的话,需要创建负载均衡器。可以用nginx、lvs或者云厂商的loadBalancer去做负载均衡器。

在kubernetes集群里面,提供了一种更简化的负载均衡方式,是一种资源,这个资源叫service服务。service资源在创建的时候,需要指定标签lable selector标签选择器,标签选择器做的是子集匹配。service会调用ipvs,实现负载均衡的创建。

就绪探测readiness probe 如果发现pod是未就绪的状态,那么就不会被service以负载均衡的方案提供给客户访问。当pod是就绪状态之后,就可以让service以负载均衡的方式提供给客户访问。

就绪探测的参数说明:

initialdelayseconds:容器启动后要等待多少秒后探针开始工作,单位是秒。默认值是0秒,最小值是0。

periodSeconds:执行探测的时间间隔(单位是秒,默认是10s,单位是秒,最小值是1。

timeoutSeconds:探针执行检测请求后,等待响应的超时时间。默认为1s,单位是秒,最小值为1。TCP访问、脚本超时、HTTP的访问,会有一个超时时间。所有的探测命令、执行的探测脚本,必须它所消耗资源的量级足够小,才不会影响当前的真正的应用。

successThreshold:探针检测失败后认为成功的最小连接成功次数。默认为1,必须为1才能激活和启动,最小值为1。

failureThreshold:探测失败的重试次数,重试一定次数后将认为失败,默认值是3,最小值是1。

就绪探测readiness probe:如果pod内的容器不添加就绪探测,那么默认就是就绪探测。如果添加了就绪探测,只有就绪检测通过以后,才能标记修改为就绪状态。

当前pod内的所有容器都就绪,才标记当前pod就绪。

三种动作类型:TcpSocket、HTTP Get、Exec执行命令的方式,如果成功,将当前的容器标记为就绪;如果失败,那么静默。因为容器本身就是未就绪的状态,就绪检测又没通过,所以就静默。如果是未知的状态,那么依然静默,不修改原本的状态。

删除pod:

kubectl delete pod $pod_name -n $namespace

删除所有的pod:

kubectl delete pod --all

查看所有服务service:

kubectl delete svc $service_name

删除服务的时候不要执行:

kubectl delete svc --all

因为有一个名字为kubernetes的服务需要被其它的pod所访问。

如果这个kubernetes服务被删除之后,一段时间内被自动恢复。

创建pod:

kubectl create -f xxx.pod.yaml

查看pod标签:

kubectl get pod --show-labels

kubernetes创建服务service:

kubectl create svc clusterip myapp --tcp=80:80

创建服务的时候,有一个默认值的存在,如果创建的服务名叫myapp,那么它默认就会去匹配app=myapp标签的pod,通过标签匹配到pod上,形成负载均衡。

--tcp代表是一个tcp类型的负载均衡集群。

前一个端口代表集群访问的端口,后一个端口代表真实服务器的端口。

服务service的CLUSTER_IP是我们当前负载均衡的VIP,我们叫虚拟IP或者集群IP。用户只要访问这个负载均衡的VIP,就可以负载到后端的两个真实服务器。因为通过服务的名字,它可以默认匹配app等于当前service名字做标签的pod,并且要保证pod是就绪状态。

执行测试:

curl VIP(负载均衡的VIP、虚拟IP或者集群IP)

服务的两个条件:

①:标签的子集匹配

②:pod是就绪状态

查看容器标签:

兰花

鼓励的话语:情商可能让你一时站到高处,但只有逆商才能保证你一辈子都站在高处,跌倒了,再爬起来。没有刻苦修炼、百炼成钢的意志,就难有大气;没有坚韧不拔、锲而不舍的毅力,就难有大气;没有雄厚的知识底蕴和高瞻远瞩的目光,就难有大气;没有藐视困难、敢打必胜的自信,就难有大气。大气才是大格局、大气魄!

来源:嘉晴教育分享

相关推荐