20250718-4-Kubernetes 应用程序生命周期管理-Pod对象:实现机制_笔记

一、Pod对象



1. 资源共享实现机制
1)共享网络



  • 基本概念
    • 实现方式:通过将业务容器网络加入到负责网络的容器(infra container)实现网络共享
    • 核心特点:共享网络协议栈(包括TCP/IP、MAC地址、端口等),打破网络命名空间隔离
    • 典型示例:Nginx主容器与busybox边车容器共享infra container网络,可通过localhost互相访问
  • 实现机制
    • 基础镜像:使用pause:3.4.1镜像创建infra container
    • 容器关系:所有业务容器(如Nginx、busybox)都会关联到同一个infra container
    • 隐藏特性:在k8s层面不可见,需通过节点docker ps命令查看
  • 实践验证
    • 验证方法:
      • 通过docker ps | grep pod-web查看实际运行的三个容器(含隐藏的infra container)
      • infra container命名规则:k8s_POD_<pod名称>_<命名空间>_<ID>
    • 镜像特征:
      • 体积仅几MB大小
      • 运行简单程序保持容器不退出
      • 所有Pod都会自动创建对应的infra container
  • 关键要点
    • 识别特征:镜像名称为registry.aliyuncs.com/google_containers/pause:3.4.1
    • 核心作用:专门负责维护Pod的网络栈
    • 部署特点:每个Pod对应一个独立的infra container实例
2)共享存储



  • Pod共享网络与存储示例
    • 共享网络机制
      • 实现方式:将业务容器网络加入到"负责网络的容器"中实现网络共享
      • 访问验证:通过127.0.0.1可以访问另一个容器,证明网络命名空间已共享
      • 典型应用:nginx+php架构中,php可以通过127.0.0.1:9000被nginx访问
    • 共享存储机制
      • 数据卷类型:使用emptyDir实现容器间共享存储
      • 挂载配置:
        • 主容器nginx挂载到/usr/share/nginx/html
        • 边车容器busybox挂载到/data
      • 验证方法:在边车容器/data目录创建文件,主容器能立即读取
    • 配置示例解析
      • 容器顺序:容器定义顺序不影响角色,完全由业务功能决定
      • volumeMounts:通过相同名称的volume实现目录共享
      • emptyDir特性:临时存储空间,Pod删除后数据丢失
    • 实际操作演示
      • 验证步骤:
        • 在busybox容器的/data目录创建index.html
        • 通过wget 127.0.0.1验证nginx能访问该文件
        • 在nginx容器修改文件内容,busybox容器同步可见
      • 应用场景:日志采集场景中,主容器写日志到共享目录,边车容器负责日志收集
    • 常见问题解答
      • 网络隔离:默认每个容器有独立网络命名空间,共享网络打破这种隔离
      • 多端口暴露:一个Pod可以暴露多个端口,通过Service配置多个targetPort
      • 权限问题:共享目录的读写权限由挂载配置决定,不受容器角色限制
      • 与Docker区别:原理类似Docker的volume共享,但由K8s统一管理
2. 管理命令
1)Pod创建
  • YAML方式:通过kubectl apply -f pod.yaml命令创建Pod,其中YAML文件需包含apiVersion、kind、metadata和spec等必要字段
  • 命令行方式:使用kubectl run nginx --image=nginx直接创建运行nginx镜像的Pod
2)Pod查看
  • 列表查看:kubectl get pods命令可列出当前所有Pod的基本信息
  • 详情查看:kubectl describe pod <Pod名称>可查看指定Pod的详细配置和状态信息
3)日志管理
  • 基础日志:kubectl logs <Pod名称>查看Pod的标准输出日志
  • 容器指定:添加-c CONTAINER参数可查看多容器Pod中特定容器的日志
  • 实时跟踪:使用-f参数可以实时跟踪日志输出(类似tail -f功能)
4)容器交互
  • 终端接入:kubectl exec <Pod名称> [-c CONTAINER] -- bash命令可进入Pod容器的bash终端
  • 多容器选择:对于多容器Pod,需要通过-c参数指定要进入的容器名称
5)Pod删除
  • 删除操作:使用kubectl delete pod <Pod名称>命令可删除指定的Pod资源
  • 注意事项:删除后Kubernetes可能会根据控制器配置自动重建Pod
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

Pod网络共享机制

通过infra container实现网络协议栈共享(TCP/IP/MAC/端口等),打破网络命名空间隔离

共享原理:所有容器加入同一个infra container网络

⭐⭐⭐

Pod数据卷共享

使用emptyDir卷实现多容器目录共享(如Nginx日志目录与边车容器采集目录)

验证方法:在边车容器修改文件后主容器可实时读取

⭐⭐

边车容器(Sidecar)模式

主容器(如Nginx)与辅助容器(如日志采集器)通过共享网络/存储协同工作

典型场景:Nginx+PHP分离部署时通过127.0.0.1:9000通信

⭐⭐⭐⭐

infra container

每个Pod隐藏的基础容器,使用k8s.gcr.io/pause镜像维护共享网络

关键特征:镜像体积小(仅几MB),保持常驻不退出

⭐⭐

Service多端口暴露

一个Pod内多个容器端口可通过Service同时暴露(如Nginx 80和辅助服务8080)

配置要点:在YAML中定义多个targetPort

⭐⭐⭐

网络验证方法

在边车容器通过127.0.0.1访问主容器服务(如wget 127.0.0.1:80)

易错点:误认为需配置独立IP

⭐⭐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值