云原生(十五) | Kubernetes 篇之深入了解 Pod
off999 2025-10-19 11:25 26 浏览 0 评论
深入了解 Pod
一、什么是 Pod
- Pod 是一组(一个或多个)容器(docker 容器)的集合 (就像在豌豆荚中);这些容器共享存储、网络、以及怎样运行这些容器的声明。
- 我们一般不直接创建 Pod,而是创建一些工作负载由他们来创建 Pod
- Pod 的形式
- Pod 对容器有自恢复能力(Pod 自动重启失败的容器)
- Pod 自己不能恢复自己,Pod 被删除就真的没了(100,MySQL、Redis、Order)还是希望 k8s 集群能自己在其他地方再启动这个 Pod
- 单容器 Pod
- 多容器协同 Pod。我们可以把另外的容器称为SideCar(为应用赋能)
- Pod 天生地为其成员容器提供了两种共享资源:网络和存储
- 一个 Pod 由一个 Pause 容器设置好整个 Pod 里面所有容器的网络、名称空间等信息
- systemctl status 可以观测到。Pod 和容器进程关系
- kubelet 启动一个 Pod,准备两个容器,一个是 Pod 声明的应用容器(nginx),另外一个是 Pause。Pause 给当前应用容器设置好网络空间各种的。
二、Pod 使用
- 可以编写 deploy 等各种工作负载的 yaml 文件,最终创建出 pod,也可以直接创建
- Pod 的模板如下
# 这里是 Pod 模版
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: hello
image: busybox
command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']
restartPolicy: OnFailure
# 以上为 Pod 模版三、Pod 生命周期
- Pod 启动,会先依次执行所有初始化容器,有一个失败,则 Pod 不能启动
- 接下来启动所有的应用容器(每一个应用容器都必须能一直运行起来),Pod 开始正式工作,一个启动失败就会尝试重启 Pod 内的这个容器,Pod 只要是 NotReady,Pod 就不对外提供服务了
编写 yaml 测试生命周期
应用容器生命周期钩子
初始化容器(也可以有钩子)
临时容器:线上排错。
有些容器基础镜像。线上没法排错。使用临时容器进入这个 Pod。临时容器共享了 Pod 的所有。临时容器有 Debug 的一些命令,排错完成以后,只要 exit 退出容器,临时容器自动删除
例如:
Java:dump, jre 50mb。jdk 150mb
jre 50mb: jdk 作为临时容器
临时容器需要开启特性门控 --feature-gates="EphemeralContainers=true"
在所有组件,api-server、kubelet、scheduler、controller-manager 都得配置
使用临时容器的步骤:
1、声明一个临时容器。准备好 json 文件
{
"apiVersion": "v1",
"kind": "EphemeralContainers",
"metadata": {
"name": "my-nginx666" //指定Pod的名字
},
"ephemeralContainers": [{
"command": [
"sh"
],
"image": "busybox", //jre的需要jdk来调试
"imagePullPolicy": "IfNotPresent",
"name": "debugger",
"stdin": true,
"tty": true,
"terminationMessagePolicy": "File"
}]
}2、使用临时容器,应用一下即可
kubectl replace --raw
/api/v1/namespaces/default/pods/my-nginx666【pod 名】/ephemeralcontainers -f ec.json
四、静态 Pod
在 /etc/kubernetes/manifests 位置放的所有 Pod.yaml 文件,机器启动 kubelet 自己就把它启动起来。
静态 Pod 一直守护在这个机器上
五、Probe 探针机制(健康检查机制)
每个容器三种探针(Probe)
- 启动探针(后来才加的) 一次性成功探针。 只要启动成功了
- kubelet 使用启动探针,来检测应用是否已经启动。如果启动就可以进行后续的探测检查。慢容器一定指定启动探针。
- 启动探针 成功以后就不用了,剩下存活探针和就绪探针持续运行
- 存活探针
- kubelet 使用存活探针,来检测容器是否正常存活。(有些容器可能产生死锁【应用程序在运行,但是无法继续执行后面的步骤】),如果检测失败就会重新启动这个容器
- initialDelaySeconds: 3600(长了导致可能应用一段时间不可用) 5(短了陷入无限启动循环)
- 就绪探针
- kubelet 使用就绪探针,来检测容器是否准备好了可以接收流量。当一个 Pod 内的所有容器都准备好了,才能把这个 Pod 看作就绪了。用途就是:Service 后端负载均衡多个 Pod,如果某个 Pod 还没就绪,就会从 service 负载均衡里面剔除
- 谁利用这些探针探测
- kubelet 会主动按照配置给 Pod 里面的所有容器发送响应的探测请求
Probe 配置项
- initialDelaySeconds:容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认是 0 秒,最小值是 0。这是针对以前没有
- periodSeconds:执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。
- successThreshold:探测器在失败后,被视为成功的最小连续成功数。默认值是 1。
- 存活和启动探针的这个值必须是 1。最小值是 1。
- failureThreshold:当探测失败时,Kubernetes 的重试次数。 存活探测情况下的放弃就意味着重新启动容器。 就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。
- timeoutSeconds:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。
官方参考文档:配置存活、就绪和启动探测器 | Kubernetes
编写 yaml 测试探针机制
apiVersion: v1
kind: Pod
metadata:
name: "nginx-start-probe02"
namespace: default
labels:
app: "nginx-start-probe02"
spec:
volumes:
- name: nginx-vol
hostPath:
path: /app
- name: nginx-html
hostPath:
path: /html
containers:
- name: nginx
image: "nginx"
ports:
- containerPort: 80
startupProbe:
exec:
command: ["/bin/sh","-c","cat /app/abc"] ## 返回不是0,那就是探测失败
# initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测
periodSeconds: 5 ## 每隔几秒来运行这个
timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败
successThreshold: 1 ## 成功阈值,连续几次成才算成功
failureThreshold: 3 ## 失败阈值,连续几次失败才算真失败
volumeMounts:
- name: nginx-vol
mountPath: /app
- name: nginx-html
mountPath: /usr/share/nginx/html
livenessProbe: ## nginx容器有没有 /abc.html,就绪探针
# httpGet:
# host: 127.0.0.1
# path: /abc.html
# port: 80
# scheme: HTTP
# periodSeconds: 5 ## 每隔几秒来运行这个
# successThreshold: 1 ## 成功阈值,连续几次成才算成功
# failureThreshold: 5 ## 失败阈值,连续几次失败才算真失败
exec:
command: ["/bin/sh","-c","cat /usr/share/nginx/html/abc.html"] ## 返回不是0,那就是探测失败
# initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测
periodSeconds: 5 ## 每隔几秒来运行这个
timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败
successThreshold: 1 ## 成功阈值,连续几次成才算成功
failureThreshold: 3 ## 失败阈值,连续几次失败才算真失败
readinessProbe: ##就绪检测,都是http
httpGet:
# host: 127.0.0.1 ###不行
path: /abc.html ## 给容器发请求
port: 80
scheme: HTTP ## 返回不是0,那就是探测失败
initialDelaySeconds: 2 ## 指定的这个秒以后才执行探测
periodSeconds: 5 ## 每隔几秒来运行这个
timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败
successThreshold: 3 ## 成功阈值,连续几次成才算成功
failureThreshold: 5 ## 失败阈值,连续几次失败才算真失败
# livenessProbe:
# exec: ["/bin/sh","-c","sleep 30;abc "] ## 返回不是0,那就是探测失败
# initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测
# periodSeconds: 5 ## 每隔几秒来运行这个
# timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败
# successThreshold: 5 ## 成功阈值,连续几次成才算成功
# failureThreshold: 5 ## 失败阈值,连续几次失败才算真失败相关推荐
- 黑苹果性能真的比win10好吗(黑苹果更流畅吗)
-
安装黑苹果的时候有一个小分区300多M,进PE用DG工具,把U盘中的EFI文件夹copy到那个小分区里就行了。为了保险最好将原来的300M分区里的文件备份一下!系统恢复失败,继续重装系统吧。安装步骤如...
- win10系统升级win11(win10系统升级win11后无声音输出设备)
-
如果你是正版的操作系统的话,可以到微软的官方网站直接下载一个windows11的安装包,直接按下up的文件,它就会根据提示一步一步的安装,然后它就会直接升级到windows11了。如果你不是正版的操作...
- thinkpad按f8进不了安全模式
-
可以通过系统预设进入安全模式,步骤如下:1、打开开始菜单栏,点击设置2、点击更新与恢复3、点击恢复-选择高级启动下的立即重启系统重启后就会提示选择启动的模式,这时选择安全模式即可。Bugch...
- window7旗舰版电脑密码忘记了怎么解开
-
如果忘记win7旗舰版电脑密码,可以尝试以下方法破解:1.使用系统管理员账户登录。2.在开始菜单中,找到“控制面板”并打开。3.在“用户账户和家庭安全”中找到“更改Windows密码”并打开。4...
- 163邮箱电脑版(163电子邮箱)
-
163邮箱在电脑端的登入网址是mail.163.com。163邮箱作为国内排名靠前的邮箱,为大家提供邮箱服务,除了免费个人邮箱个人vip邮箱外,还提供企业邮箱的服务。163邮箱可以在outlookf...
- 国内外十大免费crm软件推荐(免费版crm)
-
悟空CRM9.0完全开源免费,采用前后端分离模式,前端框架vue后端框架PHP/JAVA多框架语言。ZohoCRM有免费版,限3用户免费,它还配有免费的手机app,很方便。你可以到这个地址查看一...
- 电脑显示屏(电脑显示屏图片)
-
1、LCD显示器LCD显示器即液晶显示屏,优点是机身薄,占地小,辐射小,给人以一种健康产品的形象。我看不尽是,使用液晶显示屏不一定可以保护到眼睛,这需要看各人使用计算机的习惯。2、等离子显示器等离子显...
- 把文件删了怎么恢复(文件删除之后如何恢复)
-
首先我们需要通过浏览器搜索互盾数据恢复软件,将这款软件下载到我们的电脑上1、下载好后运行互盾数据恢复软件,软件界面有六大功能,因为我们需要对回收站清空的数据进行恢复,所以点击界面的“误清空回收站”即...
- 360路由器怎么设置密码(360路由器怎么设置密码192.168.0.1)
-
360路由器p1的具体步骤:1、首先按照说明书进行常规连接路由器,然后我们打开浏览器,地址栏输入luyou.360.cn或192.168.0.1回车。2、立即开启,就会看见下一个设置界面,路由器管理员...
- 电脑特别卡反应特别慢怎么办
-
网速能快多少?很多朋友发现家里的网速明明是百兆光纤,但网速总是提不上来,其实影响这的原因很多,但有一点或许是很多人都不知道的,那就是因为我们的系统为了适应不同配置的电脑,需要保留一定的宽带来减轻网络给...
- cpu使用率过高(cpu使用率过高怎么解决 换配置)
-
关闭不必要的程序和服务:找出并关闭后台运行的、不必要的程序,注意可能的开机自启动程序影响。结束后台进程:通过任务管理器或系统监视器来结束不必要的后台进程,特别注意那些占用大量CPU资源的进程。检查...
- 智能abc输入法电脑版(智能abc输入法免费下载)
-
要安装智能ABC输入法,首先需要在笔记本上打开浏览器,然后在搜索栏中输入“智能ABC输入法下载”,找到官方网站或者可信赖的第三方网站,点击下载并安装该输入法软件。安装完成后,在输入法设置中选择启用智能...
- 如何给电脑设置密码开机密码
-
1、点击左下角开始,选择控制面板!(有的可以右击我的电脑)2、然后在选择用户账户3、一般没有设置密码的需要设置administrative的管理员密码!也可以创建新的账户4、然后在选择创建密码5、然后...
- 系统盘制作u盘要多大(制作系统u盘要多少g)
-
u盘制作启动盘,8g空间足够了。随着WINDOWS系统的不断完善,操作系统本身文件也越来越大,因为操作系统集成了更多的设备驱动和补丁,但是就WINDOWS10系统来说,有8g的空间足够把U盘做成启动...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
