【K8S系列】Pod详解

目录

序言

1 前言

2 为什么需要pod

3 什么是Pod?

3.1 Pod的组成

3.2 Pod的用途

3.3 Pod的生命周期

3.4 Pod的特点

4 Pod的使用

5 结论 

序言

任何一件事情,只要坚持六个月以上,你都可以看到质的飞跃。

今天学习一下K8s-Pod相关内容,希望此文,能帮助读者对K8s-pod有一个进一步的了解

文章标记颜色说明:

  • 黄色:重要标题
  • 红色:用来标记结论
  • 绿色:用来标记一级论点
  • 蓝色:用来标记二级论点

1 前言

Kubernetes(简称k8s)是一个流行的开源容器编排系统,它能够简化应用程序部署、管理和扩展。在Kubernetes中,Pod是最基本的部署单元

本文将对Kubernetes Pod进行详细介绍。

2 为什么需要pod

相信你在学习和使用 Kubernetes 项目的过程中,已经不止一次地想要问这样一个问题:

为什么我们会需要 Pod?

我们知道,容器的本质是一种特殊的进程,如果映射到系统中,容器镜像就是这个系统里的“.exe”安装包。那么 Kubernetes 呢?Kubernetes 就是操作系统!

在一个真正的操作系统里,进程并不是“孤苦伶仃”地独自运行的,而是以进程组的方式,“有原则地”组织在一起。

而 Kubernetes 项目所做的,其实就是将“进程组”的概念映射到了容器技术中,并使其成为了这个云计算“操作系统”里的“一等公民”。

Pod 是 Kubernetes 里的原子调度单位。这就意味着,Kubernetes 项目的调度器,是统一按照 Pod 而非容器的资源需求进行计算的。

关于 Pod 最重要的一个事实是:它只是一个逻辑概念。

也就是说,Kubernetes 真正处理的,还是宿主机操作系统上 Linux 容器的 Namespace 和 Cgroups,而并不存在一个所谓的 Pod 的边界或者隔离环境。

那么,Pod 又是怎么被“创建”出来的呢?

答案是:Pod,其实是一组共享了某些资源的容器。

具体的说:

Pod 里的所有容器,共享的是同一个 Network Namespace,并且可以声明共享同一个 Volume

pod的实现:

在 Kubernetes 项目里,Pod 的实现需要使用一个中间容器,这个容器叫作 Infra 容器。在这个 Pod 中,Infra 容器永远都是第一个被创建的容器,

而其他用户定义的容器,则通过 Join Network Namespace 的方式,与 Infra 容器关联在一起。这样的组织关系,叫做pod。可以用下面这样一个示意图来表达: 

 如上图所示,这个 Pod 里有两个用户容器 A 和 B,还有一个 Infra 容器。

Infra 容器一定要占用极少的资源,所以它使用的是一个非常特殊的镜像,叫作:k8s.gcr.io/pause。这个镜像是一个用汇编语言编写的、永远处于“暂停”状态的容器,解压后的大小也只有 100~200 KB 左右。

而在 Infra 容器“Hold 住”Network Namespace 后,用户容器就可以加入到 Infra 容器的 Network Namespace 当中了。

所以,如果你查看这些容器在宿主机上的 Namespace 文件,它们指向的值一定是完全一样的。

这也就意味着,对于 Pod 里的容器 A 和容器 B 来说:

  • 通信:它们可以直接使用 localhost 进行通信;
  • 网络:它们看到的网络设备跟 Infra 容器看到的完全一样;
  • IP地址:一个 Pod 只有一个 IP 地址,也就是这个 Pod 的 Network Namespace 对应的 IP 地址;
  • 其他网络资源:其他的所有网络资源,都是一个 Pod 一份,并且被该 Pod 中的所有容器共享;
  • 生命周期:Pod 的生命周期只跟 Infra 容器一致,而与容器 A 和 B 无关。

而对于同一个 Pod 里面的所有用户容器来说,它们的进出流量,认为都是通过 Infra 容器完成的。

这一点很重要,因为将来如果你要为 Kubernetes 开发一个网络插件时,应该重点考虑的是如何配置这个 Pod 的 Network Namespace,而不是每一个用户容器如何使用你的网络配置,这是没有意义的。

有了这个设计之后,共享 Volume 就简单多了:Kubernetes 项目只要把所有 Volume 的定义都设计在 Pod 层级即可。

3 什么是Pod?

Pod是Kubernetes中最小的可部署单元,它是一个或多个紧密关联的容器的组合,这些容器共享同一个网络命名空间和存储卷。Pod提供了一个抽象层,它封装了容器在节点上的运行环境,例如存储、网络和运行时环境。

3.1 Pod的组成

Pod由以下组件组成:

  • 容器:Pod中可以有一个或多个容器。
  • 共享存储:Pod中的所有容器都可以访问共享存储卷。
  • 网络:Pod中的所有容器都共享相同的网络命名空间和IP地址。

3.2 Pod的用途

Pod是K8s中最基本的计算单元,用于托管应用程序或服务。Pod可用于:

  • 运行单个容器应用程序
  • 运行多个相关容器应用程序
  • 运行应用程序和sidecar容器,sidecar容器提供支持应用程序所需的其他功能,如日志记录、监视和调试。
  • 提供应用程序和其依赖项之间的网络通信
  • 提供应用程序和存储之间的访问

3.3 Pod的生命周期

Pod具有以下生命周期:

  • 创建:当Pod定义被提交到K8s API服务器时,Pod被创建。
  • 运行:当Pod被调度到节点上时,Pod处于运行状态。
  • 更新:可以通过更新Pod的定义来更新Pod中的容器和其他资源。
  • 扩展:可以通过创建更多的Pod实例来扩展应用程序。
  • 删除:当Pod被删除时,Pod中的容器被停止并且Pod中的资源被释放。

3.4 Pod的特点

Pod具有以下特点:

  • Pod是最小的可部署单元,它封装了一个或多个容器。
  • Pod提供了容器共享网络和存储的能力
  • Pod具有自己的IP地址和DNS名称,可以作为一个独立的服务进行访问。
  • Pod可以水平扩展,即可以通过副本集进行复制并进行负载均衡。
  • Pod可以使用亲和性和反亲和性进行节点调度,以满足特定的调度需求。

4 Pod的使用

要创建一个Pod,必须定义一个Pod描述文件,该文件描述了Pod的规范、容器和相关的资源。下面是一个示例Pod描述文件:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

在上面的示例中,我们定义了一个名为nginx-pod的Pod,它包含一个名为nginx的容器,该容器使用最新的nginx镜像,并监听80端口。

要创建该Pod,可以使用kubectl apply命令:

kubectl apply -f nginx-pod.yaml

该命令将会创建一个名为nginx-pod的Pod,并且启动一个nginx容器。

5 结论

Pod是Kubernetes中最基本的部署单元,它封装了一个或多个容器,并提供容器共享网络和存储的能力

Pod也可以作为一个独立的服务进行访问,并且可以通过副本集进行复制并进行负载均衡。要使用Pod,必须定义一个Pod描述文件,并使用kubectl apply命令创建Pod。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL删除记录方式汇总

大家好,我是RecordLiu! 今天给大家分享的是SQL中删除记录的不同方式,我会用几道真题来给大家讲解。 题目直达链接: 牛客网在线SQL编程练习 切换到SQL篇就能看到了。 我这里先列下知识点: SQL中进行简单删除的语法是什么?SQL…

关于AI 绘画,我给你总结了一份详细的关键词(Prompt 知识)

写在前面 随着人工智能技术的不断发展,越来越多的应用场景被发掘。其中,AI绘画是一种新兴的领域,其应用范围涵盖了数字媒体、游戏设计、动画制作、艺术创作等多个领域。在本文中,我们将介绍AI绘画的基本概念、发展历程、技术原理…

最新JavaFx JDK17如何正确的打出可以使用的exe软件包

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、提前需要准备?二、打包步骤1.现将module-info.java删除 选中module-info.java 鼠标右键 Refactor 然后选择safe deleted2.编辑设置 路径 Run/edi…

教你安装各种应用环境-Nodejs

因为最近做项目用到了Nodejs,如果直接下那么用到的就是最新版本。我要用以前的版本这就让我产生了写这篇文章的想法。 安装官网 官网:https://nodejs.org/en 如果安装最新的直接下载安装就行,流程可以看后面。 流程 其他版本点击"O…

年薪30W+,待遇翻倍,我的经历值得每个测试人借鉴

从自考大专到出走公司,从半年无业露宿深圳北站,从8k…到11.5k…再到20k,我的经历值得每个测试人借鉴 或许学历并没有那么重要 12年高考之后,在朋友的介绍下(骗了过去),没有好好的读大学&#x…

Linux Redis主从复制 | 哨兵监控模式 | 集群搭建 | 超详细

Linux Redis主从复制 | 哨兵监控模式 | 集群搭建 | 超详细一 Redis的主从复制二 主从复制的作用三 主从复制的流程四 主从复制实验4.1 环境部署4.2 安装Redis(主从服务器)4.3 修改Master节点Redis配置文件 (192.168.163.100)4.4 修改Slave节点Redis配置文…

计算机网络 - TCP的效率与特性

前言 本篇是介绍部分TCP的特性,了解TCP提高传输速率的机制;如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录前言1. 滑动窗口2. 流量控制3.拥塞控制4.延时应答5. 捎带应答6. 面向字节流7. 异常…

Android FrameWork详细教程—第一个启动的程序--init 与 Zygote

第一个启动的程序–init 不管Java还是C运行一个程序都是以main方法作为入口。所以我们先看看init.cpp的main函数. 目录:/system/core/init/main.cpp 具体代码: int main(int argc, char** argv) { #if __has_feature(address_sanitizer)__asan_set_er…

Kaggle 赛题解析 | AMP 帕金森进展预测

文章目录一、前言二、比赛说明1. Evaluation2. Timeline3. Prize4. Code Requirements三、数据说明四、总结🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 竞赛题目:AMP-Parkinson’s Disease Progression Prediction 竞赛地址…

基于逻辑回归构建肿瘤预测模型

使用逻辑回归构建肿瘤预测模型 描述 乳腺癌数据集包括569个样本,每个样本有30个特征值(病灶特征数据),每个样本都属于恶性(0)或良性(1)两个类别之一,要求使用逻辑回归&…

spring beancopier Cannot invoke “Object.getClass()“ because “cause“ is null异常处理

我们项目用到spring beancopier, 在别的机器上运行正常,代码拉到我机器上就不正常了,抛出异常信息如题。 Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.ibm.riskmeasure.rwaservice.service.singlete…

ASP.NET Core MVC 从入门到精通之初窥门径

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生&#xff0c…

字节跳动软件测试面试过了,起薪20k

普通二本计算机专业毕业,从毕业后,第一份接触测试的工作是在一家通讯小公司,大部分接触的工作是以功能测试为主,一直都是几千块钱工资,还一度被派出差,以及兼职各种产品、运维、运营的活,感觉自…

真1分钟搞懂缓存穿透、缓存击穿、缓存雪崩

💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…

NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027

然后我们来看连接与关系部分 然后右键一个关系可以看他的配置 注意这个,如果添加多个关系,这里flowfile就会自动clone 然后可以看到连接的配置中有,flowfile过期时间配置,有back pressure 背压配置, 有负载均衡配置 这里的这个FlowFile Expiration是配置FlowFile在队列中的过期…

网络中的一些基本概念

组建网络的重要设备 集线器,交换机(组建局域网,不能跨局域网组建网络),路由器(wifi本质上是无线路由器,路由器的本质的把俩个局域网给连起来) 网络通信的一些基础概念 IP地址 标识了网络设备所在的位置 端口号 标识了一个具体的应用程序 协议 协议是网络通信的概念,约定好…

虹科案例 | 虹科Domo商业智能,助力保险公司逃离繁杂数据池!

金融行业的发展充满着不确定性,一个具备强大承保能力和精算专业知识的资金池,对于身处该领域的公司和个人都是十分必要的。 在全国城市联盟(NLC)的协助下成立的NCL Mutual会员制互助保险公司,为各个地区城市提供了稳定…

第13届蓝桥杯省赛真题剖析-2022年4月23日Scratch编程初中级组

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第121讲。 第13届蓝桥杯省赛举办了两次,这是2022年4月23日举行的第二次省赛,比赛仍然采取线上形…

MySQL SQL性能分析 慢查询日志、explain使用

SQL执行频率 MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的insert、update、delete、delect的访问频次: -- session 是查看当前会话; -- global 是查询全局数…

paddle实现手写数字识别模型继续解读

要点: 手写数字识别用简单的线性进行分类效果比较差,添加卷积层和池化层效果会相对较好。参考文档:百度官方文档 一 网络结构 前几节我们尝试使用与房价预测相同的简单神经网络解决手写数字识别问题,但是效果并不理想。原因是手…
最新文章