• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
思想人生从关注生活开始
博客园    首页    新随笔    联系   管理    订阅  订阅

Kubernetes中Pod详解

简述

一个集群由多个节点构成,节点被分成管理节点及工作节点

Pod是集群中可以调度最小单元,是一组容器集合抽象,因此为由一个一个容器组合一起来构成其本身,它是一个可以运行一个或多个紧密相关容器的逻辑主机。每个 Pod 都具有自己的 IP 地址、存储和网络空间。一个 Pod 中的容器共享相同的资源,可以通过 localhost 相互通信。

在 Kubernetes(K8s)中,一个应用实例与容器的关系是一对一的。在 K8s 中,应用程序被打包为一个或多个容器,并以 Pod 的形式进行部署和运行。

在 Kubernetes 中,Pod 是最小的、可部署的计算单元,也是整个系统的核心抽象。理解 Pod 是掌握 Kubernetes 的关键第一步。

详解

🧱 一、Pod 是什么?

Pod 是一个或多个容器(Container)的逻辑集合,共享网络、存储和运行环境,作为一个整体被调度和管理。
✅ 核心特点:

image

📦 二、Pod 的典型结构(YAML 示例)

apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
labels:
app: web
spec:
# 定义容器
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
volumeMounts:
- name: config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf

- name: log-shipper # Sidecar 容器
image: fluentd
volumeMounts:
- name: logs
mountPath: /var/log

# 定义共享存储卷
volumes:
- name: config
configMap:
name: nginx-config
- name: logs
emptyDir: {}

# 可选:初始化容器(先于主容器运行)
initContainers:
- name: wait-for-db
image: busybox
command: ['sh', '-c', 'until nslookup mydb; do echo waiting; sleep 2; done']

 

🔁 三、Pod 的生命周期


Pod 不是“永久实体”,它有明确的状态流转:

Pending → Running → Succeeded / Failed / Unknown

image

 

💡 使用 kubectl describe pod <name> 查看事件,定位卡在 Pending 或 Crash 的原因。

🔄 四、Pod vs 容器:为什么需要 Pod?

直接运行容器不行吗?不行! 原因如下:

image

🌰 例子:

一个 Pod 包含:
主容器:Python Web 应用
Sidecar 容器:Prometheus exporter
Init Container:等待数据库就绪
它们共享 /app/logs 目录,且必须一起调度到同一台机器。


⚠️ 五、重要注意事项


1. 不要直接创建裸 Pod!
裸 Pod 不会自动恢复(节点故障后不会重建)
应使用 控制器(Controller) 管理:
Deployment:无状态应用(推荐)
StatefulSet:有状态应用(如 ZooKeeper、MySQL)
DaemonSet:每节点运行一个(如日志代理)
Job/CronJob:一次性任务
✅ 正确做法:用 Deployment 创建 Pod,而非直接 kubectl apply -f pod.yaml
2. Pod IP 是临时的
Pod 重建后 IP 会变
必须通过 Service 提供稳定访问入口
3. Pod 是“不可变”的
一旦创建,不能修改 spec.containers 等核心字段
更新应用 → 创建新 Pod(由控制器滚动更新)
4. 资源限制必须设置
避免单个 Pod 耗尽节点资源:

resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"

 

🔍 六、调试 Pod 的常用命令

# 查看 Pod 列表及状态
kubectl get pods

# 查看 Pod 详细信息(事件、挂载、IP 等)
kubectl describe pod <pod-name>

# 查看日志(主容器)
kubectl logs <pod-name>

# 查看特定容器日志(多容器 Pod)
kubectl logs <pod-name> -c <container-name>

# 进入容器执行命令
kubectl exec -it <pod-name> -- sh

# 查看前一次崩溃的日志(关键!)
kubectl logs <pod-name> --previous

✅ 总结:Pod 的核心价值

image

posted @ 2026-01-09 13:38  JackYang  阅读(40)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3