Pod 和容器的设计模型

一、为什么需要 Pod:

1、容器的基本概念:

容器的本质实际上是一个进程,是一个视图被隔离,资源受限的进程。容器里面 PID=1 的进程就是应用本身,这意味着管理虚拟机等于管理基础设施,但管理容器却等于直接管理应用本身。

Kubernetes 是云时代的操作系统,容器镜像就是这个操作系统的软件安装包。

2、真实操作系统中的例子:

Helloworld 程序实际上是由一组进程组成的,从 Linux 系统中去查看 Helloworld 中的 pstree,将会看到这个 Helloworld 实际上是由四个线程组成的,分别是 {api、main、log、compute}。也就是说,四个这样的线程共同协作,共享 Helloworld 程序的资源,组成了 Helloworld 程序的真实工作情况。

3、进程组的概念:

容器可以类比为进程,那么 Pod 就是进程组。

(1) 容器实际上是一个“单进程”模型,意思是容器的生命周期等同于 PID=1 的进程(容器应用进程)的生命周期,不是说容器里不能创建多进程。

一般情况下,容器应用进程并不具备进程管理能力,所以通过 exec 或者 ssh 在容器里创建的其他进程,一旦异常退出(比如 ssh 终止)很容易变成孤儿进程。

(2) Pod 实际上是 kubernetes 项目抽象出来的一个可以类比为进程组的概念。

由四个进程共同组成的一个应用 Helloworld,在 Kubernetes 里面,实际上会被定义为一个拥有四个容器的 Pod。

Pod 在 Kubernetes 里面只有一个逻辑单位,没有一个真实的东西对应 Pod,真正起来在物理上存在的东西,就是四个容器。这四个容器,或者说是多个容器的组合就叫做 Pod。

Pod 是 Kubernetes 分配资源的一个单位,因为里面的容器要共享某些资源,所以 Pod 也是 Kubernetes 的原子调度单位。

(3) Pod 是 Kubernetes 里的原子调度单位:Pod 是 Kubernetes 中最小的调度单位,包含一个或多个容器。通过将容器打包到 Pod 中,Kubernetes 可以更好地管理资源分配和调度。Pod 作为原子单位可以保证容器之间共享资源和网络等方面的一致性。

二、Pod 的实现机制:

容器之间原本是被 Linux Namespace 和 cgroups 隔开的,Pod 要解决的核心问题就是如何让一个 Pod 里的多个容器之间最高效的共享某些资源和数据。

1、共享网络:

(1) 有一个 Pod,其中包含了一个容器 A 和一个容器 B,它们两个要共享 Network Namespace。在 Kubernetes 里,它会在每个 Pod 中,额外起一个 Infra container 小容器来共享整个 Pod 的 Network Namespace。

(2) 一个 Pod 里面的所有容器,它们的网络设备、IP地址、Mac地址等等,跟网络相关的信息完全是一样的,都来自于 Pod 第一次创建的这个 Infra container。

(3) 所以整个 Pod 里面,必然是 Infra container 第一个启动。并且整个 Pod 的生命周期是等同于 Infra container 的生命周期的,与容器 A 和 B 无关。

2、共享存储:

把 volume 变成了 Pod level,在每一个容器里可以直接声明要挂载的volume,只要声明了挂载这个 volume,在容器里去看这个目录,大家看到的就是同一份。

三、容器设计模式 Sidecar

Sidecar 是说在 Pod 里面,可以定义一些专门的容器,来执行主业务容器所需要的一些辅助工作。

Sidecar 应用场景:

1、日志收集:

业务容器将日志写在一个 Volume 里面,由于 Volume 在 Pod 里面是被共享的,所以日志容器即 Sidecar 容器可以通过共享该 Volume,直接把日志文件读出来,然后存到远程存储里面。

2、代理容器:

假如有个 Pod 需要访问一个外部系统,但是这些外部系统是一个集群,可以通过 Sidecar 代理容器处理对接外部的服务集群,它对外暴露出来只有一个 IP 地址。业务容器主要访问 Proxy,然后由 Proxy 去连接这些服务集群。

3、适配器容器:

将业务容器暴露出来的接口转换为另一种格式。

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

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

相关文章

拿捏单链表

目录 引言 一:链表的定义 二:单链表的定义 三:单链表的增删查改 1.单链表增删查改及遍历的声明 注:在测试中创建指向头结点的指针plist 2.二级指针应用的说明 3.单链表的遍历 4.创建节点 5.单链表的插入 (1)头插 …

Linux操作系统——命名管道

我们前面说的管道都是只能具有血缘关系的进程进行进程间通信,如果我想让两个毫不相干的进程进行通信呢?那就需要来谈谈命名管道了。 命名管道 管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想…

软考 系统分析师系列知识点之信息系统战略规划方法(11)

接前一篇文章:软考 系统分析师系列知识点之信息系统战略规划方法(10) 所属章节: 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.7 价值链分析法 价值链分析(Value Chain Analysis,VCA&am…

【C++】---类和对象(中)默认成员函数 和 操作符重载

前言: 假如一个类中既没有成员变量也没有成员函数,那么这个类就是空类,空类并不是什么都没有,因为所有类都会生成如下6个默认成员函数: 一、构造函数 1、构造函数的定义及其特性 对于日期类对象,我们可…

pytest教程-10-allue2生成html报告

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest-html生成html报告的方法,本小节我们讲解一下使用allue2生成html报告。 自动化测试执行完成后我们需要展示给其他人看,这就要有自动化测试报告了。复杂的测试报告…

稳态准直太阳光模拟器

概述 稳态准直太阳光模拟器是一种用于模拟太阳光的设备。它能够产生高强度、高稳定性的太阳光,用于太阳能电池、太阳能热利用等领域的研究和实验。 稳态准直太阳光模拟器通常由以下几个部分组成: 光源:采用强度和颜色温度与太阳光接近的光源…

Rust 语言学习杂谈 (end) (各种工作中遇到的疑难杂症)

1.在运行 “cargo build --release” 的时候,到底发生了什么? 源 (GPT4.0) : 当我们运行 cargo build --release 命令时,实际上在进行一系列复杂的步骤来编译和构建 Rust 项目的发布版本。这个过程大致可以分解为以下几个步骤:…

2024年【危险化学品经营单位安全管理人员】考试报名及危险化学品经营单位安全管理人员考试资料

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试报名是安全生产模拟考试一点通总题库中生成的一套危险化学品经营单位安全管理人员考试资料,安全生产模拟考试一点通上危险化学品经营单位安全管理人员作业手机同步练习…

基于GPT一键完成数据分析全流程的AI Agent: Streamline Analyst

大型语言模型(LLM)的兴起不仅为获取知识和解决问题开辟了新的可能性,而且催生了一些新型智能系统,例如旨在辅助用户完成特定任务的AI Copilot以及旨在自动化和自主执行复杂任务的AI Agent,使得编程、创作等任务变得高效…

单片机学习笔记---直流电机驱动(PWM)

直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器…

正向代理和反向代理

文章目录 概述正向代理反向代理主要用途 概述 正向代理和反向代理都是网络中常见的代理类型,用于在客户端和服务器之间进行通信。 正向代理(Forward Proxy)是位于客户端和目标服务器之间的代理服务器。当客户端发送请求时,请求会…

批量梯度下降、随机梯度下降、小批量梯度下降

一、批量梯度下降(Batch Gradient Descent,BGD) 在批量梯度下降中,每次迭代都使用整个训练集的数据进行梯度计算和参数更新。也就是说,每次迭代都对所有的样本求取梯度,然后更新参数。由于要处理整个训练集&#xff0c…

算法沉淀——优先级队列(堆)(leetcode真题剖析)

算法沉淀——优先级队列 01.最后一块石头的重量02.数据流中的第 K 大元素03.前K个高频单词04.数据流的中位数 优先队列(Priority Queue)是一种抽象数据类型,它类似于队列(Queue),但是每个元素都有一个关联的…

WEB APIs(2)

应用定时器可以写一个定时轮播图&#xff0c;如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&qu…

如何在电脑和 SD 卡上恢复已删除 MOV等视频文件

MOV 是 Apple 创建的多媒体容器。您可能已经意识到&#xff0c;用 macOS QuickTime Player 录制的视频是以 MOV 格式保存的&#xff0c;而且 MOV 在 Windows 上也兼容。我们可能已经保存了很多 MOV 格式的视频。但是&#xff0c;如果这些 MOV 文件丢失或被意外删除怎么办&#…

Python二级考试笔记

Python二级考试笔记【源源老师】 01. 字符串 1. 常规功能合集 字符串本身有一些功能&#xff0c;有些之前运用过&#xff0c;这里总结如下&#xff1a; # 功能一&#xff1a;判断字符串类型 print(type("Hello")) print(str(123)) # 转换# 功能二&#xff1a;连…

OpenCV Mat实例详解 一

OpenCV中的Mat是一个类&#xff0c;它用存储图像信息。由两部分数据组成&#xff1a;矩阵头和像素值矩阵。矩阵头包含矩阵尺寸、存储方法、存储地址等信息&#xff0c;而像素值矩阵则存储实际的像素值数据。 Mat类在OpenCV中有十分重要的作用&#xff0c;图像信息的载入、保存、…

【知识图谱--第三讲知识图谱的存储与查询】

知识图谱的存储与查询 基于关系型数据库的知识图谱存储基于原生图数据库的知识图谱存储原生图数据库实现原理浅析 基于关系型数据库的知识图谱存储 基于原生图数据库的知识图谱存储 原生图数据库实现原理浅析

每日一题——LeetCode1437.是否所有1都至少相隔k个元素

方法一 两次遍历&#xff1a; 第一次遍历保存所有1的位置到res里&#xff0c;第二次遍历res检查是否所有相邻元素之间间隔都>k var kLengthApart function(nums, k) {let res[]for(let i0;i<nums.length;i){if(nums[i]1){res.push(i)}}for(let i1;i<res.length;i){…

Python 中实现线性搜索算法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 前言 线性搜索算法&#xff0c;也称为顺序搜索算法&#xff0c;是一种简单但常用的搜索技术&#xff0c;用于查…
最新文章