k8s——Pod详解

一、Pod基础概念

  1.1 Pod定义

  Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和Ingress对象,为Pod提供存储的PersistentVolume存储资源对象等。

  一个Pod下的容器必须运行于同一节点上。现代容器技术建议一个容器只运行一个进程,该进程在容器中PID命令空间中的进程号为1,可直接接收并处理信号,进程终止时容器生命周期也就结束了。若想在容器内运行多个进程,需要有一个类似Linux操作系统init进程的管控类进程,以树状结构完成多进程的生命周期管理。运行于各自容器内的进程无法直接完成网络通信,这是由于容器间的隔离机制导致,Pod对象是一组容器的集合,这些容器共享Network、UTS及IPC命令空间因此具有相同的域名、主机名和网络接口,并可通过IPC直接通信

Pod资源中针对各容器提供网络命令空间等共享机制的是底层基础容器,又叫pause基础容器(也可称为父容器),pause就是为了管理Pod容器间的共享操作,这个父容器需要能够准确地知道如何去创建共享运行环境的容器,还能管理这些容器的生命周期。为了实现这个父容器的构想,kubernetes中,用pause容器来作为一个Pod中所有容器的父容器。这个pause容器有两个核心的功能,一是它提供整个Pod的Linux命名空间的基础。二来启用PID命名空间,它在每个Pod中都作为PID为1进程(init进程),并回收僵尸进程。

  1.2 Pod管理方式

在Kubrenetes集群中Pod有如下两种使用方式

  • 一个Pod中运行一个容器。“每个Pod中一个容器”的模式是最常见的用法;在这种使用方式中,你可以把Pod想象成是单个容器的封装,kuberentes管理的是Pod而不是直接管理容器
  • 在一个Pod中同时运行多个容器。一个Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个Pod中的容器可以互相协作成为一个service单位。比如一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。

  

  1.3 pod共享资源

    pause容器使得Pod中的所有容器可以共享两种资源:网络存储

  • 网络:每个Pod都会被分配一个唯一的IP地址。Pod中的所有容器共享网络空间,包括IP地址和端口。Pod内部的容器可以使用localhost互相通信。Pod中的容器与外界通信时,必须分配共享网络资源(例如使用宿主机的端口映射)。
  • 存储:Pod可以指定多个共享的Volume。Pod中的所有容器都可以访问共享的Volume。Volume也可以用来持久化Pod中的存储资源,以防容器重启后文件丢失。

    总结:pause管理网络命名空间、共享存储、负载调用、健康检查、生存探针和协调生命周期,目的是让port之间能够相互共享存储、共享网络

  1.4 设计pod的用意

  • 在一组容器作为一个单元的情况下,难以对整体的容器简单地进行判断及有效地进行行动。比如,一个容器死亡了 那么引入与业务无关的Pause容器作为Pod的基础容器,以它的状态代表着整个容器组的状态,这样就可以解决该问题。
  • Pod里的多个应用容器共享Pause容器的IP,共享Pause容器挂载的Volume。这样解决了应用容器之间的通信问题以及文件共享问题

  1.5 pod分类

  • 自主式/静态pod:不被控制器管理的pod,没有自愈能力,一旦挂掉不会被重新拉起,而且副本数量不会因为达不到期望值而创建新的pod,即数据保存在节点上,一旦挂掉直接结束
  • 控制器管理的pod:被控制器管理的pod有自愈能力,一旦pod挂掉会被重新拉起,而且副本数量会因为达不到期望值而创建新的pod。简而言之,pod出现问题(生命周期删除、故障等)会自动重新拉起新的pod

  1.6 pod容器分类

  • 基础容器(infrastructure container)

  每次创建Pod时候就会创建,运行的每一个Pod都有一个pause-amd64的基础容器自动会运行,对于用户是透明的。

docker ps -a——进行docker容器的查看

  • 初始化容器(initcontainers)

  阻塞或者延迟应用容器的启动,可以为应用容器事先提供好运行环境和工具。多个init容器时是串行启动,每个init容器都必须在下一个init容器启动前完成启动和退出

  • 应用容器(Maincontainer)

  在所有init容器启动和退出后应用容器才会启动而且是并行启动的应用,提供业务的程序业务

  1.7 示例——启动两个init容器

  1.7.1 在opt下创建demo文件夹

  1.7.2 编辑demo1

官网示例:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/init-containers/

 1.7.3 启动服务并查看pod

  查看pod后发现init为0/2

  1.7.4 解决问题

  1.7.4.1 过滤出myapp

  1.7.4.2 查看pod详细信息

kubectl describe pod myapp-pod

  1.7.4.3 查看日志信息

  1.7.4.4 查看系统信息和服务

    发现服务下没有,需要创建一个server

  1.7.4.5 编辑svc-demo1文件

  1.7.4.6 启动文件

    启动文件后,再次查看pod有相应服务 

  1.7.4.7 查看pod详细信息

    发现init-mydb如上方的操作方式一致

kubectl describe pod myapp-pod

  1.7.4.8 查看日志信息

kubectl logs myapp-pod -c init-myservice

  1.7.4.9 编辑svc-demo1文件

  1.7.4.10 执行文件

    执行文件后,需要等pod创建完

特别说明:

  • 在Pod启动过程中,Init容器会按顺序在网络和数据卷初始化之后启动。每个容器必须在下一个容器启动之前成功退出。
  • 如果由于运行时或失败退出,将导致容器启动失败,它会根据Pod的restartPolicy指定的策略进行重试。然而,如果Pod的restartPolicy设置为Always,Init容器失败时会使用RestartPolicy策略。
  • 在所有的Init容器没有成功之前,Pod将不会变成Ready状态。Init容器的端口将不会在Service中进行聚集。正在初始化中的Pod处于Pending状态,但应该会将Initializing状态设置为true。
  • 如果Pod重启,所有Init容器必须重新执行。
  • 对Init容器spec的修改被限制在容器image字段,修改其他字段都不会生效。更改Init容器的image字段,等价于重启该Pod。
  • Init容器具有应用容器的所有字段。除了readinessProbe,因为Init容器无法定义不同于完成(completion)的就绪(readiness)之外的其他状态。这会在验证过程中强制执行。
  • 在Pod中的每个app和Init容器的名称必须唯一;与任何其它容器共享同一个名称,会在验证时抛出错误。 

  1.8 镜像拉取策略

    Pod的核心是运行容器,必须指定容器引擎,比如Docker,启动容器时,需要拉取镜像,k8s的镜像拉取策略可以由用户指定,通常分为三类:

  • IfNotPresent:优先使用本地已存在的镜像,如本地没有则从仓库去拉取镜像
  • Always:总是从仓库拉取镜像,无论本地是否已存在镜像
  • Never:总是不从仓库拉取镜像,仅使用本地镜像

注意:

image nginx:latest或nginx 镜像的标签为latest或者无标签时,默认拉取镜像策略为always

nginx:1.14 镜像的标签为非latest时,默认的镜像为获取策略为IfNotPresent

  1.8.1 实例一

官方示例:https://kubernetes.io/docs/concepts/containers/images 

  1.8.1.1 编辑demo2 

  1.8.1.2 执行demo2并查看pod

  1.8.1.3 查看pod详细信息

 kubectl describe pod myapp-pod

  1.8.1.4 再次查看pod

  1.8.1.5 过滤出restart

  1.8.2 示例二

  1.8.2.1 编辑demo2并执行,同时查看pod

  1.8.2.2 查看pod详细信息

kubectl describe pod myapp-pod

  1.8.3 示例三 

  1.8.3.1 编辑demo2并执行

  1.8.3.2 查看日志信息

查看pod详细信息 

  1.8.3.3 查看pod

  1.8.4 示例四

    编辑demo2并执行,同时查看过滤出镜像的pod

  1.9 重启策略(restartPolicy)

    pod容器重启策略(restartPolicy)三种和container在同一层绑定。同时重启策略也分为三种:

  • Always:容器退出时总是重启容器,不管返回状态码如何,默认的Port重启策略
  • OnFailure:仅在容器异常退出时(返回状态码非0时)会重启策略
  • Never:容器退出时从不重启容器,不管返回状态如何

  1.9.1 实例一

  1.9.1.1 编辑并执行demo3,查看pod状态

  1.9.1.2 查看重启策略

  1.9.2 示例二

  1.9.2.1 编辑并执行demo3,查看pod状态

  1.9.2.2 再次查看pod

  1.9.3 示例三

  1.9.3.1 编辑并执行demo3

  1.9.3.2 查看pod状态

  1.9.4 示例四

  1.9.4.1 编辑并启动demo3 

  1.9.4.2 查看pod状态

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

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

相关文章

C#_库的引用

类库的引用 还可以自己引用类库:解决方案-添加-新建项目 主程序 using System; using System.Windows.Forms; using Tools;namespace ConsoleApp2 {class Program{static void Main(string[] args){//Console.WriteLine("helloword");// Form form ne…

北斗短报文终端 | 什么是北斗短报文功能?如何实现北斗短报文通信?

北斗短报文功能是指通过北斗卫星进行短报文通信的功能。这种功能允许用户在没有移动通信信号覆盖的偏远山区、海洋、沙漠等地带,通过北斗短报文终端发送和接收文本信息,进行基本的数据通信。 北斗短报文功能是指北斗卫星导航系统特有的双向报文通信功能。…

力扣654. 最大二叉树

Problem: 654. 最大二叉树 文章目录 题目描述思路复杂度Code 题目描述 思路 对于构造二叉树这类问题一般都是利用先、中、后序遍历,再将原始问题分解得出结果 1.定义递归函数build,每次将一个数组中的最大值作为当前子树的根节点构造二叉树;…

win11 wsl ubuntu24.04

win11 wsl ubuntu24.04 一:开启Hyper-V二:安装wsl三:安装ubuntu24.04三:桥接模式,固定IP四:U盘使用五:wsl 从c盘迁移到其它盘参考资料 一:开启Hyper-V win11家庭版开启hyper-v 桌面…

Python异常处理:打造你的代码防弹衣!

Hi,我是阿佑,上文咱们讲到——揭秘Python的魔法:装饰器的超能力大揭秘 ‍♂️✨,阿佑将带领大家通过精准捕获异常、使用with语句和上下文管理器、以及异常链等高级技巧来增强代码的健壮性。就像为代码穿上防弹衣,保护它…

【JavaScript】文件下载

文件下载的消息格式 服务器只要在响应头中加入 Content-Disposition: attachment; filename"kxx" 即可触发浏览器的下载功能其中: attachment 表示附件,浏览器看到此字段,触发下载行为(不同的浏览器下载行为有所区别&…

AI原生嵌入式矢量模型数据库ChromaDB-部署与使用指南

在人工智能大模型领域, 离不开NLP技术,在NLP中词向量是一种基本元素,如何存储这些元素呢? 可以使用向量数据库ChromeDB Chroma Chroma 是 AI 原生开源矢量数据库。Chroma 通过为 LLM 提供知识、事实和技能,使构建 L…

Leetcode刷题笔记4:链表基础2

导语 leetcode刷题笔记记录,本篇博客记录链表基础2部分的题目,主要题目包括: 24 两两交换链表中的节点19 删除链表的倒数第N个节点160 链表相交142 环形链表II 链表的定义 Python中,对于一个链表的节点定义非常简单&#xff0…

【算法】前缀和算法——和为k的子数组之和

题解:和为k的子数组之和(前缀和算法) 目录 1.题目2.题解思路2.1前缀和 哈希表,算法步骤:2.2细节如下:2.3参考代码: 3.总结及思考 1.题目 题目链接:LINK 2.题解思路 暴力求解自然不用多说,时…

STM32电机驱动模块(L9110S)

一、L9110S简介 L9110S是一种常用的双通道H桥电机驱动器集成电路,用于控制直流电机的方向和速度。它可以同时控制两个电机,每个通道最大可输出800mA的电流。L9110S具有高效的电源管理和过流保护功能,可以保护电路免受电机反冲电流的损害。它…

产品推荐 | 基于Xilinx XCKU115的半高PCIe x8 硬件加速卡

一、板卡概述 本板卡系我公司自主研发,采用Xilinx公司的XCKU115-3-FLVF1924-E芯片作为主处理器,主要用于FPGA硬件加速。板卡设计满足工业级要求。如下图所示: 二、功能和技术指标 板卡功能 参数内容 主处理器 XCKU115-3-FLVF1924-E 板卡…

基于Matlab实现BP神经网络的手写数字识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手写数字识别是计算机视觉和模式识别领域的一个经典问题,具有广泛的应用场景&…

深度学习模型keras第十七讲:使用 KerasCV 进行目标检测

1、绪论 1.1 KerasCV概念 KerasCV是一个模块化计算机视觉组件库,它可与TensorFlow、JAX或PyTorch原生配合使用。这些模型、层、指标、回调等基于Keras Core构建,可以在任何框架中进行训练和序列化,并在另一个框架中重复使用,而无…

基于Matlab完整版孤立词识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 孤立词识别是语音识别领域的一个重要分支,其目标是将输入的语音信号转换为计算机可…

C#【进阶】迭代器

迭代器 文章目录 1、迭代器概念2、标准迭代器的实现方法3、用yield return 语法糖实现迭代器4、用yield return 语法糖为泛型类实现迭代器 1、迭代器概念 迭代器(iterator) 又称光标(cursor) 是程序设计的软件设计模式 迭代器提供…

DVWA登录页面空白问题解决

问题: 创建完成后打开登录页面,发现打不开,一片空白 解决: php版本不对,更换版本即可

开发者必看:Linux终端的10大装逼神器,让你的命令行炫酷起来!

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

工具推荐:市面上有哪些带有ai问答机器人的SaaS软件

众所周知,SaaS(软件即服务)模式下的AI问答机器人已经逐渐成为企业、个人在办公、生活和学习中的辅助工具。ai问答机器人凭借高效、便捷、智能的特点,为用户提供了全新的交互体验。本文将推荐几款市面上好用的带有ai问答机器人的Sa…

小目标检测篇 | YOLOv8改进之更换Neck网络为BiFPN + 添加小目标检测层

前言:Hello大家好,我是小哥谈。小目标检测是计算机视觉领域中的一个研究方向,旨在从图像或视频中准确地检测和定位尺寸较小的目标物体。相比于常规目标检测任务,小目标检测更具挑战性,因为小目标通常具有低分辨率、低对比度和模糊等特点,容易被背景干扰或遮挡。本篇文章就…

Hadoop数据压缩和压缩案例实操

文章目录 数据压缩概述MR支持的压缩编码格式和各自优缺点压缩实操案例1.Map输出端采用压缩2.Reduce输出端采用压缩 数据压缩概述 Hadoop数据压缩是一种通过特定的算法来减小计算机文件大小的机制。这种机制在Hadoop中尤其重要,因为它可以有效减少底层存储系统&…