当前位置: 首页 > news >正文

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,则表示成功

相关文章:

k8s、pod

Pod k8s中的port【端口:30000-32767】 port :为Service 在 cluster IP 上暴露的端口 targetPort:对应容器映射在 pod 端口上 nodePort:可以通过k8s 集群外部使用 node IP node port 访问Service containerPort:容…...

一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium

大家好,我是python222小锋老师。前段时间卷了一套 Python3零基础7天入门实战 以及1小时掌握Python操作Mysql数据库之pymysql模块技术 近日锋哥又卷了一波课程,python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium,文字版视频版。1…...

睿趣科技:想知道开抖音小店的成本

随着互联网的发展,越来越多的人开始尝试通过开设网店来创业。抖音作为目前最受欢迎的短视频平台之一,也提供了开店的功能。那么,开一家抖音小店需要多少成本呢? 首先,我们需要了解的是,抖音小店的开店费用是…...

python项目部署代码汇总:目标检测类、人体姿态类

一、AI健身计数 1、图片视频检测 (cpu运行): 注:左上角为fps,左下角为次数统计。 1.哑铃弯举:12,14,16 详细环境安装教程:pyqt5AI健身CPU实时检测mediapipe 可视化界面…...

力扣每日一题92:反转链表||

题目描述&#xff1a; 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输…...

Vue+OpenLayers从入门到实战进阶案例汇总目录,兼容OpenLayers7和OpenLayers8

本篇作为《VueOpenLayers入门教程》和《VueOpenLayers实战进阶案例》所有文章的二合一汇总目录&#xff0c;方便查找。 本专栏源码是由OpenLayers结合Vue框架编写。 本专栏从Vue搭建脚手架到如何引入OpenLayers依赖的每一步详细新手教程&#xff0c;再到通过各种入门案例和综合…...

C#中使用LINQtoSQL管理SQL数据库之添加、修改和删除

目录 一、添加数据 二、修改数据 三、删除数据 四、添加、修改和删除的源码 五、生成效果 1.VS和SSMS原始记录 2.删除ID2和5的记录 3.添加记录ID2、5和8 4.修改ID3和ID4的记录 用LINQtoSQL管理SQL Server数据库时&#xff0c;主要有添加、修改和删除3种操作。 项目中创…...

飞致云及其旗下1Panel项目进入2023年第三季度最具成长性开源初创榜单

2023年10月26日&#xff0c;知名风险投资机构Runa Capital发布2023年第三季度ROSS指数&#xff08;Runa Open Source Startup Index&#xff09;。ROSS指数按季度汇总并公布在代码托管平台GitHub上年化增长率&#xff08;AGR&#xff09;排名前二十位的开源初创公司和开源项目。…...

Maven实战-私服搭建详细教程

Maven实战-私服搭建详细教程 1、为什么需要私服 首先我们为什么需要搭建Maven私服&#xff0c;一切技术来源于解决需求&#xff0c;因为我们在实际开发中&#xff0c;当我们研发出来一个 公共组件&#xff0c;为了能让别的业务开发组用上&#xff0c;则搭建一个远程仓库很有…...

uniapp-自定义表格,右边操作栏固定

uniapp-自定义表格&#xff0c;右边操作栏固定 在网上找了一些&#xff0c;没找到特别合适的&#xff0c;收集了一下其他人的思路&#xff0c;基本都是让左边可以滚动&#xff0c;右边定位&#xff0c;自己也尝试写了一下&#xff0c;有点样式上的小bug&#xff0c;还在尝试修…...

基于Electron27+React18+ArcoDesign客户端后台管理EXE

基于electron27.xreact18搭建电脑端exe后台管理系统模板 electron-react-admin 基于electron27整合vite.jsreact18搭建桌面端后台管理程序解决方案。 前几天有分享electron27react18创建跨平台应用实践&#xff0c;大家感兴趣可以去看看。 https://blog.csdn.net/yanxinyun1990…...

QT5交叉编译保姆级教程(arm64、mips64)

什么是交叉编译&#xff1f; 简单说&#xff0c;就是在当前系统平台上&#xff0c;开发编译运行于其它平台的程序。 比如本文硬件环境是x86平台&#xff0c;但是编译出来的程序是在arm64架构、mips64等架构上运行 本文使用的操作系统&#xff1a;统信UOS家庭版22.0 一、安装…...

python计算图片的RGB值,可以作为颜色的判断条件

python计算图片的RGB值&#xff0c;可以作为颜色的判断条件 import colorsys import PIL.Image as Imagedef get_dominant_color(image):max_score 0.0001dominant_color Nonefor count,(r,g,b) in image.getcolors(image.size[0]*image.size[1]):# 转为HSV标准saturation c…...

oracle 日期

日期加减 Oracle中日期进行加减可以使用多种方式&#xff0c;以下介绍三种 一种是针对天的操作&#xff0c;适用于对日&#xff0c;时&#xff0c;分&#xff0c;秒的操作&#xff0c; 一种是对月的操作&#xff0c;适用于月&#xff0c;年的操作&#xff0c; 一种是使用INTER…...

JVM堆内存解析

一、JVM堆内存介绍 Java大多数对象都是存放在堆中&#xff0c;堆内存是完全自动化管理&#xff0c;根据垃圾回收机制不同&#xff0c;Java堆有不同的结构&#xff0c;下面是我们一台生产环境服务器JVM堆内存空间分配情况&#xff0c;JVM只设置了-Xms2048M -Xmx2048M。 1、JVM堆…...

C#Onnx模型信息查看工具

效果 Netron效果 项目 代码 using Microsoft.ML.OnnxRuntime; using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms;namespace Onnx_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string…...

RK3588 ubuntu系统安装opencv

废话不多说直接上步骤&#xff1a; 先切换至root用户 sudo su 输入密码先更新一下本地软件 apt update apt upgrade 安装相关环境 apt install build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-…...

常用的vue UI组件库

背景&#xff1a;Vue.js 是一个渐进式 javascript 框架&#xff0c;用于构建 UIS&#xff08;用户界面&#xff09;和 SPA&#xff08;单页应用程序&#xff09;。UI 组件库的出现提高了我们的开发效率&#xff0c;增强了应用的整体外观、感觉、交互性和可访问性&#xff0c;下…...

防范欺诈GPT

去年&#xff0c;ChatGPT的发布让全世界都感到惊讶和震惊。 突然间出现了一个平台&#xff0c;它比之前的任何其他技术都更深入地了解互联网。人工智能可以被训练成像阿姆一样说唱&#xff0c;以世界著名诗人的风格写作&#xff0c;并精确地翻译内容&#xff0c;以至于它似乎能…...

【Java】多线程案例(单例模式,阻塞队列,定时器,线程池)

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 实现安全版本的单例模式饿汉模式类和对象的概念类对象类的静态成员与实例成员 懒汉模式如何保证…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

路由基础-路由表

本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中&#xff0c;往往存在多个不同的IP网段&#xff0c;数据在不同的IP网段之间交互是需要借助三层设备的&#xff0c;这些设备具备路由能力&#xff0c;能够实现数据的跨网段转发。 路由是数据通信网络中最基…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化

一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一&#xff0c;是基于哈希表的Map接口非同步实现。它允许使用null键和null值&#xff08;但只能有一个null键&#xff09;&#xff0c;并且不保证映射顺序的恒久不变。与Hashtable相比&#xff0c;Hash…...

计算机系统结构复习-名词解释2

1.定向&#xff1a;在某条指令产生计算结果之前&#xff0c;其他指令并不真正立即需要该计算结果&#xff0c;如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方&#xff0c;那么就可以避免停顿。 2.多级存储层次&#xff1a;由若干个采用不同实现技术的存储…...

云原生时代的系统设计:架构转型的战略支点

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、云原生的崛起&#xff1a;技术趋势与现实需求的交汇 随着企业业务的互联网化、全球化、智能化持续加深&#xff0c;传统的 I…...

HTML版英语学习系统

HTML版英语学习系统 这是一个完全免费、无需安装、功能完整的英语学习工具&#xff0c;使用HTML CSS JavaScript实现。 功能 文本朗读练习 - 输入英文文章&#xff0c;系统朗读帮助练习听力和发音&#xff0c;适合跟读练习&#xff0c;模仿学习&#xff1b;实时词典查询 - 双…...