当前位置: 首页 > news >正文

K8s学习笔记(二):Pod

1 K8s核心资源Pod

1.1 Pod是什么?

官方文档:Pod | Kubernetes

Pod 是 Kubernetes(k8s)中最小的部署与调度单元,并非直接运行容器,而是对一个或多个 “紧密关联” 容器的封装。

核心特点可简单总结为 3 点:

  1. 容器的 “组合包”:通常包含 1 个主容器(业务核心,如 Web 服务),也可包含辅助容器(如日志收集、监控代理),所有容器共享 Pod 的资源。
  2. 共享基础环境:同一 Pod 内的容器共享网络命名空间(用localhost就能互相通信,无需跨网络)和存储卷(可共用文件目录),相当于 “在同一台迷你主机上运行”。
  3. 短暂且被管理:Pod 本身是 “一次性” 的(故障、重启后会生成新 Pod,IP 会变),不会自行修复,需依赖 k8s 的控制器(如 Deployment、StatefulSet)来管理其创建、扩缩容和故障恢复。

白话解释:

    可以把 pod 看成是一个“豌豆荚”,里面有很多“豆子”(容器)。一个豌豆荚里的豆子,它们吸收着 共同的营养成分、肥料、水分等,Pod 和容器的关系也是一样,Pod 里面的容器共享 pod 的网络、存储等。

1.1.1 Pod如何管理多个容器

在 Kubernetes 中,Pod 管理多个容器的核心逻辑是 “协同调度、资源共享、生命周期绑定”,具体通过以下方式实现:

  1. 共享基础环境
    同一 Pod 内的所有容器共享网络命名空间(相同的 IP 地址、端口空间)和存储卷(Volume)

    • 网络:容器间可通过localhost直接通信(如localhost:8080访问同一 Pod 内的另一个容器),但需注意端口不冲突;对外表现为一个整体,共享 Pod 的 IP。
    • 存储:Pod 中定义的 Volume(如临时目录emptyDir、持久化存储PersistentVolume)可被所有容器挂载,实现数据共享(如日志容器读取主容器产生的日志文件)。
  2. 生命周期绑定
    多个容器的生命周期与 Pod 强绑定:

    • 同时调度:Pod 被调度到某个节点后,其内所有容器会在同一节点启动。
    • 整体管理:Pod 删除时,所有容器同时终止;Pod 重启(如节点故障重建)时,所有容器重新创建。
    • 重启策略统一:Pod 通过restartPolicy(如AlwaysOnFailure)定义容器故障时的重启规则,适用于所有容器。
  3. 启动与依赖控制
    若容器间有启动顺序或依赖关系,可通过以下机制控制:

    • Init 容器:在应用容器启动前运行的 “初始化容器”,完成前置任务(如配置加载、依赖检查),所有 Init 容器成功退出后,应用容器才会启动。
    • 探针(Probe):通过livenessProbe(存活探针)、readinessProbe(就绪探针)检测容器状态,确保容器按预期运行后再对外提供服务。
  4. 资源隔离与分配
    每个容器可单独设置资源请求(resources.requests)和限制(resources.limits),Pod 会汇总这些需求向 Kubernetes 申请资源,确保容器间资源使用不冲突(如避免某容器耗尽内存影响其他容器)。

1.1.2 Pod网络

Pod 网络核心可总结为:

  • 每个 Pod 有唯一集群内 IP,作为其网络身份;
  • 同一 Pod 内容器共享网络命名空间,通过localhost直接通信;
  • 集群内 Pod 间可直接用 IP 互通(无 NAT),依赖 CNI 插件实现跨节点通信;
  • Pod 访问外部靠节点 SNAT,外部访问 Pod 需通过 Service 作为稳定入口。

1.1.3 Pod存储

创建 Pod 的时候可以指定挂载的存储卷。 POD 中的所有容器都可以访问共享卷,允许这些容器共享数据。 Pod 只要挂载持久化数据卷,Pod 重启之后数据还是会存在的。

1.2 Pod工作方式

在 K8s 中,所有的资源都可以使用一个 yaml 文件来创建,创建 Pod 也可以使用 yaml 配置文件。或者使用 kubectl run 在命令行创建 Pod。

1.2.1 自主式 Pod

所谓的自主式 Pod,就是直接定义一个 Pod 资源,如下:

apiVersion: v1
kind: Pod
metadata:name: nginx-testnamespace: defaultlabels:app: nginx
spec:containers:- name: nginxports:- containerPort: 80image: nginximagePullPolicy: IfNotPresent# 更新资源清单
kubectl apply -f pod-nginx.yaml# 查看pod是否创建成功
kubectl get pods -o wide -l app=nginx
自主式Pod存在一个问题,加入不小心删除了Pod,那么就彻底被删除了,不会再创建一个新的Pod,这如果在生产环境中有非常大的风险,用控制器管理最好。
kubectl delete pods nginx-testkubectl get pods -l app=nginx
#结果为空说明pod已经被删除了

1.2.2 控制器管理的Pod

常见的管理 Pod 的控制器:Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset。 控制器管理的 Pod 可以确保 Pod 始终维持在指定的副本数运行。 如,通过 Deployment 管理 Pod

vim nginx-deploy.yamlapiVersion: v1
kind: Deployment
metadata:name: nginx-testlabels:app: nginx-deploy
spec:selector:matchLabels:app: nginxreplicas: 2        # 副本数为2template:metadata:labels:app: nginx
spec:containers:- name: my-nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80# 更新资源清单文件
kubectl apply -f nginx-deploy.yaml# 查看Deployment
kubectl get deploy -l app=nginx-deploy
NAME READY UP-TO-DATE AVAILABLE AGE 
nginx-test 2/2 2 2 16s#查看 Replicaset
kubectl get rs -l app=nginx 
NAME DESIRED CURRENT READY AGE 
nginx-test-75c685fdb7 2 2 2 71s#查看 pod
kubectl get pods -o wide -l app=nginx
NAME READY STATUS IP 
nginx-test-85c885fdb7-6d4lx 1/1 Running 10.190.102.69 
nginx-test-85c885fdb7-9s95h 1/1 Running 10.190.102.68#删除nginx-test-85c885fdb7-9s95h这个 podkubectl delete pods nginx-test-85c885fdb7-9s95h
kubectl get pods -o wide -l app=nginxNAME READY STATUS IP 
nginx-test-85c885fdb7-6d4lx 1/1 Running 10.190.102.69 
nginx-test-85c885fdb7-6s95h 1/1 Running 10.190.102.68# 发现重新创建了一个新的pod  nginx-test-85c885fdb7-6s95h

通过上面可以发现通过 deployment 管理的 pod,可以确保 pod 始终维持在指定副本数量


文章转载自:

http://jLvrKrHJ.xkgyh.cn
http://MHlzzGlp.xkgyh.cn
http://9Dd5Dvor.xkgyh.cn
http://rCRBCeld.xkgyh.cn
http://vE8DggBb.xkgyh.cn
http://yBtZq3hf.xkgyh.cn
http://54ez0vDL.xkgyh.cn
http://UNrE7R81.xkgyh.cn
http://SuQm16dC.xkgyh.cn
http://EIm9agun.xkgyh.cn
http://nMzRISWX.xkgyh.cn
http://AjbBbN4w.xkgyh.cn
http://hbMJjL3v.xkgyh.cn
http://ILWlGAgZ.xkgyh.cn
http://wp1b7Vhz.xkgyh.cn
http://26FbuRUh.xkgyh.cn
http://el9udSyw.xkgyh.cn
http://qmmpDS3e.xkgyh.cn
http://fkrWJmLk.xkgyh.cn
http://Ut0SvfkM.xkgyh.cn
http://lo5KmF8D.xkgyh.cn
http://j50uLnf9.xkgyh.cn
http://8Kmr7l8P.xkgyh.cn
http://V7j0vjb8.xkgyh.cn
http://NCwUCcd7.xkgyh.cn
http://ymUPd8tZ.xkgyh.cn
http://6fg5DW93.xkgyh.cn
http://48Ty9k3O.xkgyh.cn
http://wicQOFIb.xkgyh.cn
http://bJHciAbW.xkgyh.cn
http://www.dtcms.com/a/382323.html

相关文章:

  • 贪心算法应用:异常检测阈值调整问题详解
  • C++ stack和queue的使用及模拟实现
  • 【面试题】RAG核心痛点
  • 2025年特种作业操作证考试题库及答案(低压电工作业)
  • PCIE基础学习之物理层学习基础
  • Day 02 geant4如何构建几何模型以及材料填充-------以B1为实例
  • C# LINQ 的发展故事:从 “碎片化查询” 到 “语言级统一”
  • 电涌保护器:为现代生活筑起一道隐形防雷网
  • STM32项目分享:基于物联网的灭火器智能监测系统
  • 嵌入式 Linux 启动机制全解析:从 Boot 到 Rootfs
  • 图神经网络分享系列-SDNE(Structural Deep Network Embedding) (三)
  • DDIM和DDPM之 间的区别与联系
  • dumpsys power 简介
  • NO.10:氖:霓虹灯
  • TA-VLA——将关节力矩感知融入VLA中:无需外部力传感器,即可完成汽车充电器插入
  • Ubuntu 系统中 Miniconda 虚拟环境(以 SGlang 为例)的备份与还原详细总结
  • Q2(门式)起重机司机实操考点有哪些?
  • leetcode58:最后一个单词的长度(尾指针逆向扫描,结合151反转字符串对比)
  • 链表运用到响应式中
  • 自动驾驶中的传感器技术46——Radar(7)
  • Windows_MediaFeaturePack_x64_1903_V1.msu
  • Class56 束搜索
  • 【Redis#10】渐进式遍历 | 数据库管理 | redis_cli | RES
  • Java面试问题记录(三)
  • 在Excel和WPS表格中批量删除数据区域的批注
  • 商品库存扣减方案
  • smartctl Current_Pending_Sector 硬盘待处理扇区
  • 并发和高并发
  • 科技信息差(9.13)
  • 文档长期不更新导致知识过时如何解决