k8s中,为什么把pod的服务以deployment的形式通过nodeport对外发布,以及容器和虚拟机的一些区别
deployment是个控制器
主要负责管理pod,来代表k8s集群向外提供稳定的服务。
说,k8s有很多优点。
说k8s的优点,可能先需要说容器提供的便利。
同样的硬件资源
跑几个虚拟机,每个虚拟机上跑几个服务。
就挺重了。风扇呼呼叫
cpu温度嘎嘎上
这,大家叫资源消耗太高
那么提供同样量级的算力、存储等服务
容器化应用需要的资源少很多
服务器感觉也比较轻松
同样
同样的资源供给,容器化应用提供的服务量级更高,可以响应更多的服务
为数据服务的提供方,比如企业,提供更高的服务处理能力。
容器的底层技术来自于镜像
镜像由一层层的只读文件组成
这些只读文件,提供的是容器运行的环境。
比如,跑一个nginx容器,容器里面是nginx进程
跑这个容器,需要一个nginx镜像
镜像里面有多个只读层。
这些只读层,都需要linux操作系统的什么
总不至于需要整个linux操作系统吧
整个linux操作系统包含几乎跑所有服务的所有系统级别的环境
而nginx只需要linux操作系统的操作系统级别的操作系统的一部分资源
把这些资源,做成只读文件,这个只读文件,在容器镜像的角度来讲
就是容器镜像的一个基础层
在这个基础层上,跑nginx进程还需要什么,比如说,
有了操作系统,起码得有nginx软件包的那些东西吧
对,把软件包的那些东西作用一个只读文件,算容器的镜像的一个层
放到基础层上面去
然后还需要什么
需要环境变量,跑nginx时,环境变量需要怎样
弄个文件,弄个只读层
放上去
还需要什么
nginx的配置文件,和调用配置文件,是实现nginx功能的
一个配置的重点
也写成文件,做成只读层。
总的来说,容器镜像。就是多个只读的文件。
是容器运行的环境以及配置。
当用docker run或者写dockerfile,启动容器的时候
那么docker程序就会通过cpu的计算
来读取容器镜像的这些只读文件
来跑一起来一个里面运行着nginx进程的容器
这个怎么听起来像是和虚拟机区别也不是很大。
那么容器和虚拟机有几个比较大的区别:
1.如何调用硬件资源
容器直接找操作系统,让操作系统找cpu进行工作
虚拟机里面的进程,需要找虚拟机的操作系统,然后虚拟机的操作系统需要找虚拟化技术做出来的虚拟化层qemu,qemu负责把虚拟机内操作系统的请求,转发给cpu。
相对比,虚拟化技术比容器化技术,对于从进程的请求达到cpu,的这个链路上,多了一个虚拟机的操作系统,和虚拟化层的qemu
qemu是个仿真器,可以给虚拟机提供虚拟硬盘,虚拟内存,虚拟网卡等
kvm是个支持虚拟化的内核模块,qemu仿真器和kvm内核模块,一起工作,可以做出来比较不错的虚拟机。而虚拟机不仅需要虚拟化的计算存储网络硬件资源,还需要虚拟的操作系统内核,每一个虚拟机需要,相当于复制一份操作系统内核。
那么从数据链路上来讲,容器里的进程和虚拟机里的进程,都找物理cpu工作
虚拟机比容器多了两个较明显的步骤
一个是进程的请求先要打到虚拟机操作系统上,第二个是虚拟机操作系统的请求要打到虚拟化层qemu这里,然后qemu把这个请求给物理操作系统的内核模块kvm,kvm把这个请求发给cpu。
而容器里面进程的请求链路是这样的,容器里面的进程请求直接找物理操作系统的内核,然后物理操作系统的内核,把请求发给cpu
对比之下,容器的链路就少了虚拟操作系统,和qemu,这两个层。
请求的链路是这样的。那么响应的链路,也是多了这两个层。
所以虚拟机的数据链路就要比容器长一些。
从资源消耗角度来看,多的这两个层,一个是虚拟机的操作系统,需要复制物理机上的操作系统,一个是qemu要模拟出来的虚拟硬件软件等资源。
应该都需要占用一些计算和存储的资源。
加上通信链路的长度。
容器比虚拟机占用的资源更少,响应速度更快。
而虚拟机比容器隔离性可能更好,因为每个虚拟机有一个自己的操作系统。
这样的特点,可能就比较能够了解了。
那么k8s在容器的基础上
有一个比较受欢迎的地方
是,k8s的自动化部署、管理、编排容器的能力比较不错。
那么k8s实现这样的功能,是需要比较多的组件。
部署、管理、编排,这些功能,在不容器化的时候
在物理机和虚拟机上,也讲究部署管理编排。
那么k8s这里,除了操作对象的是容器,
还有什么特别的呢
这个就跟控制器deployment有关系
deployment控制器,管理的资源对象是pod
pod里面是数个容器,容器里面是进程,进程可以有一个,也可以有多个
一般情况下一个容器主要跑一个进程
deployment控制器是k8s控制器里面比较常用的
它通过replicaset管理pod
一条命令,kubectl scale deployment xxx replicas=number
number是数字,写几,deployment控制器就会让replicaset把pod的的数量调整到几
而不用手工增加pod
如果有的pod不在运行状态了
deployment可以自动维护pod的数量,自动创建
比如,replicas设置的是9个pod,其中的3个被删除,那么deployment控制器会让replicas自动再创建3个新的pod,而这个过程不用管理人员去管。
是deployment控制器自动去操作的。
这个就体现了自动化运维。
那么为什么对外发布服务的时候要用deployment结合nodeport进行发布呢
而不是直接用pod和nodeport发布
是因为deployment相当于一个pod的总管理
外面服务要访问pod进程提供的服务,找deployment就行了。
pod部署在哪个节点上,
pod的迁移,
pod的重启,
pod的数量扩展
pod的滚动更新
这些操作,对于k8s集群外部来的访问,都不用太关心。
外部的访问只用到达deployment这一层就行了
deployment负责提供服务。
pod的滚动更新的意思是
新的pod产生了,而且running比较ok
才会逐步删除旧的pod
这样就会实现服务的不停机更新。
比如deployment管的这些pod提供的是nginx服务
里面nginx的版本要从一个旧的更新成新的。
那么新版本的pod会逐步生成
旧版本的pod会逐步删除
在服务的使用的那一方
体验是平稳的。
所以,应该可以这样认为
nodeport转发进来的服务
给到deployment,是更符合实践需要的。
相关文章:
k8s中,为什么把pod的服务以deployment的形式通过nodeport对外发布,以及容器和虚拟机的一些区别
deployment是个控制器 主要负责管理pod,来代表k8s集群向外提供稳定的服务。 说,k8s有很多优点。 说k8s的优点,可能先需要说容器提供的便利。 同样的硬件资源 跑几个虚拟机,每个虚拟机上跑几个服务。 就挺重了。风扇呼呼叫 …...
PMP--一模--解题--41-50
文章目录 14.敏捷--方法--回顾--回顾是最重要的一个实践,原因是它能让团队学习、改进和调整其过程。41、 [单选] 新项目中的所有团队成员都希望通过尽快交付价值来获得客户的信任。项目经理了解到一个资源已经在其他项目中与发起人一起工作。某资源似乎在使用个人影…...
Kafka启动关闭及其相关命令kafka启动、状态监控、日常操作
开启zookeeper命令(备注:先进入zookeeper的bin目录) ./zkServer.sh start 关闭zookeeper命令(备注:先进入zookeeper的bin目录) ./zkServer.sh stop Kafka启动命令(备注:先进入kafka目录) 常规模式启动kafka bin/kafka-server-start.sh config/server.properties 进程守…...
CentOS 系统设置与维护教程
CentOS 系统设置与维护教程 在这篇博客中,我们将介绍在 CentOS 系统上进行的一些常见操作,包括停止和禁用防火墙服务、配置 SELinux。我们还将展示如何切换到 root 用户以执行这些操作。通过这些操作,你可以更好地管理和配置你的 CentOS 环境…...
流量牵引技术与传统防火墙的区别
在网络安全领域,流量牵引技术和传统防火墙都起着重要的作用,但它们在很多方面存在着明显的区别。 一、工作原理不同 传统防火墙主要是通过设置访问控制规则来过滤网络流量。它基于预先设定的策略,对进入和离开网络的数据包进行检查…...
【Python爬虫系列】_020.异步协程asyncio
课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈…...
ubuntu22安装docker
1、查看服务器系统信息 uname -a:显示内核名称、主机名、内核版本、处理器类型等信息。 lsb_release -a:显示有关 Ubuntu 发行版的详细信息,包括版本号、代号等。 free -h:查看系统内存使用情况。 df -h:查看磁盘空间使…...
【拥抱AI】如何使用Pandas进行数据分段
安装Pandas库 如果您的环境中尚未安装Pandas库,可以使用pip命令进行安装: pip install pandas导入Pandas库 在Python脚本中,导入Pandas库以便使用其数据处理功能: import pandas as pd读取文本文件 使用Pandas的read_csv函数…...
Docker Compose version v2.29.2 提示 exited with code 0 解决方案
问题描述: 使用 docker-compose up 启动容器时,老是报错exited with code 0,容器要么处于退出,要么处于重启阶段,查明原因后,是因为docker容器执行任务完成后就会处于exited状态,必须强制状态。…...
深度学习速通系列:依存分析
依存分析(Dependency Parsing)是自然语言处理(NLP)中的一项任务,目的是确定句子中单词之间的依存关系,并将这些关系表示为一个有向图,通常称为依存树。在依存树中,每个节点代表一个单…...
玩转扩展库,温湿度传感器篇!—合宙Air201资产定位模组LuatOS快速入门05
随着LuatOS快速入门系列教程的推出,小伙伴们学习热情高涨。 合宙Air201不仅支持三种定位方式,还具有丰富的扩展功能,通过外扩BTB链接方案,最多可支持21个IO接口:SPI、I2C、UART等多种接口全部支持。 本期,…...
【人工智能】人工智能领域中的线性回归算法原理、应用场景及代码示例。
🏆🏆欢迎大家来到我们的天空🏆🏆 🏆🏆如果文章内容对您有所触动,别忘了点赞、关注,收藏! 🏆 作者简介:我们的天空 🏆《头衔》&#x…...
day18JS-微任务、宏任务和node.js
1. 代码的执行流程 代码的执行流程分为同步与异步。 2. 什么样子的是宏任务? 1. setTimeout 和 setInterval 定时器: 没有写时间(传参的),代表下一帧执行,如果没有其他任务1ms后执行。 // 没有写时间(传参的),代表下…...
Mega Stamp Bundle 地形合集捆绑包峡谷沙丘山脉
终极套装,满足所有地形雕刻需求! 自2015年Gaia发布以来,我们团队就发明了印章技术,欢迎来到Mega Stamp Bundle! 本套装包含14个印章包,单次购买即可享受大幅折扣,共获得140个专业设计的印章。 这些印章可与Unity Terrain Tools、Gaia以及任何使用印章高度图图像的工具…...
基于SpringBoot+Vue+MySQL的明星周边产品销售网站系统
系统展示 用户前台界面 管理员后台界面 系统背景 在当今数字化消费时代,粉丝经济蓬勃发展,明星周边产品作为连接明星与粉丝的重要纽带,市场需求日益增长。为了满足广大粉丝对明星周边产品的热情追求,并提升购物体验,我…...
websocket 和sip 在协议层面有哪些区别,为什么要各自这样设置协议
WebSocket 和 SIP(Session Initiation Protocol)在协议层面有显著区别,因为它们各自的设计目标和用途不同。让我们从协议的定义、工作方式和用途来讨论这些区别: 1. 协议定义与用途 WebSocket: WebSocket 是一种通信协议,旨在通过单个 TCP 连接实现全双工通信。它用于在客…...
Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发
Miracast/WifiDisplay概念介绍 Miracast Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如…...
linux入门到实操-4 linux系统网络配置、连接测试、网络连接模式、修改静态IP、配置主机名
教程来源:B站视频BV1WY4y1H7d3 3天搞定Linux,1天搞定Shell,清华学神带你通关_哔哩哔哩_bilibili 整理汇总的课程内容笔记和课程资料(包含课程同版本linux系统文件等内容),供大家学习交流下载:…...
【kubernetes】Ingress和Ingress-Controller介绍,高可用应用案例
一,Ingress介绍 Ingress是k8s中一种重要的资源对象,它主要用于定义从集群外部到集群内部服务的HTTP(S)路由规则。用于管理代理 Ingress-Controller的配置文件。 kubectl explain ingress二,Ingress-Controller介绍 Ingress Controller 是 …...
C# 使用Socket通信,新建WinForm服务端、客户端程序
一、新建WinForm Socket服务端程序 注:rtbReceviceMsg为RichTextBox控件 服务端程序、界面 服务端代码 public partial class Form1 : Form {public Form1(){InitializeComponent();}public virtual void TriggerOnUpdateUI(string message){if (this.InvokeRequir…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
