【一起来学kubernetes】19、Pod使用详解

news2025/3/20 12:19:14

Kubernetes 中的 Pod 是最小的可调度和可管理单元,也是容器化应用的载体。Pod 封装了一个或多个紧密关联的容器,共享网络、存储和生命周期。


一、Pod 的核心概念

  1. 定义
  • Pod是Kubernetes中最小的部署单元,可以包含一个或多个容器。这些容器紧密相关,共享相同的网络和存储资源,以便协同工作。Pod的设计目标是将一组紧密相关的容器封装在一起,简化应用的部署和管理过程,同时提高容器之间的资源共享和通信效率。
  1. 设计目的

    • 原子调度单位:Kubernetes 直接调度的最小单元(而非单个容器)。
    • 共享环境:Pod 内的容器共享网络命名空间(同一 IP、端口范围)和存储卷(Volume)。
  2. 适用场景

    • 单容器 Pod:大多数场景下运行一个容器(如 Web 服务)。
    • 多容器 Pod:需要共享资源的容器组(如主容器 + Sidecar 辅助容器)。

二、Pod 的主要特性

1. 共享资源

网络
• 所有容器共享同一个 IP 地址和端口空间,通过 localhost 互相通信。
• 示例:主容器监听 127.0.0.1:8080,Sidecar 容器通过 localhost:8080 访问。

存储卷(Volume)
• 容器可通过挂载同一个 Volume 共享文件(如日志目录、配置文件)。
• 示例:多个容器共享 /var/log 目录写入日志。

2. 生命周期

短暂性:Pod 是临时资源,可能因节点故障、调度策略或用户操作被销毁重建。
状态管理
Pending:Pod 已被接受,但容器未完全启动。
Running:至少一个容器在运行。
Succeeded:所有容器正常退出(退出码 0)。
Failed:至少一个容器异常退出(非 0 退出码)。
Unknown:无法获取 Pod 状态(如通信故障)。

3. 重启策略

通过 spec.restartPolicy 控制容器异常退出时的行为:
Always(默认):总是重启容器(适用于长期运行的服务)。
OnFailure:仅在容器异常退出时重启(适合批处理任务)。
Never:不重启。


三、Pod 的架构

1. 组成结构
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: main-container
    image: nginx:1.25
    ports:
    - containerPort: 80
    volumeMounts:
    - name: shared-data
      mountPath: /var/html
  - name: sidecar
    image: busybox:1.36
    command: ["sh", "-c", "tail -f /dev/null"]
    volumeMounts:
    - name: shared-data
      mountPath: /var/logs
  initContainers:
  - name: init-db
    image: alpine:3.18
    command: ["sh", "-c", "echo 'Initializing...' > /var/html/init.txt"]
    volumeMounts:
    - name: shared-data
      mountPath: /var/html
  volumes:
  - name: shared-data
    emptyDir: {}
2. 关键组件
组件说明
主容器(Containers)运行应用的核心逻辑(如 Web 服务器、数据库)。
Init 容器在应用容器启动前运行,用于初始化(如下载配置、等待依赖服务就绪)。
临时容器(Ephemeral Containers)调试时临时注入到 Pod 的容器(不影响原有容器)。
存储卷(Volumes)Pod 级别定义的存储,可被多个容器挂载(如 emptyDir, configMap)。

四、Pod 的生命周期管理

1. 创建与删除

通过 YAML 创建

kubectl apply -f pod.yaml

直接运行临时 Pod(调试用):

kubectl run debug-pod --image=busybox:1.36 --restart=Never -- /bin/sh -c "sleep 3600"

删除 Pod

kubectl delete pod my-pod
2. 状态监控

查看 Pod 列表

kubectl get pods

查看详细信息

kubectl describe pod my-pod

查看日志

kubectl logs my-pod -c main-container  # 指定容器名称
3. 调试与交互

进入容器 Shell

kubectl exec -it my-pod -c main-container -- /bin/sh

复制文件

kubectl cp my-pod:/var/logs/error.log ./error.log

五、使用场景示例

1. 单容器 Pod

运行一个简单的 Nginx 服务:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.25
    ports:
    - containerPort: 80
2. 多容器 Pod(Sidecar 模式)

主容器处理业务,Sidecar 容器收集日志:

apiVersion: v1
kind: Pod
metadata:
  name: web-app
spec:
  containers:
  - name: web
    image: my-web-app:latest
    volumeMounts:
    - name: logs
      mountPath: /var/logs
  - name: log-collector
    image: fluentd:1.16
    volumeMounts:
    - name: logs
      mountPath: /var/logs
  volumes:
  - name: logs
    emptyDir: {}
3. Init 容器初始化配置

在应用启动前下载配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: init-demo
spec:
  initContainers:
  - name: download-config
    image: alpine:3.18
    command: ["sh", "-c", "wget -O /app/config.yaml http://config-server/config"]
    volumeMounts:
    - name: app-config
      mountPath: /app
  containers:
  - name: app
    image: my-app:latest
    volumeMounts:
    - name: app-config
      mountPath: /etc/app
  volumes:
  - name: app-config
    emptyDir: {}

六、注意事项与最佳实践

  1. 避免直接管理 Pod
    • 使用控制器(如 DeploymentStatefulSet)管理 Pod 的副本和生命周期,确保高可用性。

  2. 资源限制
    • 为容器设置 CPU/内存的 requestslimits,防止资源争抢:

    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
    
  3. 健康检查
    • 配置 livenessProbereadinessProbe 确保容器健康:

    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20
    
  4. 日志管理
    • 将日志写入标准输出(stdout/stderr),方便 kubectl logs 查看。
    • 使用 Sidecar 容器或 DaemonSet(如 Fluentd)收集日志。


七、常见问题排查

  1. Pod 处于 Pending 状态
    • 原因:资源不足(如 CPU/内存)、节点选择器(nodeSelector)不匹配。
    • 检查命令:

    kubectl describe pod my-pod | grep Events
    
  2. Pod 不断重启(CrashLoopBackOff
    • 原因:容器启动后立即崩溃(如配置错误、依赖服务不可用)。
    • 查看日志:

    kubectl logs my-pod --previous  # 查看前一次运行的日志
    
  3. 容器无法互相通信
    • 确认容器使用 localhost 和正确端口。
    • 检查端口是否冲突或未暴露。


八、与其他资源的对比

特性PodDeploymentJob
用途运行单个或多个容器实例管理 Pod 副本,实现滚动更新运行一次性任务(如批处理)
生命周期临时,可能被重建长期稳定运行任务完成后终止
高可用性无自动恢复自动替换故障 Pod不适用

通过理解 Pod 的核心机制,开发者可以更高效地设计容器化应用,结合 Kubernetes 的其他资源(如 Service、ConfigMap)构建健壮的云原生系统。

八、拓展

【一起来学kubernetes】7、k8s中的ingress详解

【一起来学kubernetes】11、Deployment使用详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2318365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络基础:认识网络硬件与传输介质

计算机网络基础:认识网络硬件与传输介质 一、前言二、网络硬件设备2.1 路由器2.1.1 路由器的基本概念与功能2.1.2 路由器的工作原理2.1.3 路由器的类型与应用场景 2.2 交换机2.2.1 交换机的基本概念与功能2.2.2 交换机的工作原理2.2.3 交换机的类型与应用场景 2.3 服…

Android audio(8)-native音频服务的启动与协作(audiopolicyservice和audioflinger)

音频策略的构建 1、概述 2、AudiopolicyService 2.1 任务 2.2 启动流程 2.2.1 加载audio_policy.conf(xml)配置文件 2.2.2 初始化各种音频流对应的音量调节点 2.2.3 加载audio policy硬件抽象库 2.2.4设置输出设备 ps:audiopatch流程简介 2.2.5打开输出设…

法兰克仿真软件FANUC CNC Guide v25.0 安装教程及中文设置

前言 下载地址在文末。 我们公司用新到一批FANUC 系统的设备,为方便使用就装了一个 FANUC 数控系统仿真软件FANUC CNC Guide v25.0 ,还是最新版不是市面上流传的老版本。模拟学习一下。 安装操作 安装环境:Windows 11 专业版 24H2 安装程…

Java SE 面经

1、Java 语言有哪些特点 Java 语言的特点有: ①、面向对象。主要是:封装,继承,多态。 ②、平台无关性。一次编写,到处运行,因此采用 Java 语言编写的程序具有很好的可移植性。 ③、支持多线程。C 语言没…

关于redis中的分布式锁

目录 分布式锁的基础实现 引入过期时间 引入校验id 引入lua脚本 引入看门狗 redlock算法 分布式锁的基础实现 多个线程并发执行的时候,执行的先后顺序是不确定的,需要保证程序在任意执行顺序下,执行逻辑都是ok的。 在分布式系统中&am…

Python实战(2)-数据库支持

使用简单的纯文本文件可实现的功能有限。诚然,使用它们可做很多事情,但有时可能还需要额外的功能。你可能希望能够自动完成序列化,此时可求助于shelve和pickle(类似于shelve)​。不过你可能需要比这更强大的功能。例如…

从 Snowflake 到 Databend Cloud:全球游戏平台借助 Databend 实现实时数据处理

导读:某全球游戏平台为全球数百万玩家提供实时的技能型游戏体验与无缝的实时互动。对该游戏平台而言,保持数据的实时更新和实时分析,对提升玩家互动和留存率至关重要。他们在使用 Snowflake 进行实时数据摄取和分析时遇到了重大挑战&#xff…

Docker搭建MySQL主从服务器

一、在主机上创建MySQL配置文件——my.cnf master服务器配置文件路径:/data/docker/containers/mysql-cluster-master/conf.d/my.cnf slave服务器配置文件路径: /data/docker/containers/mysql-cluster-master/conf.d/my.cnf master服务配置文件内容 …

C语言每日一练——day_12(最后一天)

引言 针对初学者,每日练习几个题,快速上手C语言。第十二天。(最后一天,完结散花啦) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ&#xff0…

10、STL中的unordered_map使用方法

一、了解 1、unordered_map(哈希) unordered_map是借用哈希表实现的关联容器。 访问键值对O(1),最坏情况O(n),例如哈希冲突严重时。【n是一个哈希桶的元素数量】 unordered_map特性 键值对存储&#xff…

本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】

目录 一、本地部署DS 二、建立本地知识库 1.安装python和必要的库 2.设置主目录工作区 3.编写文档解析脚本 4.构建向量数据库 三、基于DS,使用本地知识库检索 本地部署DS,其实非常简单,我写了一篇操作记录,我终于本地部署了DeepSeek-R1(图文全过程)-CSDN博客 安装…

监控视频联网平台在智慧水利中的应用

随着智慧城市建设的深入推进,智慧水利作为其中的重要组成部分,正逐步实现数字化、智能化和网络化转型。在这一过程中,监控视频联网平台凭借其高效的数据采集、传输与分析能力,成为智慧水利建设的关键技术支撑。以下是监控视频联网…

深入解析素数筛法:从埃氏筛到欧拉筛的算法思想与实现

素数筛法是一种用于高效生成素数的算法。常见的素数筛法包括埃拉托斯特尼筛法(埃氏筛)和欧拉筛(线性筛)。下面我们将详细讲解这两种筛法的思想: 一、 埃拉托斯特尼筛法(埃氏筛) 思想&#xff1…

ubuntu20.04系统没有WiFi图标解决方案_安装Intel网卡驱动

文章目录 1. wifi网卡配置1.1 安装intel官方网卡驱动backport1.1.1 第四步可能会出现问题 1.2 ubuntu官方的驱动1.3 重启 1. wifi网卡配置 我的电脑是华硕天选4(i7,4060),网卡型号intel ax201 ax211 ax210通用。 参考文章&#…

网络编程---多客户端服务器

写一个服务器和两个客户端 运行服务器和2个客户端,实现聊天功能 客户端1 和 客户端2 进行聊天 客户端1将聊天数据发送给服务器 服务器将聊天数据转发给客户端2 要求: 服务器使用 select 模型实现 客户端1使用 poll 模型实现 客户端2使用 多线程实现…

LeetCode 2614.对角线上的质数:遍历(质数判断)

【LetMeFly】2614.对角线上的质数:遍历(质数判断) 力扣题目链接:https://leetcode.cn/problems/prime-in-diagonal/ 给你一个下标从 0 开始的二维整数数组 nums 。 返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数&…

红日靶场(二)——个人笔记

靶场搭建 新增VMnet2网卡 **web:**需要配置两张网卡,分别是外网出访NAT模式和内网域环境仅主机模式下的VMnet2网卡。 **PC:**跟web一样,也是需要配置两张网卡,分别是外网出访NAT模式和内网域环境仅主机模式下的VMn…

实时视频分析的破局之道:蓝耘 MaaS 如何与海螺 AI 视频实现高效协同

一、蓝耘 MaaS 平台:AI 模型全生命周期管理的智能引擎 蓝耘 MaaS(Model-as-a-Service)平台是由蓝耘科技推出的 AI 模型全生命周期管理平台,专注于为企业和开发者提供从模型训练、推理到部署的一站式解决方案。依托云原生架构、高…

走进Java:String字符串的基本使用

❀❀❀ 大佬求个关注吧~祝您开心每一天 ❀❀❀ 目录 一、什么是String 二、如何定义一个String 1. 用双引号定义 2. 通过构造函数定义 三、String中的一些常用方法 1 字符串比较 1.1 字符串使用 1.2 字符串使用equals() 1.3 使用 equalsIgnoreCase() 1.4 cpmpareTo…

python系列之元组(Tuple)

不为失败找理由,只为成功找方法。所有的不甘,因为还心存梦想,所以在你放弃之前,好好拼一把,只怕心老,不怕路长。 python系列之元组(Turple) 一、元组是什么?——给新手的…