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

相关推荐
KeyPan12 分钟前
【Ubuntu与Linux操作系统:十二、LAMP平台与PHP开发环境】
android·java·linux·运维·服务器·ubuntu
NightReader22 分钟前
Ubuntu 24.04蓝牙失效之复活
linux·运维·ubuntu
基哥的奋斗历程1 小时前
Docker与微服务实战2-基础篇
docker·微服务·架构
迃幵chen1 小时前
高可用虚拟IP-keepalived
linux·服务器·tcp/ip
苹果醋32 小时前
MySQL Binlog 同步工具go-mysql-transfer Lua模块使用说明
java·运维·spring boot·mysql·nginx
猫猫的小茶馆2 小时前
【IO编程】标准IO和文件IO的对比
linux·c语言·嵌入式硬件·microsoft·嵌入式实时数据库
petunsecn3 小时前
Jenkins触发器--在其他项目执行后构建
运维·jenkins