k8s之pod生命周期

复制代码
一.pod生命周期:pod对象从创建开始到终止的过程
	1.作用:
		复杂服务的启动顺序,依赖关系,
		容器服务启动前的相关操作,配置文件生成,依赖服务检测等...
	2.生命周期流程:
		初始化容器--主容器--启动后回调函数-->启动,生命,就绪探针-->关闭前回调函数

		初始化容器执行:执行应用程序启动前的初始化任务,如加载配置文件、检查网络连接等。
		主容器启动:初始化成功后,运行应用程序,提供所需的服务
		启动后回调函数执行:执行一些初始化后设置的任务
		启动探针:检测容器是否已成功启动,并完成初始化,检测不成功重启容器
		生命探针:检测容器内的主进程是否仍在健康运行,在容器全生命周期运行
		就绪探针:检测容器是否已准备好对外提供服务,探测失败容器将拒绝Pod所提供的服务,只会等待,在容器全生命周期运行
		关闭前回调函数执行:清理资源、保存状态或通知其他服务等

	3.容器init初始化
		kubectl get pods -w  //状态监测
		(1)初始化容器流程
				web1   0/1     Pending          
				web1   0/1     Pending              
				web1   0/1     Init:0/1           
				web1   0/1     Init:0/1        
				web1   0/1     Init:0/1          
				web1   0/1     PodInitializing     
				web1   1/1     Running 
	   
		(2)初始化容器编写
				---
				kind: Pod
				apiVersion: v1
				metadata:
				        name: web1
				spec:
				        initContainers:
				        - name: task1
				          image: myos:latest
				          command: ["sh"]
				          args:
				          - -c
				          - |
				            id=${RANDOM}
				            echo "id is :${id}"
				            sleep 2
				            exit $((id%2))
					 - name: task2
				        containers:
				        - name: web
				          image: myos:httpd

	4.容器探针
		(1)探针检查探测方式
			tcpSoceket:对指定的ip地址上的端口执行TCP检查,三次握手,端口是open被认为诊断成功.
			httpGet:使用HTTP协议诊断服务状态,响应状态码大于等于200小于400认为成功.
			exec:在容器内执行指定命令检测,
		(2)探测结果
			Success:成功
			Failure:失败
			Unknown:未知
		
		(3)启动探针(startupProbe):容器出现故障,启动探针会重新触发执行
			spec:
			  containers:
			  - name: web
			    image: myos:httpd
			    startupProbe:                 # 启动探针
			      initialDelaySeconds: 60     # 首次检查延时
			      periodSeconds: 10           # 检查间隔
			      failureThreshold: 6         # 可失败的次数
			      tcpSocket:                  # 使用 tcp 协议检测
			        port: 80                  # 端口号	
		
		(4)生命探针(livenessProbe):检查某个核心应用是否正常运行
			spec:
			  containers:
			  - name: web
			    image: myos:httpd
			    livenessProbe:                # 定义存活探针
			      timeoutSeconds: 3           # 服务影响超时
			      httpGet:                    # 使用 HTTP 协议检测
			        path: /info.php           # 请求的 URL 路径,检测的资源
			        port: 80                  # 服务端口号
		
		(5)就绪探针(readinessProbe):利用脚本监测主从集群的同步状态
			spec:
			  containers:
			  - name: web
			    image: myos:httpd
			    readinessProbe:               # 定义就绪探针
			      failureThreshold: 3         # 失败确认次数
			      periodSeconds: 10           # 检测间隔
			      exec:                       # 执行命令进行检测
			        command:                  # 检测命令
			        - sh
			        - -c
			        - |
			          read ver </var/www/html/version.txt
			          if (( ${ver:-0} > 2 ));then
			             res=0
			          fi
			          exit ${res:-1}          # 版本大于 2 成功,否则失败
        
	5.容器启动后,关闭前回调函数(lifecycle)
		spec:
		  containers:
		  - name: web
		    image: myos:httpd
		    lifecycle:                    # 定义启动后事件处理函数
		      postStart:
		        exec:
		          command:
		          - sh
		          - -c
		          - |
		            echo "自动注册服务" |tee -a /tmp/web.log
		            sleep 10
		      preStop:                    # 定义关闭前事件处理函数
		        exec:
		          command:
		          - sh
		          - -c
		          - |
		            echo "清除已注册的服务" |tee -a /tmp/web.log
		            sleep 10

一.pod生命周期:pod对象从创建开始到终止的过程

1.作用:

复杂服务的启动顺序,依赖关系,

容器服务启动前的相关操作,配置文件生成,依赖服务检测等...

2.生命周期流程:

初始化容器--主容器--启动后回调函数-->启动,生命,就绪探针-->关闭前回调函数

初始化容器执行:执行应用程序启动前的初始化任务,如加载配置文件、检查网络连接等。

主容器启动:初始化成功后,运行应用程序,提供所需的服务

启动后回调函数执行:执行一些初始化后设置的任务

启动探针:检测容器是否已成功启动,并完成初始化,检测不成功重启容器

生命探针:检测容器内的主进程是否仍在健康运行,在容器全生命周期运行

就绪探针:检测容器是否已准备好对外提供服务,探测失败容器将拒绝Pod所提供的服务,只会等待,在容器全生命周期运行

关闭前回调函数执行:清理资源、保存状态或通知其他服务等

3.容器init初始化

kubectl get pods -w //状态监测

(1)初始化容器流程

web1 0/1 Pending

web1 0/1 Pending

web1 0/1 Init:0/1

web1 0/1 Init:0/1

web1 0/1 Init:0/1

web1 0/1 PodInitializing

web1 1/1 Running

(2)初始化容器编写


kind: Pod

apiVersion: v1

metadata:

name: web1

spec:

initContainers:

  • name: task1

image: myos:latest

command: ["sh"]

args:

  • -c

  • |

id=${RANDOM}

echo "id is :${id}"

sleep 2

exit $((id%2))

  • name: task2

containers:

  • name: web

image: myos:httpd

4.容器探针

(1)探针检查探测方式

tcpSoceket:对指定的ip地址上的端口执行TCP检查,三次握手,端口是open被认为诊断成功.

httpGet:使用HTTP协议诊断服务状态,响应状态码大于等于200小于400认为成功.

exec:在容器内执行指定命令检测,

(2)探测结果

Success:成功

Failure:失败

Unknown:未知

(3)启动探针(startupProbe):容器出现故障,启动探针会重新触发执行

spec:

containers:

  • name: web

image: myos:httpd

startupProbe: # 启动探针

initialDelaySeconds: 60 # 首次检查延时

periodSeconds: 10 # 检查间隔

failureThreshold: 6 # 可失败的次数

tcpSocket: # 使用 tcp 协议检测

port: 80 # 端口号

(4)生命探针(livenessProbe):检查某个核心应用是否正常运行

spec:

containers:

  • name: web

image: myos:httpd

livenessProbe: # 定义存活探针

timeoutSeconds: 3 # 服务影响超时

httpGet: # 使用 HTTP 协议检测

path: /info.php # 请求的 URL 路径,检测的资源

port: 80 # 服务端口号

(5)就绪探针(readinessProbe):利用脚本监测主从集群的同步状态

spec:

containers:

  • name: web

image: myos:httpd

readinessProbe: # 定义就绪探针

failureThreshold: 3 # 失败确认次数

periodSeconds: 10 # 检测间隔

exec: # 执行命令进行检测

command: # 检测命令

  • sh

  • -c

  • |

read ver </var/www/html/version.txt

if (( ${ver:-0} > 2 ));then

res=0

fi

exit ${res:-1} # 版本大于 2 成功,否则失败

5.容器启动后,关闭前回调函数(lifecycle)

spec:

containers:

  • name: web

image: myos:httpd

lifecycle: # 定义启动后事件处理函数

postStart:

exec:

command:

  • sh

  • -c

  • |

echo "自动注册服务" |tee -a /tmp/web.log

sleep 10

preStop: # 定义关闭前事件处理函数

exec:

command:

  • sh

  • -c

  • |

echo "清除已注册的服务" |tee -a /tmp/web.log

sleep 10

相关推荐
waving-black14 分钟前
利用frp和腾讯云服务器将内网暴露至外网(内网穿透)
linux·服务器·腾讯云·frp·内网穿透
stormsha25 分钟前
Linux中su与sudo命令的区别:权限管理的关键差异解析
linux·运维·服务器·鸿蒙系统·ux·batch命令
新加坡内哥谈技术1 小时前
Meta计划借助AI实现广告创作全自动化
运维·人工智能·自动化
zyjyyds1131 小时前
win11系统 Docker Desktop 突然提示Docker Engine stopped解决情况之一
运维·docker·容器
Altairr1 小时前
Docker基础(一)
运维·docker·容器·eureka
搬运Gong1 小时前
Dockerfile使用与最佳实践
docker·容器·虚悬镜像
筏.k1 小时前
grep、wc 与管道符快速上手指南
linux
文牧之1 小时前
PostgreSQL 的扩展pageinspect
运维·数据库·postgresql
Johny_Zhao1 小时前
华为MAAS、阿里云PAI、亚马逊AWS SageMaker、微软Azure ML各大模型深度分析对比
linux·人工智能·ai·信息安全·云计算·系统运维
CodeOfCC2 小时前
c语言 封装跨平台线程头文件
linux·c语言·windows