Kubernetes-Deployment
1. 简介
一个 Deployment 为 Pods
和 ReplicaSets
提供声明式的更新能力。
用户负责描述 Deployment 中的 目标状态,而 Deployment 控制器(Controller)以受控速率更改实际状态, 使其变为期望状态。你可以定义 Deployment 以创建新的 ReplicaSet,或删除现有 Deployment, 并通过新的 Deployment 收养其资源。
ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。
也就是 Deployment 通过管理 ReplicaSet 来确保任何时间都有指定数量的 Pod 副本在运行。
2. quick start
2.1 创建deploy
如果没有现成的模板,可以使用 --dry-run 快速生成一个deploy资源模板
新建一个deploy模板 deploy-nginx.yaml
,内容如下:
创建deploy
在该例中:
- 创建名为
nginx-test-1
(由.metadata.name
字段标明)的 deployment - 该deployment创建三个(由
replicas
字段标明)Pod副本 selector
字段定义 Deployment 如何查找要管理的 Pods。 在这里,选择在 Pod 模板中定义的标签(app: nginx-test
)。 不过,更复杂的选择规则是也可能的,只要 Pod 模板本身满足所给规则即可。
template
字段包含以下子字段:- Pod 被使用
labels
字段打上app: nginx-test
标签。 - Pod 模板约定(即
.template.spec
字段) Podsnginx
容器。 - 创建一个容器并使用
name
字段将其命名为nginx
。
- Pod 被使用
说明:
spec.selector.matchLabels
字段是 {key,value}
键值对映射。 在 matchLabels
映射中的每个 {key,value}
映射等效于 matchExpressions
中的一个元素, 即其 key
字段是 “key”,operator
为 “In”,values
数组仅包含 “value”。 在 matchLabels
和 matchExpressions
中给出的所有条件都必须满足才能匹配。
2.2 查看deploy
查看deploy 基本信息
查看deploy 详细信息
查看deploy 详情信息
查看pod情况
查看deploy上线状态
2.3 修改deploy
说明: 仅当 Deployment Pod 模板(即
.spec.template
)发生改变时,例如模板的标签或容器镜像被更新, 才会触发 Deployment 上线。 其他更新(如对 Deployment 执行扩缩容的操作)不会触发上线动作。
-
直接修改资源模板,修改完直接apply即可
-
使用命令修改,修改完保存即可
-
修改镜像版本
- --record=true 记录当前操作,后续会用到
2.4 删除deploy
-
使用命令删除
-
使用资源文件
3. 更新服务版本
3.1 创建deploy
deploy-nginx.yaml
deploy 模板信息如下:
3.2 修改deploy文件更新
我们从图中可以看到pod执行过程是等待新的pod启动完成,在进行销毁旧的pod,这样就完成了集群的滚动更新工作
更新完成后我们也可以查看一下迭代信息和修订历史详细信息
3.2 使用edit命令更新
一般临时修改一下部署信息会使用一下edit。
一般不太推荐使用edit进行编辑,推出即保存。虽然版本更新成功了,history也有保留,但是最终的修改记录没有持久化到模板文件中。
3.3 使用set image 命令更新
能比edit更新强点,至少可以很清楚的在history中查看版本更新的情况
4. 回滚服务版本
我们使用上面的更新应用时k8s都会记录一个revision(版本),这样我们就可以通过这个版本记录回滚到特定的版本中
说明: Deployment 被触发上线时,系统就会创建 Deployment 的新的修订版本。 这意味着仅当 Deployment 的 Pod 模板(
.spec.template
)发生更改时,才会创建新修订版本 -- 例如,模板的标签或容器镜像发生变化。 其他更新,如 Deployment 的扩缩容操作不会创建 Deployment 修订版本。 这是为了方便同时执行手动缩放或自动缩放。 换言之,当你回滚到较早的修订版本时,只有 Deployment 的 Pod 模板部分会被回滚。
-
回滚到上一个版本
-
回滚到指定版本
rollout命令参数如下
默认配置下,k8s 只会保留最近的几个 revision,可以在 Deployment 配置文件中通过 revisionHistoryLimit
属性增加 revision
数量。(同时rs和我们rollout中记录的版本号相同,可以理解为rollout中显示的REVISION
版本号实际上就是rs中的版本)
一般配合revisionHistoryLimit使用的strategy (更新策略)
完整的revisionHistoryLimit
配置如下:
5. 服务副本缩放
-
使用
scale
命令修改
-
使用edit命令修改
直接使用edit命令修改 .spec.replicas 属性值即可
-
直接修改模板中的
.spec.replicas
属性值即可
当然我们也可以设置自动缩放功能,这里先简单提及一下,完了专门写一篇说这个事情。
基于现有 Pods 的 CPU 利用率选择 要运行的 Pods 个数下限和上限。
__EOF__

本文链接:https://www.cnblogs.com/ludangxin/p/15690799.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏