Kubernetes Deployment:部署与管理应用指南

image

  1. 1. ReplicaSet(RS)
  2. 2. Deployment
  3. 3. Deployment资源配置
  4. 总结

  ‍

  在上一章节中,介绍了pod,以及介绍了如何使用命令行来创建一个pod。那么问题来了,一般来说,我们部署微服务不可能只部署一个噻,肯定是部署多个,但是我们总不可能说,写一个for循环,启动多个pod,并且如果pod挂了,我们又不能说实时观察,肯定是希望pod能够自动创建重启。那么这些如何做到呢?这便是今天我们介绍的Deployment的功能了。

1. ReplicaSet(RS)

  在介绍Deployment之前,首先需要介绍一下RS。RS,顾名思义,就是副本集,本质上就是一个资源对象,它定义了pod副本的数量,如何创建新pod,以及通过标签识别pod,目的就是确保集群中始终运行指定数量的pod副本。他的作用很简单:

  • Pod 挂了 → 自动重建
  • Pod 被删了 → 自动补上
  • Pod 数量 ≠ 期望值 → 调整到期望值

  看到上面这些问题,是不是似曾相似,这不就是之前在k8s基础概念[^1]提到的kube-controller-manager吗?YES,sir!是的,kube-controller-manager运行着多个控制器(controller,负责管理对应的资源对象),其中有一个就是Replication Controller,当我们创建一个ReplicaSet的时候,kube-controller-manager就是监听RS这个资源对象,然后检查。

  例如,如下yaml定义便是创建一个RS,在yaml定义中,我们会定义rs管理的标签,也就是nginx和prob,同时我们也会定义pod的创建模板,在模板中我们定义了pod的标签也为nginx和prob。 这样,RS在管理的时候,就是将对应标签的pod纳入到管理中。当他发现少了pod,则会创建,多了,则会删除。

apiVersion: apps/v1
kind: ReplicaSet
metadata:name: nginx-rs
spec:replicas: 3selector:                    # ← 标签,这就是“认亲规则”matchLabels:app: nginxenv: prodtemplate:					# 创建pod的规则metadata:labels:app: nginx             # ← 必须满足 selector!env: prodspec:containers:- name: nginximage: nginx:latest

  下面是RS的工作原理图,可以结合前面章节的内容进行参考:
image

  ‍

2. Deployment

  在上面小节中,详细的介绍了ReplicaSet相关的作用以及工作流程,RS通过定义pod的数量相关资源对象,来确保集群中pod数量。那么有了这个,为什么我们还需要Deployment呢?

  Deployment提供了对pod和ReplicatSet的管理方式,从名字上我们就能看出,Deployment对应了的集群中的一次部署。当我们创建一个Deployment资源对象的时候,Deployment控制器就会自动创建一个RS资源对象。然后RS控制器又会根据RS里面定义的规则,最终创建对应数量的pod。看起来,似乎Deployment的功能和RS类似,但是相比于RS,deployment提供了更多的功能。

  让我们想想,RS有什么局限性?在实际的开发生产中,我们的应用需要更新或者在必要时进行回滚。那么就需要进行如下操作:

  1. 升级应用镜像版本:比如说nginx从1.0→2.0
  2. 滚动更新(逐步替换旧pod)
  3. 更新失败自动回滚到上一版本
  4. 更新速度控制(例如一次只更新一个pod)
  5. 灰度发布

  那么问题来了,RS能提供这些功能吗?答案是不能。如果我们需要更新镜像版本,那么必须要先创建新的RS,等新的pod启动后,再删除老的pod。但是却没法控制更新速度,以及进行自动归滚。当然,你要是说,我手动模拟这个过程,那确实也行,不过这样的,风险就太高了,毕竟手动操作怎么比得上程序自动操作的有序性和精准性。
image

  如下便是一个deployment的定义:

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80

  运行之后,则会生成3个pod:

image

  同时也生成了1个rs:

image

  如果我此时更新deployment对应的镜像,我们可以看到,k8s自动生成了新的rs,并且保留了之前版本的历史记录:

image

3. Deployment资源配置

  在Docker中,我们可以配置容器的计算资源,比如说CPU内存,当然在k8s中,我们也当然可以进行相关的配置。

apiVersion: apps/v1
kind: Deployment
metaname: my-app
spec:replicas: 2selector:matchLabels:app: my-apptemplate:metalabels:app: my-appspec:containers:- name: app-containerimage: nginx:1.25resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"

  k8s调度器会根据 requests​ 值选择有足够资源的节点,表示容器至少需要这么多资源才能正常运行。limits则表示容器最多可以使用的上线,如果内存超过limit,则会OOMKilled,如果cpu超过limit,则会被节流。CPU的单位有点奇葩,是m,其中1000m=1核

  ​requests​和limit主要有以下用途:

  • 平时:Pod 按 requests 保证最低资源(用于调度和资源预留)。
  • 高峰期:如果节点有空闲资源,Pod 可以 临时使用更多资源(最多到 limits),实现“爆发”。
  • 资源紧张时:Kubernetes 会优先保障 requests,并可能限制或驱逐低 QoS 的 Pod。

  学过操作系统的我们知道,在Linux系统中,会实现某些调度器(比如CFS)来将cpu的时间分配给某些进程。因此,在k8s中配置pod的cpu资源大小,本质上就是在配置cpu的调度时间。具体的可以参考linux的cgroup是如何分配CPU资源。

  但是在使用中,我们需要注意,尽量让内存的requests和limits大小尽量不要偏差太大。因为cpu从limits大小的资源变成requests,无非就是算的慢一点。但是如果是内存从大变小,便可能会出现OOMKilled问题(因为本来程序占用了4G的内存资源,现在变成了1G,能不OOM吗?)。

4. 总结

  在 Kubernetes 中,​Pod 是调度和运行的最小单元​,但由于其缺乏自愈和管理能力,​生产环境中绝不应直接部署裸 Pod​。对于​无状态应用​(如 Web 服务、微服务),​Deployment 是事实上的标准部署单元。它通过管理 ReplicaSet 实现副本保障、滚动更新和版本回滚,是云原生应用发布的基石。

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

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

相关文章

wordpres做影视网站公关策划书模板范文

宏定义 不带参数 宏定义又称为宏代换、宏替换,简称“宏”。 格式: #define 标识符 字符串其中的标识符就是所谓的符号常量,也称为“宏名”。 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。 掌…

实用指南:Android高级开发第三篇 - JNI异常处理与线程安全编程

实用指南:Android高级开发第三篇 - JNI异常处理与线程安全编程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

商城网站设计公司系统优化包括哪些

作者推荐 视频算法专题 本文涉及知识点 哈希映射 哈希集合 LeetCode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复 RandomizedCollection 是一种包含数字集合(可能是重复的)的数据结构。它应该支持插入和删除特定元素,以及删除随机元素。 实现 Randomiz…

判断网站开发语言wordpress 访问速度

来源:德先生作者:朱圆恒,唐振韬,李伟凡,赵冬斌北京时间2019年1月25日2时,DeepMind在伦敦向世界展示了他们的最新成果——星际争霸2人工智能AlphaStar[1] 。图1. DeepMind AlphaStar挑战星际人类职业玩家直播…

分布式CAP理论 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【闲话】2025.9.24 记梦

破碎,离奇。话说 \(9.25\) 吃了 \(hz\) 校庆期间 \(hs\) 食堂免费饭菜的人第二天都被抓去做黑工,我和 @wkh2008 因为当时润去不知道干什么了所以没有被抓走,第二天回到班里发现毫无人,然后被学校里巡游的中介带走。…

北京撒网站设计git网站开发

文章目录 目录1. 程序的翻译环境和执行环境2. 详解编译链接2.1 翻译环境2.2 编译本身也分为几个阶段2.3 运行环境 3. 预处理详解3.1 预定义符号3.2 #define3.2.1 #define 定义标识符3.2.2 #define 定义宏3.2.3 #define 替换规则3.2.4 #和##3.2.5 带副作用的宏参数3.2.6 宏和函数…

完整教程:Postgresql常规SQL语句操作

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方式

酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consol…

拼多多电商网站建设学校网站建设方案设计

使用 services 指令,请先安装 brew tap gapple/services 安装完成后使用 brew services start mysql

关于网络编辑作业做网站栏目新闻的ppt免费网站软件大全

今年有哪些成功的发行版发布呢? 让我重点介绍最好的几个。 这些发行版在 2023 年引起了人们的关注! 每年我们都会推出一些令人兴奋的新发行版,它们尝试以不同的方式工作,或者提供一些有意义的东西,而不仅仅是“又一个发…

【sa-token】 sa-token非 web 上下文无法获取 HttpServletRequest - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Cloudflare洛杉矶数据中心维护通知:技术架构与影响解析

本文详细介绍了Cloudflare将于2025年10月8日在洛杉矶数据中心进行的计划性维护,包括维护时间窗口、流量重路由机制、潜在延迟影响,以及针对PNI/CNI客户的重要技术建议和通知订阅方式。维护概览 计划维护时间:2025年…

正规的手机网站建设小程序官方平台

等到花都谢了,你怎么还不开机?这电脑开机真是离奇的慢,有心将它换了,奈何兜里空空。凑合着用又无法忍受这种煎熬。其实你只需要用鼠标点几下就可以不用等待这漫长的开机过程了。高铁,飞机,网络,…

友点企业网站管理系统模板保定市清苑区网站建设

看看如果设定了Rollover中某个状态的效果,则 CA.在动画面板上制作的动画适用于所有的Rollover状态B.动画不能应用在Rollover状态上C.在动画面板上制作的动画仅适用于当前的Rollover状态D.同一动画不能赋予多个Rollover…

沧州建设银行招聘网站电子商务网站建设中

参考 一个叫做Version,一个叫做Build,(version是版本号,build是打正式包每次Archive时的都增加的值)这两个值都可以在Xcode中选中target,点击“Summary”后看到。 Version在plist文件中的key是“CFBundleSh…

住房和城乡建设部官方网站已前程无忧招聘网

需求:项目中需要使用netty,本地测试的时候使用的是ws,然后要部署到服务器上,使用https连接,https下就不能用ws了,必须升级到wss 1.阿里云申请免费证书 2.保存证书到本地目录 3.修改代码 SslUtil 工具类…

Windows+VSCode搭建小智(xiaozhi)开发环境 - 教程

Windows+VSCode搭建小智(xiaozhi)开发环境 - 教程2025-10-06 22:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; disp…

StarTree支持Apache Iceberg扩展湖仓用例

StarTree宣布其云服务全面支持Apache Iceberg,实现直接查询Iceberg表而无需移动或转换底层数据,解决了高并发实时查询的挑战,同时避免了数据重复存储和复杂管道构建。StarTree支持Apache Iceberg以扩展湖仓用例 基于…

偏微分方程的解

偏微分方程的解求未知函数。