1. 为什么要有pod

Pod 这个词原意是“豌豆荚”,后来又延伸出“舱室”“太空舱”等含义,你可以看一下这张图片,形 象地来说 Pod 就是包含了很多组件、成员的一种结构。

之前的容器技术让进程在一个“沙盒”环境里运行,具有良好的隔离性,对应用是一个非常好的封装。

不过,当容器技术进入到现实的生产环境中时,这种隔离性就带来了一些麻烦。因为很少有应 用是完全独立运行的,经常需要几个进程互相协作才能完成任务,比如在我们搭建一个网站的时候,就需要Nginx,数据库,应用服务等容器一起工作。这三个应用之间的关系还是比较松散的,它们可以分别调度,运行在不 同的机器上也能够以 IP 地址通信。

但还有一些特殊情况,多个应用结合得非常紧密以至于无法把它们拆开。比如,有的应用运行 前需要其他应用帮它初始化一些配置,还有就是日志代理,它必须读取另一个应用存储在本地 磁盘的文件再转发出去。这些应用如果被强制分离成两个容器,切断联系,就无法正常工作 了。

为了解决这样多应用联合运行的问题,同时还要不破坏容器的隔离,就需要在容器外面再建立 一个“收纳舱”,让多个容器既保持相对独立,又能够小范围共享网络、存储等资源,而且永远 是“绑在一起”的状态。

所以,Pod 的概念也就呼之欲出了,容器正是“豆荚”里那些小小的“豌豆”,你可以在 Pod 的 YAML 里看到,“spec.containers”字段其实是一个数组,里面允许定义多个容器。

2. 为什么 Pod 是 Kubernetes 的核心对象

因为 Pod 是对容器的“打包”,里面的容器是一个整体,总是能够一起调度、一起运行,绝不会 出现分离的情况,而且 Pod 属于 Kubernetes,可以在不触碰下层容器的情况下任意定制修 改。所以有了 Pod 这个抽象概念,Kubernetes 在集群级别上管理应用就会“得心应手”了。

Kubernetes 让 Pod 去编排处理容器,然后把 Pod 作为应用调度部署的最小单位,Pod 也因此成为了 Kubernetes 世界里的“原子”(当然这个“原子”内部是有结构的,不是铁板一块),基于 Pod 就可以构建出更多更复杂的业务形态了。

从这张图中你也应该能够看出来,所有的 Kubernetes 资源都直接或者间接地依附在 Pod 之 上,所有的 Kubernetes 功能都必须通过 Pod 来实现,所以 Pod 理所当然地成为了 Kubernetes 的核心对象。

3. 使用 YAML 描述 Pod

既然 Pod 这么重要,那么我们就很有必要来详细了解一下 Pod,理解了 Pod 概念,我们的 Kubernetes 学习之旅就成功了一半。

在 K8S 中,我们通常使用 YAML 文件来定义和创建 Pod。YAML 文件以简洁、易读的格式描述了 Pod 的各种配置信息,就像是一份详细的建筑蓝图,告诉 K8S 该如何构建我们的 Pod。

下面是一个使用 YAML 文件创建 Pod 的简单示例:

apiVersion: v1
kind: Pod
metadata:name: my-podlabels:app: my-app
spec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80

在这个示例中,apiVersion字段指定了 K8S API 的版本,它就像是一个软件的版本号,不同的版本可能会有不同的功能和特性 。kind字段明确了我们要创建的资源类型是 Pod,这是告诉 K8S 我们要构建的是一个 “房子”,而不是其他类型的资源。

metadata字段则包含了 Pod 的元数据信息,其中name是 Pod 的名称,就像每个人都有自己的名字一样,Pod 也需要一个唯一的名称来标识自己 。labels是标签,它是一种键值对形式的元数据,我们可以给 Pod 添加各种标签,用于对 Pod 进行分类和筛选,比如这里的app: my-app标签,就可以帮助我们快速找到所有属于my-app应用的 Pod。

spec字段是整个 YAML 文件的核心部分,它定义了 Pod 的具体规格和配置。containers字段列出了 Pod 中包含的容器信息,这里我们定义了一个名为my-container的容器,它使用的镜像nginx:latest,这就像是告诉 K8S 我们要在这个 “房间” 里安装什么 “家具” 。ports字段指定了容器要暴露的端口,这里我们将容器的 80 端口暴露出来,这样外界就可以通过这个端口访问到容器内运行的 Nginx 服务。

当我们编写好 YAML 文件后,只需要执行kubectl apply -f my-pod.yaml命令,K8S 就会根据这个文件的描述创建出对应的 Pod。

4. pod管理

创建好 Pod 之后,我们还需要对它进行各种管理操作,以确保它能够稳定运行。kubectl 工具为我们提供了丰富的命令来实现这些操作 。​

要查看 Pod 的状态和详细信息,可以使用kubectl get pods命令,它会列出所有 Pod 的基本信息,包括名称、状态、运行的节点等 。如果想要查看某个 Pod 的详细信息,比如容器的运行日志、资源使用情况等,可以使用kubectl describe pod my-pod命令,它就像是一个放大镜,帮助我们深入了解 Pod 的内部状态 。​

当我们需要进入 Pod 容器内部进行调试或执行一些命令时,可以使用kubectl exec -it my-pod -- /bin/bash命令,其中-it参数表示以交互模式进入容器,--后面的/bin/bash表示在容器内执行的命令,这里我们进入了容器的 bash 终端,就可以像在本地服务器上一样执行各种命令了 。​

如果需要对 Pod 的配置进行修改,可以使用kubectl edit pod my-pod命令,它会打开一个编辑器,让我们直接修改 Pod 的 YAML 配置文件,修改保存后,K8S 会自动应用这些更改,就像是给房子重新装修一样,让 Pod 拥有新的 “面貌” 。​

当某个 Pod 不再需要时,我们可以使用kubectl delete pod my-pod命令将其删除,释放集群资源。但要注意,删除 Pod 时要谨慎操作,避免误删重要的应用服务 。​

通过这些 kubectl 命令,我们可以轻松地对 Pod 进行创建、查看、管理和删除等操作,让我们能够灵活地掌控 K8S 集群中的应用服务。

5. 小结

通过上面的学习,了解了Kubernetes 里最核心最基本的概念 Pod,知道了应该如何使用 YAML 来定制 Pod,还有如何使用 kubectl 命令来创建、删除、查看、调试 Pod。

虽然 Pod 是 Kubernetes 的核心概念,非常重要,但事实上在 Kubernetes 里通常并不会直接 创建 Pod,因为它只是对容器做了简单的包装,比较脆弱,离复杂的业务需求还有些距离,需 要 Job、CronJob、Deployment 等其他对象增添更多的功能才能投入生产使用。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 基本教程-运行一个最小demo

Vue 3 基本教程 - 运行一个最小 Demo 1. 创建项目 使用 Vue 官方脚手架工具创建一个新项目: # 安装 Vue CLI (如果尚未安装) npm install -g vue/cli# 创建一个新项目 vue create vue3-demo# 选择 Vue 3 预设 # 使用方向键选择 "Default (Vue 3)" 然后按 …

大数据新视界 -- Hive 集群搭建与配置的最佳实践(2 - 16 - 13)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的博客,正是这样一个温暖美好的所在。在这里,你们不仅能够收获既富有趣味又极为实…

C/C++ 转 Java 的数据结构初阶对比指南

一、先遣了解和回顾1、预览快速对比表格数据结构​​​​C/C 实现​​​​Java 实现​​​​关键区别​​​​数组​​int arr[5];int[] arr new int[5];语法类似&#xff0c;Java 数组是对象​​动态数组​​vector<int> v;ArrayList<Integer> list new ArrayLi…

长连接和短连接

在网络通信中&#xff0c;长连接&#xff08;Long Connection&#xff09;和短连接&#xff08;Short Connection&#xff09;是两种核心的连接管理策略&#xff0c;其区别主要体现在连接生命周期、资源占用和适用场景上。以下是两者的详细解析&#xff1a;一、核心概念对比特性…

Java:使用spring-cloud-gateway的应用报DnsNameResolverTimeoutException原因和解决方法

使用spring-cloud-gateway时&#xff0c;有时会报DnsNameResolverTimeoutException异常。堆栈信息类似&#xff1a;Caused by: java.net.UnknownHostException: Failed to resolve cloudconnector.linkup-sage.comat io.netty.resolver.dns.DnsResolveContext.finishResolve(Dn…

SpringCloud概述

目录 一、概念 1.1 微服务架构 1.2 SpringCloud概念 1.3 核心价值 1.4 能力边界 1.5 微服务总体架构图 二、生态圈 2.1 不同生态圈组件对比 2.2 组件介绍 2.2.1 服务发现与注册 2.2.2 配置管理 2.2.3 API网关 2.2.4 容错与熔断 2.2.5 客户端负载均衡 2.2.6 服务…

光伏电站环境监测仪—专为光伏电站设计的气象监测设备

光伏电站环境监测仪是专为光伏电站设计的气象监测设备&#xff0c;通过实时采集关键环境参数&#xff0c;为光伏系统的发电效率评估、运维决策和安全预警提供数据支撑。监测参数太阳辐射采用高精度总辐射表&#xff0c;测量水平面总辐射和倾斜面辐射&#xff0c;精度达 2% 以内…

Node.js ≥ 18 安装教程

Windows 安装 下载安装包&#xff1a;访问 Node.js官网&#xff0c;下载最新的 LTS 版本&#xff08;确保版本 ≥ 18&#xff09;运行安装程序&#xff1a;双击下载的安装文件&#xff0c;按照向导完成安装验证安装&#xff1a;打开命令提示符或PowerShell&#xff0c;输入以下…

电脑 hdmi 没有声音问题解决

问题现象&#xff1a;电脑耳机声音正常输出&#xff0c;使用hdmi连接电视后&#xff0c;没有声音输出。&#xff08;正常会通过hdmi 在电视上播放视频和声音&#xff09;解决方案:出现该情况很可能原因是 显卡的驱动不对。网上找了各种方法都没有解决&#xff0c;最后系统升级后…

学习日记-XML-day55-9.14

1.xml基本介绍知识点核心内容重点XML定义可扩展标记语言&#xff0c;用于数据存储和传输与HTML的区别&#xff08;HTML用于展示&#xff0c;XML用于结构化数据&#xff09;XML用途1. 配置文件&#xff08;Spring的beans.xml、Tomcat的server.xml&#xff09;;2. 数据交换&#…

【系统架构设计(27)】信息安全技术集成

文章目录一、本文知识覆盖范围二、信息安全基础要素详解1、机密性保障技术2、完整性验证技术3、可用性保障技术4、可控性管理技术5、可审查性追溯技术三、网络安全威胁与防护策略1、非授权访问防护2、拒绝服务攻击防护3、恶意软件传播防护四、加密技术体系与应用1、对称加密技术…

什么是 SaaS 安全?

什么是 SaaS 安全&#xff1f; SaaS 安全专注于保护云中的数据、应用程序和用户身份。它旨在应对基于云的软件所面临的挑战&#xff0c;以确保信息的安全性和可用性。SaaS 安全致力于降低未授权访问、数据泄露等风险&#xff0c;同时增强 SaaS 应用程序的安全性。 SaaS 安全不仅…

mysql和postgresql如何选择

h5打开以查看 简单来说&#xff1a; MySQL&#xff1a;更像是一个“快速、可靠的工匠”&#xff0c;注重速度、简单和稳定性&#xff0c;尤其在读操作密集的Web应用中是经典选择。 PostgreSQL&#xff1a;更像是一个“功能强大的学者”&#xff0c;追求功能的完备性、标准的符…

Redis最佳实践——安全与稳定性保障之数据持久化详解

Redis 在电商应用的安全与稳定性保障之数据持久化全面详解一、持久化机制深度解析 1. 持久化策略矩阵策略触发方式数据完整性恢复速度适用场景RDB定时快照分钟级快容灾备份/快速恢复AOF实时追加日志秒级慢金融交易/订单关键操作混合模式RDBAOF同时启用秒级中等高安全要求场景无…

Data Augmentation数据增强

目录 数据增强是什么 为什么数据增强 数组增强分类 有监督数据增强 无监督数据增强 数据增强是什么 数据增强又称数据扩增&#xff0c;是一种通过应用合理且随机的变换&#xff08;例如图像位移、旋转&#xff09;来增加训练集多样性的技术。让有限的数据产生等价于更多数…

OpenCV:特征提取

目录 一、特征提取核心概念&#xff1a;什么是图像特征&#xff1f; 二、实战 1&#xff1a;Harris 角点检测 1.1 角点的物理意义 1.2 Harris 算法原理 1.3 OpenCV 实战代码与解析 1.4 结果分析 三、实战 2&#xff1a;SIFT 特征提取 3.1 SIFT 算法核心优势 3.2 SIFT…

MySQL的查找加速器——索引

文章目录 目录 前言 一、基础概念&#xff1a;什么是 MySQL 索引&#xff1f; 二、底层数据结构&#xff1a;为什么 InnoDB 偏爱 B 树&#xff1f; B 树的结构特点&#xff08;以短链接表short_link的short_code索引为例&#xff09;&#xff1a; B 树的优势&#xff1a…

【Vue2手录11】Vue脚手架(@vue_cli)详解(环境搭建+项目开发示例)

一、前言&#xff1a;为什么需要 Vue 脚手架&#xff1f; 手动搭建 Vue 项目存在诸多痛点&#xff08;原笔记提及&#xff09;&#xff1a; 依赖管理复杂&#xff1a;需手动下载 Vue、Babel、Webpack 等工具&#xff0c;处理版本兼容性。配置繁琐&#xff1a;Webpack 配置、E…

自签发、CA机构签发、SSH、SCP、RSYNC,SUDO详解

一、为什么&#xff1f; 1. 自建CA为什么比Lets Encrypt强&#xff1f; 不能把CA放公网&#xff01;Lets Encrypt是给公网服务用的&#xff08;比如10.0.0.30的Web服务&#xff09;&#xff0c;但内网服务&#xff08;比如OpenVPN&#xff09;必须用自签CA。 CA私钥必须物理隔…

【Python】Python解决阿里云DataWorks导出数据1万条限制的问题

【Python】Python解决阿里云DataWorks导出数据1万条限制的问题一、前言二、脚本功能概述三、核心代码解析**1. 环境配置与安全设置****2. 用户配置区****3. 数据清洗函数****4. 核心逻辑**四、完整代码演示五、总结一、前言 在日常数据分析工作中&#xff0c;团队经常需要从阿…