k8s、pod

Pod

k8s中的port【端口:30000-32767】

port :为Service 在 cluster IP 上暴露的端口

targetPort:对应容器映射在 pod 端口上

nodePort:可以通过k8s 集群外部使用 node IP + node port 访问Service

containerPort:容器内部使用的端口

k8s 集群内部流程:

客户端→clusterIP:port→通过 tagerport→pod IP:container port

k8s 集群外部流程:

客户端→nodeIP:nodeport→通过 tagerport→pod IP:container port

 

k8s中的pod A 与 pod B 怎么互相通信
同一个节点

pause容器启动之前,会为容器创建虚拟一对ethernet接口,一个保留在宿主机vethxx(插在网桥Q上),一个保留在容器网络命名空间内,并重命名为eth0。两个虚拟接口的两端,从一端进入,另一端出来。任何Pod连接到该网桥的Pod都可以收发数据。

跨节点

跨节点Pod通信,相当于创建一个整个集群公用的【网桥】然后把集群中所有的Pod连接起来,就可以通信了。其中跨整个集群的 Pod ip 是唯一的,当报文从一个节点转发到另外一个节点时,报文首先通过veth,然后通过网桥转发到物理适配器网卡,最后转发到其它节点的虚拟网桥,进而到达veth目标容器。其实现方式有Flannel、calico、weave等。

pod基本概念

         pod是 k8s 最小的创建和运行单元,一个 pod 包含几个容器

pod 存在的意义
  • 在一组容器作为一个单元的情况下,难以对整体的容器简单地进行判断及有效地进行行动。(比如,一个容器死亡那么引入与业务无关的Pausc容器作为Pod的基础容器,以它的状态代表若整个容器组的状态,这样就可以解决该问题)

  • Pod里的多个应用容器共享Pausc容器的TP,共享Pausc容器挂裁的Volume,这样简化了应用容器之问的通信问题,也解决了容器之间的文件共享问题

k8s创建的pod分为两类:
  • 自主式/静态pod

不被控制器管理的 pod ,没有自愈能力,一旦 pod 挂掉,不会被重新拉起,而且副本数量也不会因为达不到期望值而创建新的 pod

不存在etcd中

  • 控制器管理的pod

被控制器管理的 pod ,有自愈能力,一旦pod 挂掉,会被重新拉起,而且副本数量 会因为达不到期望值而创建新的 pod

在Kubrenetes集群中Pod有如下两种使用方式
  • 一个pod中运行一个容器

    可以把Pod想象成是单个容器的封装,k8s管理的是Pod而不是直接管理容器。

  • 一个pod中同时运行多个容器

    一个Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个Pod中的容器可以互相协作成为一个service单位,比如一个容器共享文件,另个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理

pause容器主要为每个容器提供以下功能:
  • 在pod中担任Linux命名空间 (如网络命令空间) 共享的基础;

  • 启用PID命名空间,开启init进程。

  • 协调他的容器生命周期

  • 提供健康检查和生存探针

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

    每个 pod 都会被分配一个唯一的IP地址,pod中所有容器共享网络空间,包括 ip 和端口

    pod 内部的容器可以使用 localhost 互相通信

    pod 中的容器与外界通信时,必须分配共享网络资源【例如使用宿主机的端口映射】

  • 存储

    pod可以指定多个共享的 volume,pod中的所有容器都可以访问共享的 volume

    Volume也可以用来持久化Pod中的存储资源,以防容器重启后文件丢失

总结:

每个 Pod 都有一个特殊的被称为"基础容器"的 Pause 容器。Pause 容器对应的镜像属于K8s平台的一部分,除了 pause 容器,每个 Pod 还包含一个或者多个紧密相关的用户应用容器。

三种容器:
1、pause容器
  • 给pod中的所有应用容器提供网络(共享IP)和存储(共享存储)。
  • 资源共享:作为PID=1的进程【int进程】,管理整个pod 种容器组生命周期
2、初始化容器(init容器)
  • 阻塞或者延迟应用容器的启动,可以为应用容器实现提供好运行环境和工具
  • 多个init容器时,串行启动,每个init容器都必须在下一个init容器启动前完成启动和退出
3、应用容器(main)
  • 在所有init容器成功启动和退出后应用容器才会启动 并行启动的,提供应用程序的业务

 

镜像拉取的策略【imagePullPolicy】
  • IfNotPresent:优先使用本地已存在的仓库,如本地没有,则从仓库镜像拉取

  • Always:总是从仓库拉取镜像 ,无论本地是否已存在镜像

  • Never:总是不从仓库拉去镜像 ,仅使用本地镜像

【注意:对于标签为 "latest" 的镜像文件,其默认的镜像获取策略即为 "Always" 而对于其他标签的镜像,其默认策略则为 "IfNotPresent"】

Pod容器的重启策略【restartPolicy】

container在同一层

  • Always:当容器退出后,总是重启容器,不管返回状态码如何【默认策略】

  • OnFailure:仅在容器异常退出时,【返回状态码非0】时,会重启容器

  • Never:容器退出时,从不重启容器,不管返回状态码如何

【注意: K8S 中不支持重启 Pod 资源,只有先重建后删除】

例1、

例2、 

 

资源限制

当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源。

当为 Pod 中的容器指定了 request 资源时,调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为容器指定了 limit 资源时,kubelet 就会确保运行的容器不会使用超出所设的 limit 资源量。kubelet 还会为容器预留所设的 request 资源量, 供该容器使用。

如果 Pod 运行所在的节点具有足够的可用资源,容器可以使用超出所设置的 request 资源量。不过,容器不可以使用超出所设置的 limit 资源量。

如果给容器设置了内存的 limit 值,但未设置内存的 request 值,Kubernetes 会自动为其设置与内存 limit 相匹配的 request 值。 类似的,如果给容器设置了 CPU 的 limit 值但未设置 CPU 的 request 值,则 Kubernetes 自动为其设置 CPU 的 request 值 并使之与 CPU 的 limit 值匹配。

官网示例:

https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
 

Pod 和容器的资源请求和限制:

spec.containers [] .resources.requests.cpu       #定义创建容器时预分配的CPU资源
spec.containers [] .resources.requests.memory    #定义创建容器时预分配的内存资源
【创建pod容器时需要预留的资源,例:0.5 或者 500m 】spec.containers [] .resources.limits.cpu         #定义 cpu 的资源上限
spec.containers [] .resources.limits.memory      #定义内存的资源上限
【pod容器能够使用的资源量的上限 MI、GI(2为底数),MI、GI(10为底数)】
例:

生存探针(包含存活、就绪、启动)

  • livenessProbe【存活探针】

    判断容器是否正在运行如果检测失败,则杀掉容器(不是pod),容器会根据容器策略决定是否重启

  • readinessProbe【就绪探针】

    判断pod是否能够进入ready状态,做好接受请求的准备,如果探测失败就会进入 notready 状态并且 service 资源的 endpoints 中剔除,service将不会把访问请求转发给这个 pod

  • startupProbe【启动探针】

    判断容器内的应用程序是否已启动,在探测成功转变为success之前,其他探针都会处于失效状态

Probe支持三种检查方法:
  • exec

    通过command 设置执行在容器内执行的linux命令来探测,返回码为0,则表示探测成功

  • tcpSocket

    对指定端口上的容器的IP地址进行TCP检查(三次握手)。如果端口打开,则诊断被认为是成功的

  • httpGet

    通过 http get 请求指定的容器端接口和 url路径,如果返回状态大于200且小于400,则表示成功

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

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

相关文章

velero备份k8s集群

流程图 velero备份原理 本地 Velero 客户端发送备份指令。Kubernetes 集群内就会创建一个 Backup 对象。BackupController 监测 Backup 对象并开始备份过程。BackupController 会向 API Server 查询相关数据。BackupController 将查询到的数据备份到远端的对象存储。 velero的…

osg三角带

案例1 #include <osg/Geode> #include <osg/Geometry> #include <osgDB/Registry> #include <osgDB/WriteFile> #include <osg/Notify> #include <osg/PrimitiveSet> #include <osgViewer/Viewer> #include <osgUtil/Optimizer&g…

【数据结构】希尔排序

文章目录 前言一、希尔排序的演示图例二、希尔排序&#xff1a;插入排序的优化版本☆三、核心算法思路四、算法思路步骤&#xff08;一&#xff09;预排序 gap>1&#xff08;二&#xff09;gap1 插入排序 完成排序收尾 五、码源详解&#xff08;1&#xff09;ShellSort1 ——…

Linux CentOS7.9安装OpenJDK17

Linux CentOS7.9安装OpenJDK17 一、OpenJDK下载 清华大学开源软件镜像站 国内的站点&#xff0c;下载速度贼快 二、上传解压 文件上传到服务器后&#xff0c;解压命令&#xff1a; tar -zxvf jdk-xxxx-linux-x64.tar.gz三、配置环境 export JAVA_HOME/home/local/java/j…

idea 配置checkstyle全过程

checkstyle是提高代码质量,检查代码规范的很好用的一款工具&#xff0c;本文简单介绍一下集成的步骤&#xff0c;并提供一份完整的checkstyle的代码规范格式文件&#xff0c;以及常见的格式问题的解决方法。 一&#xff0c;安装 打开idea的文件选项&#xff0c;选择设置&…

搜维尔科技:scalefit生物力学人体工学软件分析!

人体工程学分析 21加载参数和头像显示 识别(隐藏的)健康风险 根据DGUV交通灯进行生物反馈(DIN/ISO) 实时应力分析 三维空间可视化 静态/动态肩载 用左/右赋值加载输入 腰椎间盘压缩计算 距离和定时器显示 带有运动跟踪的化身/视频叠加 外骨骼与CAD工作站仿真 CSV原始…

【机器学习合集】模型设计之残差网络 ->(个人学习记录笔记)

文章目录 模型设计之残差网络1. 什么是残差结构1.1 网络加深遇到的优化问题1.2 short connect技术 2. 残差网络及有效性理解2.1 残差网络 3. 残差网络的发展3.1 密集残差网络3.2 更宽的残差网络(wide resnet)3.3 分组残差网络3.4 Dual Path Network3.5 加权残差网络3.6 预激活残…

WIN11如何固定文件夹查看方式

找一个文件夹&#xff0c;设置成自己需要的视图方式 文件夹选项>查看>应用到文件夹 缺点&#xff1a;所有相同类型文件夹都会使用此视图

数据结构——线性表①(顺序表)

一、线性表定义 线性表是一种数据结构&#xff0c;它是由n个具有相同数据类型的数据元素a1,a2,…,an组成的有限序列。 其中&#xff0c;除第一个元素a1外&#xff0c;每一个元素有且只有一个直接前驱元素&#xff0c;除了最后一个元素an外&#xff0c;每一个元素有且只有一个…

Redis(11)| 持久化AOF和RDB

一、AOF&#xff08;Append Only File&#xff09; Redis 每执行一条写操作命令&#xff0c;就把该命令以追加的方式写入到一个文件里&#xff0c;然后重启 Redis 的时候&#xff0c;先去读取这个文件里的命令&#xff0c;并且执行它。 注意&#xff1a;只会记录写操作命令&am…

微信小程序:两层循环的练习,两层循环显示循环图片大图(大图显示、多层循环)

效果 代码分析 外层循环 外层循环的框架 <view wx:for"{{info}}" wx:key"index"></view> wx:for"{{info}}"&#xff1a;这里wx:for指令用于指定要遍历的数据源&#xff0c;即info数组。当遍历开始时&#xff0c;会依次将数组中的每…

stable-diffusion 电商领域prompt测评集合

和GhostReivew一个思路&#xff0c;还是从比较好的图片或者是civitai上找一些热门的prompt&#xff0c;从小红书上也找到了不少的prompt&#xff0c;lexica.art上也有不少&#xff0c;主要是为了电商场景的一些测评&#xff1a; 小红书、civitai、Lexica、Liblib.ai、 depth o…

Leetcode—707.设计链表【中等】双链表的设计明天再写

2023每日刷题&#xff08;十七&#xff09; Leetcode—707.设计链表 设计单链表实现代码 typedef struct Node {int val;struct Node* next; } MyLinkedList;MyLinkedList* myLinkedListCreate() {MyLinkedList* mList (MyLinkedList *)malloc(sizeof(MyLinkedList));mList-&…

Wpf 使用 Prism 实战开发Day02

一.设计首页导航条 导航条的样式&#xff0c;主要是从Material DesignThemes UI 拷贝过来修改的,项目用了这个UI组件库&#xff0c;就看自己需要什么&#xff0c;就去拷过来使用&#xff0c;界面布局或其他组件使用&#xff0c;不做介绍。 直接下载源码&#xff0c;编译运行就可…

【进程控制⑥】:进程替换/exec*()系列接口

【进程控制⑥】&#xff1a;进程替换/ exec*(&#xff09;系列接口 一.进程替换原理二.替换特点1.独立性2.唯一性3.不变性4.不返回 三.程序替换应用【exec*系列系统调用】①execl&#xff1a;②execlp&#xff1a;③execv&#xff1a;④execle&#xff1a; 一.进程替换原理 我…

视频编码转换技巧:视频批量转码H264转H265,高效且顺畅

随着数字媒体的广泛应用&#xff0c;视频编码转换已成为一种普遍的需求。不同的视频格式和编码标准使得在不同设备上播放视频成为可能&#xff0c;同时也带来了兼容性和传输效率的问题。本文讲解引用云炫AI智剪使视频编码转换技巧&#xff0c;即批量将H264编码转换为H265编码&a…

厦门万宾科技智能井盖监测仪器的作用如何?

越来越多的人们希望改善生活&#xff0c;走出农村走出大山&#xff0c;前往城市之中居住。由此城市的人口和车辆在不断增加&#xff0c;与之而来的是城市的交通压力越来越大&#xff0c;时常会出现道路安全隐患&#xff0c;这给城市未来发展和智慧城市建设都带来一定的难题&…

sass相关

1、代码简化 1.1、简化媒介查询 mixin flex{display: flex;justify-content: center;align-items: center; } .header{width: 100%;include flex;//可以这样引用 }//加入参数 mixin flex($layout){display: flex;justify-content: $layout;align-items: $layout; } .header{w…

智慧矿山AI算法助力护帮板支护监测,提升安全与效率

在智慧矿山AI算法系列中&#xff0c;护帮板支护监测是保障矿山安全和提高生产效率的重要环节。护帮板作为矿山支护体系中的重要组成部分&#xff0c;在矿山生产中起到了关键的作用。那么&#xff0c;护帮板在哪种状态下是正常打开的呢&#xff1f;本文将对此进行介绍。 护帮板的…

Mgeo:multi-modalgeographic language model pre-training

文章目录 question5.1 Geographic Encoder5.1.1 Encoding5.1.2 5.2 multi-modal pre-training 7 conclusionGeo-Encoder: A Chunk-Argument Bi-Encoder Framework for Chinese Geographic Re-Rankingabs ERNIE-GeoL: A Geography-and-Language Pre-trained Model and its Appli…