【一起来学kubernetes】19、Pod使用详解
Kubernetes 中的 Pod 是最小的可调度和可管理单元,也是容器化应用的载体。Pod 封装了一个或多个紧密关联的容器,共享网络、存储和生命周期。
一、Pod 的核心概念
- 定义
- Pod是Kubernetes中最小的部署单元,可以包含一个或多个容器。这些容器紧密相关,共享相同的网络和存储资源,以便协同工作。Pod的设计目标是将一组紧密相关的容器封装在一起,简化应用的部署和管理过程,同时提高容器之间的资源共享和通信效率。
-
设计目的
- 原子调度单位:Kubernetes 直接调度的最小单元(而非单个容器)。
- 共享环境:Pod 内的容器共享网络命名空间(同一 IP、端口范围)和存储卷(Volume)。
-
适用场景
- 单容器 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-containerimage: nginx:1.25ports:- containerPort: 80volumeMounts:- name: shared-datamountPath: /var/html- name: sidecarimage: busybox:1.36command: ["sh", "-c", "tail -f /dev/null"]volumeMounts:- name: shared-datamountPath: /var/logsinitContainers:- name: init-dbimage: alpine:3.18command: ["sh", "-c", "echo 'Initializing...' > /var/html/init.txt"]volumeMounts:- name: shared-datamountPath: /var/htmlvolumes:- name: shared-dataemptyDir: {}
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: nginximage: nginx:1.25ports:- containerPort: 80
2. 多容器 Pod(Sidecar 模式)
主容器处理业务,Sidecar 容器收集日志:
apiVersion: v1
kind: Pod
metadata:name: web-app
spec:containers:- name: webimage: my-web-app:latestvolumeMounts:- name: logsmountPath: /var/logs- name: log-collectorimage: fluentd:1.16volumeMounts:- name: logsmountPath: /var/logsvolumes:- name: logsemptyDir: {}
3. Init 容器初始化配置
在应用启动前下载配置文件:
apiVersion: v1
kind: Pod
metadata:name: init-demo
spec:initContainers:- name: download-configimage: alpine:3.18command: ["sh", "-c", "wget -O /app/config.yaml http://config-server/config"]volumeMounts:- name: app-configmountPath: /appcontainers:- name: appimage: my-app:latestvolumeMounts:- name: app-configmountPath: /etc/appvolumes:- name: app-configemptyDir: {}
六、注意事项与最佳实践
-
避免直接管理 Pod
• 使用控制器(如Deployment、StatefulSet)管理 Pod 的副本和生命周期,确保高可用性。 -
资源限制
• 为容器设置 CPU/内存的requests和limits,防止资源争抢:resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m" -
健康检查
• 配置livenessProbe和readinessProbe确保容器健康:livenessProbe:httpGet:path: /healthzport: 8080initialDelaySeconds: 15periodSeconds: 20 -
日志管理
• 将日志写入标准输出(stdout/stderr),方便kubectl logs查看。
• 使用 Sidecar 容器或 DaemonSet(如 Fluentd)收集日志。
七、常见问题排查
-
Pod 处于
Pending状态
• 原因:资源不足(如 CPU/内存)、节点选择器(nodeSelector)不匹配。
• 检查命令:kubectl describe pod my-pod | grep Events -
Pod 不断重启(
CrashLoopBackOff)
• 原因:容器启动后立即崩溃(如配置错误、依赖服务不可用)。
• 查看日志:kubectl logs my-pod --previous # 查看前一次运行的日志 -
容器无法互相通信
• 确认容器使用localhost和正确端口。
• 检查端口是否冲突或未暴露。
八、与其他资源的对比
| 特性 | Pod | Deployment | Job |
|---|---|---|---|
| 用途 | 运行单个或多个容器实例 | 管理 Pod 副本,实现滚动更新 | 运行一次性任务(如批处理) |
| 生命周期 | 临时,可能被重建 | 长期稳定运行 | 任务完成后终止 |
| 高可用性 | 无自动恢复 | 自动替换故障 Pod | 不适用 |
通过理解 Pod 的核心机制,开发者可以更高效地设计容器化应用,结合 Kubernetes 的其他资源(如 Service、ConfigMap)构建健壮的云原生系统。
八、拓展
【一起来学kubernetes】7、k8s中的ingress详解
【一起来学kubernetes】11、Deployment使用详解
相关文章:
【一起来学kubernetes】19、Pod使用详解
Kubernetes 中的 Pod 是最小的可调度和可管理单元,也是容器化应用的载体。Pod 封装了一个或多个紧密关联的容器,共享网络、存储和生命周期。 一、Pod 的核心概念 定义 Pod是Kubernetes中最小的部署单元,可以包含一个或多个容器。这些容器紧…...
第2章:容器核心原理:深入理解Namespace、Cgroup与联合文件系统
第2章:容器核心原理:深入理解Namespace、Cgroup与联合文件系统 作者:DogDog_Shuai 阅读时间:约20分钟 难度:中级 目录 1. 引言2. Linux容器核心技术3. Namespace详解4. Cgroup详解5. 联合文件系统6. 容器运行时原理...
计算机网络基础:认识网络硬件与传输介质
计算机网络基础:认识网络硬件与传输介质 一、前言二、网络硬件设备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 安装程…...
事务隔离级别是?
事务隔离级别是数据库管理系统用来控制多个事务并发执行时对数据的可见性和一致性的机制。MySQL支持四种标准的事务隔离级别,它们定义了事务如何与其他并发事务交互。 四种事务隔离级别: READ UNCOMMITTED(读未提交) READ COMMIT…...
[JavaScript]如何利用作用域块避免闭包内存泄漏?
出自《你不知道的JavaScript》上卷 以下是本书给出的反例: function process (data) {...} var bigdata{...} process(bigdata); var btn document.getElementById(x); btn.addEventListener(click, function click{...});click会被回调在其他位置, 在addEventListener函数内…...
基于Selenium Grid的分布式测试架构设计与深度实践
一、引言:分布式测试的必然性与挑战 在数字化转型浪潮中,软件交付速度已成为企业竞争力的核心指标。敏捷开发、DevOps和持续交付(CI/CD)的普及,使得传统测试方法面临前所未有的挑战。单机测试模式在应对以下场景时显得…...
JavaScript 金额运算精度丢失问题及解决方案
JavaScript 金额运算精度丢失问题及解决方案 1. 前言2. 为什么 JavaScript 计算金额会精度丢失?2.1 JavaScript 使用 IEEE 754 双精度浮点数2.2 浮点运算错误示例**错误示例 1:0.1 0.2 ≠ 0.3****错误示例 2:浮点乘法精度问题** 3. 解决方案…...
【Python】使用ImageEnhance提升图片画质
使用ImageEnhance提升图片画质 from PIL import Image, ImageEnhance import ioimage_path "PhoneImg_20250319_160023607949_01.png"def enhance_image_quality(image_path):"""使用双三次插值算法提升画质"""with Image.open(imag…...
vector容器以及deque
vector 一.vector容器简介二.vector的默认构造1. 语法和功能2.vector带参数的构造3.vector的赋值4.vector的大小5.vector数值操作 deque简介: 一.vector容器简介 • vector是将元素置于一个动态数组中加以管理的容器。 std::vector 是 C 标准模板库(STL…...
jmeter中,上传文件的MIME类型
text/plain:用于纯文本文件,如.txt文件。 text/html:用于HTML文档,即.html文件。 application/msword:Microsoft Word文档,即.doc和.docx文件。 image/jpeg:JPEG图像&#x…...
《心理学与生活》2025最新网课答案
《心理学与生活》2025最新网课答案 文章目录 《心理学与生活》2025最新网课答案发展与教育单元测试情绪与情感单元测验人格与动机单元测试感知与记忆单元测试文化与社会单元测试 发展与教育单元测试 题数 20 棉花糖实验中哪些小孩长大后的表现更好()。 …...
Java SE 面经
1、Java 语言有哪些特点 Java 语言的特点有: ①、面向对象。主要是:封装,继承,多态。 ②、平台无关性。一次编写,到处运行,因此采用 Java 语言编写的程序具有很好的可移植性。 ③、支持多线程。C 语言没…...
关于redis中的分布式锁
目录 分布式锁的基础实现 引入过期时间 引入校验id 引入lua脚本 引入看门狗 redlock算法 分布式锁的基础实现 多个线程并发执行的时候,执行的先后顺序是不确定的,需要保证程序在任意执行顺序下,执行逻辑都是ok的。 在分布式系统中&am…...
SQL Server数据库慢SQL调优
SQL Server中慢SQL会显著降低系统性能并引发级联效应。首先,用户直接体验响应时间延长,核心业务操作(如交易处理、报表生成)效率下降,导致客户满意度降低甚至业务中断。其次,资源利用率失衡,CPU…...
【css酷炫效果】实现鱼群游动动态效果
【css酷炫效果】实现小鱼游动动态效果 缘创作背景css代码创建div容器引入jquery引入鱼群js完整代码效果图成品资源下载链接:点击下载 缘 在开发系统功能的时候,无意间看到了小鱼游动特效,感觉很有意思,就在网上找了相关教程,分享给大家。 创作背景 刚看到csdn出活动了…...
kubectl describe pod 命令以及输出详情讲解
kubectl describe pod 命令格式 kubectl describe pod <pod-name> -n <namespace><pod-name>:Pod 的名称。 -n <namespace>:指定命名空间,默认是当前命名空间。 controlplane ~ ✖ kubectl describe pod newpods-d…...
Python实战(2)-数据库支持
使用简单的纯文本文件可实现的功能有限。诚然,使用它们可做很多事情,但有时可能还需要额外的功能。你可能希望能够自动完成序列化,此时可求助于shelve和pickle(类似于shelve)。不过你可能需要比这更强大的功能。例如…...
Java面试黄金宝典4
1. 什么是泛型 ?与 T 的区别 原理 泛型是 Java 编程语言中的一个强大特性,它提供了编译时类型安全检查机制,允许在定义类、接口和方法时使用类型参数。这些类型参数在使用时会被具体的类型所替代,从而实现代码的复用和类型安全。泛…...
从 Snowflake 到 Databend Cloud:全球游戏平台借助 Databend 实现实时数据处理
导读:某全球游戏平台为全球数百万玩家提供实时的技能型游戏体验与无缝的实时互动。对该游戏平台而言,保持数据的实时更新和实时分析,对提升玩家互动和留存率至关重要。他们在使用 Snowflake 进行实时数据摄取和分析时遇到了重大挑战ÿ…...
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服务配置文件内容 …...
点击劫持详细透析
点击劫持(Clickjacking)是一种前端安全攻击手段,攻击者通过视觉欺骗诱导用户在不知情的情况下点击隐藏的页面元素,从而执行非预期的操作。以下是攻击过程的详细说明: 攻击过程步骤 攻击者构造恶意页面 创建一个恶意网页…...
C语言每日一练——day_12(最后一天)
引言 针对初学者,每日练习几个题,快速上手C语言。第十二天。(最后一天,完结散花啦) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ࿰…...
10、STL中的unordered_map使用方法
一、了解 1、unordered_map(哈希) unordered_map是借用哈希表实现的关联容器。 访问键值对O(1),最坏情况O(n),例如哈希冲突严重时。【n是一个哈希桶的元素数量】 unordered_map特性 键值对存储ÿ…...
本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】
目录 一、本地部署DS 二、建立本地知识库 1.安装python和必要的库 2.设置主目录工作区 3.编写文档解析脚本 4.构建向量数据库 三、基于DS,使用本地知识库检索 本地部署DS,其实非常简单,我写了一篇操作记录,我终于本地部署了DeepSeek-R1(图文全过程)-CSDN博客 安装…...
正则表达式引擎深入探讨
正则表达式引擎(Regular Expression Engine)是正则表达式得以“活起来”的核心。它是一个精密的软件组件,负责接收正则表达式和输入文本,解析模式并执行匹配或替换操作,最终输出结果——可能是简单的“是否匹配”&…...
监控视频联网平台在智慧水利中的应用
随着智慧城市建设的深入推进,智慧水利作为其中的重要组成部分,正逐步实现数字化、智能化和网络化转型。在这一过程中,监控视频联网平台凭借其高效的数据采集、传输与分析能力,成为智慧水利建设的关键技术支撑。以下是监控视频联网…...
深入解析素数筛法:从埃氏筛到欧拉筛的算法思想与实现
素数筛法是一种用于高效生成素数的算法。常见的素数筛法包括埃拉托斯特尼筛法(埃氏筛)和欧拉筛(线性筛)。下面我们将详细讲解这两种筛法的思想: 一、 埃拉托斯特尼筛法(埃氏筛) 思想࿱…...
关于前端指令
在前端开发中,指令(Directives)通常指在框架中使用的一种特殊的语法或机制,用于扩展 HTML 的功能。常见的指令主要存在于前端框架中,如 Vue.js、Angular 等。下面我们将分别介绍 Vue.js 和 Angular 中的常用指令&#…...
