Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >K8s-ReplicaSet&Deployment

K8s-ReplicaSet&Deployment

作者头像
用户9645905
发布于 2024-07-31 02:12:09
发布于 2024-07-31 02:12:09
21800
代码可运行
举报
文章被收录于专栏:Linux学习~Linux学习~
运行总次数:0
代码可运行

K8s-ReplicaSet&Deployment

ReplicaSet

Kubernetes (k8s) ReplicaSet(复制集)是 Kubernetes 中用于确保指定数量的 Pod 副本正在运行的控制器。如果某些 Pod 发生故障或被删除,ReplicaSet 会负责启动新的 Pod 以替代它们,从而保持所需的副本数量。

在实际应用中,有时会使用更高级的控制器 Deployment,它通过封装 ReplicaSet 提供了更多的功能,例如滚动更新、回滚等。

基本概念

目标数量: ReplicaSet 的主要任务是维护运行中 Pod 的数量。你可以通过 ReplicaSet 中的 replicas 字段设置所需的副本数量。ReplicaSet 会尽力确保在集群中一直存在这么多的 Pod 副本。

选择器(Selector):通过 selector 字段,ReplicaSet 选择要管理的 Pod。Pod 模板中的标签(labels)和 selector 中定义的标签匹配的 Pod 将被 ReplicaSet 管理。

滚动更新(Rolling Update) :当你需要更新应用程序或容器镜像时,可以通过修改 ReplicaSet 的 Pod 模板来实现滚动更新。Kubernetes 会逐步替换旧的 Pod,确保在更新过程中不中断服务。

故障恢复:如果某个 Pod 发生故障,ReplicaSet 会负责启动新的 Pod,以确保副本数量达到所需的数量。这有助于提高应用程序的可用性。

标签(Labels): 标签在 ReplicaSet 中起着关键作用,用于标识要管理的 Pod。ReplicaSet 使用选择器匹配标签,以确定哪些 Pod 受其管理。

模板(Template): Pod 模板定义了由 ReplicaSet 管理的 Pod 的配置。它包括容器镜像、标签等信息。

自动缩放: ReplicaSet 支持自动缩放功能,可以根据负载或其他指标自动调整副本数量。

  • 定义ReplicaSet
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-nginx
  labels:
    app: replicaset-nginx
spec:
  # 按你的实际情况修改副本数
  replicas: 3
  selector:
    matchLabels:
      app: pod-replicaset-nginx
  template:
    metadata:
      labels:
        app: pod-replicaset-nginx
    spec:
      containers:
      - name: pod-replicaset-nginx
        image: nginx:1.14.2
        imagePullPolicy: IfNotPresent

Deployment

Kubernetes Deployment是Kubernetes中用于管理应用程序副本的对象,它提供了对应用程序的声明式定义,自动化部署、扩展和更新

基本概念

ReplicaSet: Deployment使用ReplicaSet来确保指定数量的Pod副本正在运行。如果有Pod意外终止,ReplicaSet会创建新的Pod来代替。

自动修复: 当使用Deployment时,Kubernetes能够自动修复故障,确保系统中运行指定数量的Pod。

滚动升级: Deployment支持滚动升级,允许无缝地将应用程序从旧版本切换到新版本,而不会中断服务。

Deployment的使用

关键属性和配置选项:

属性

描述

示例

Deployment Name

部署的唯一标识符

my-deployment

Replicas

部署中 Pod 的副本数量

3

Selector

选择器,用于选择一组 Pod 来作为部署的一部分

{"matchLabels": {"app": "my-app"}}

Template

Pod 模板,定义了 Pod 的规格和运行的容器

{"metadata": {"labels": {"app": "my-app"}}, "spec": {"containers": [{"name": "my-container", "image": "nginx:latest"}]}}

Strategy

更新策略,定义如何替换旧版本的 Pod

{"type": "RollingUpdate", "rollingUpdate": {"maxSurge": "25%", "maxUnavailable": "25%"}}

Min Ready

在更新期间,集群中至少需要有多少个 Pod 处于就绪状态

2

Revisions

部署的修订版本,用于回滚到之前的版本

v1, v2, …

Progress Deadline Seconds

更新超时时间,如果更新没有在指定时间内完成,将被视为失败

600

Available Replicas

当前可用的 Pod 副本数量

2

Conditions

部署的状态条件,如进度死线超时、可用副本不足等

{"type": "Progressing", "status": "True", "reason": "NewReplicaSetAvailable"}

Update Strategy

部署更新时使用的策略,如重新创建还是原地更新

Recreate, OnDelete

  • 创建Deployment
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nginx
  labels:
    app: deployment-nginx
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
  selector:
    matchLabels:
      app: deployment-nginx
  template:
    metadata:
      labels:
        app: deployment-nginx
    spec:
      containers:
      - name: deployment-nginx
        imagePullPolicy: IfNotPresent
        image: nginx:1.14.2
        ports:
        - containerPort: 80

查看Deployment,Pod,ReplicaSet

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get deploy,pod,rs

Deployment 更新策略

  • RollingUpdate(默认):在滚动升级期间,逐步替换旧版本的Pod,确保在整个升级过程中保持应用程序的可用性。控制滚动的速度,即每次替换的Pod数量和替换的时间间隔。这是大多数情况下推荐的策略,因为它允许应用程序在升级过程中保持连续的服务。
  • Recreate:这种策略会一次性删除所有旧版本的Pod,然后创建所有新版本的Pod。这种策略会导致在整个升级过程中应用程序短暂不可用。虽然 Recreate 策略的升级速度可能更快,但它的主要缺点是在升级期间可能存在短暂的服务中断。 通过如下操作来演示这两种更新的区别
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 更新镜像版本
kubectl set image deployment/deployment-nginx deployment-nginx=nginx:1.16.1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 编辑模版更新
kubectl edit deployment deployment-nginx

缩放Deployment

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl scale deployment/deployment-nginx --replicas=5

查看更新历史版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl rollout history deployment/deployment-nginx

查看具体详情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl rollout history deployment/deployment-nginx --revision=版本号

想在每次更新后,给当前版本加CHANGE-CASE:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 第一种方式 在执行更新命令时加上 --record  在将来版本会被移除
kubectl set image deployment/deployment-nginx deployment-nginx=nginx:1.16.1 --record

# 第二种方式 官方推荐使用annotate
kubectl annotate deployment/deployment-nginx kubernetes.io/change-cause="image updated to 1.16.1"

k8s默认只会保留3个版本,我们可以通过设置spec.revisionHistoryLimit: 1

恢复到历史版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl rollout undo deployment/deployment-nginx --to-revision=4

暂停、恢复 Deployment 的自动更新

如果想要执行多个操作之后,才进行应用新的模版部署,那么可以使用这种方式,先暂停,然后等所有更新完成,在恢复应用部署

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 暂停保存后自动更新
kubectl rollout pause deployment/deployment-nginx
kubectl rollout resume deployment/deployment-nginx

后,才进行应用新的模版部署,那么可以使用这种方式,先暂停,然后等所有更新完成,在恢复应用部署

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 暂停保存后自动更新
kubectl rollout pause deployment/deployment-nginx
kubectl rollout resume deployment/deployment-nginx
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
6.工作负载管理-认识和使用Deployment
Kubernetes Deployment是Kubernetes中用于管理应用程序副本的对象,它提供了对应用程序的声明式定义,自动化部署、扩展和更新
AI码师
2024/04/10
1960
6.工作负载管理-认识和使用Deployment
Kubernetes运维之容器编排Deployment更新机制
滚动升级是默认的更新策略,它在删除一部分旧版本Pod资源的同时,补充创建一部分新版本的Pod对象进行应用升级,其优势是升级期间,容器中应用提供的服务不会中断,但要求应用程序能够应对新旧版本同时工作的情形,例如新旧版本兼容同一个数据库方案等。不过,更新操作期间,不同客户端得到的响应内容可能会来自不同版本的应用。
王先森sec
2023/04/24
5290
Kubernetes运维之容器编排Deployment更新机制
再战 k8s(12):Deployment 指导下 Pod 的升级和回滚
当集群中的某个服务需要升级时,我们需要停止目前与该服务相关的所有Pod,然后下载新版本镜像并创建新的Pod。如果集群规模比较大,则这个工作变成了一个挑战,而且先全部停止然后逐步升级的方式会导致较长时间的服务不可用。
看、未来
2022/05/06
1.4K0
再战 k8s(12):Deployment 指导下 Pod 的升级和回滚
k8s 资源管理之 deployment
在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于Pod的管理,确保Pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建Pod。
看、未来
2022/08/11
7010
k8s 资源管理之 deployment
k8s pod控制器_k8s多人用吗
Pod控制器:Pod控制器是管理Pod的中间层,使用了Pod控制器之后,我们只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它就会创建出满足条件的Pod并确保每一个Pod处于用户期望的状态,如果Pod在运行中出现故障,控制器会基于指定的策略重启或重建Pod。 在kubernetes中,有很多类型的Pod控制器,每种都有自己的适合的场景,常见的有下面这些:
全栈程序员站长
2022/09/22
1.5K0
k8s pod控制器_k8s多人用吗
K8s上的Go服务怎么扩容、发版更新、回滚、平滑重启?教你用Deployment全搞定!
经过前面不少文章的铺垫,终于可以写这个大家都感兴趣的话题了,在前面两篇文章,我们讲了Kubernetes里的 Pod和 副本集ReplicaSet (RS) 这两个API对象。知道了Pod是Kubernetes里的最小调度单元,ReplicaSet则是控制Pod副本数的一个基础控制器。文章最后留下了一个话题:
KevinYan
2020/09/10
1.5K0
022.掌握Pod-Pod升级和回滚
若Pod是通过Deployment创建的,可以在运行时修改Deployment的Pod定义(spec.template)或镜像名称,并应用到Deployment对象上,系统即可完成Deployment的自动更新操作。 如果在更新过程中发生了错误, 则还可以通过回滚操作恢复Pod的版本。
木二
2019/11/27
6550
Kubernetes Deployment控制器
控制器是指可以对Pod进行管理的一些工作负载,他们可以按照用户的期待来完成一系列Pod的操作。
shysh95
2022/05/24
7090
Kubernetes Deployment控制器
3.深入k8s:Deployment控制器
Deployment可以做到很便捷的管理Pod,只需要在Deployment中描述一下希望的Pod状态时什么,包括定义Pod副本数、滚动升级和回滚应用、扩容和缩容、暂停和继续Deployment等,然后Deployment Controller就可以帮我们实现我们想要达到的状态。
luozhiyun
2020/08/02
4640
3.深入k8s:Deployment控制器
详解 K8s 作业副本控制器 Deployment
我们看到,Pod 仅仅是对若干容器进行的封装和加强,在实际的场景下,光是有 Pod 是不够的,我们还需要考虑 Pod 之间的相互关系,这个时候,我们就需要更高一层的抽象,这就是 Kubernetes 中的控制器思想,本文,我们就来详细介绍一下 Kubernetes 中最基本的控制器 -- Deployment。
用户3147702
2022/06/27
1.2K0
详解 K8s 作业副本控制器 Deployment
Kubernetes系列之Pod控制器
Controller Manager 由 kube-controller-manager 和 cloud-controller-manager 组成, 是 Kubernetes 的大脑, 它通过 apiserver 监控整个集群的状态, 并确保集群处于预期的工作状态。
编程识堂
2023/05/24
6670
Kubernetes系列之Pod控制器
Deployment 原理
每一个 Deployment 都会和它的依赖组成以下的拓扑结构,在这个拓扑结构中的子节点都是『稳定』的,任意节点的删除都会被 Kubernetes 的控制器重启:
看、未来
2022/08/11
5950
Deployment 原理
基于k8s Deployment的弹性扩缩容及滚动发布机制详解
k8s第一个重要设计思想:控制器模式。k8s里第一个控制器模式的完整实现:Deployment。它实现了k8s一大重要功能:Pod的“水平扩展/收缩”(horizontal scaling out/in)。该功能从PaaS时代开始就是一个平台级项目必备编排能力。
JavaEdge
2024/01/12
7640
基于k8s Deployment的弹性扩缩容及滚动发布机制详解
【重识云原生】第六章容器基础6.4.5.2节——Deployment配置详细说明
在所有的 Kubernetes 配置中,Deployment 也需要 apiVersion,kind 和 metadata 这些配置项。配置文件的通用使用说明查看 部署应用,配置容器,和使用 kubeclt 管理资源 文档。
江中散人_Jun
2022/10/27
7770
【重识云原生】第六章容器基础6.4.5.2节——Deployment配置详细说明
K8s中 蓝绿部署、金丝雀发布、滚动更新汇总
在本文[1]中,我们将学习使用 Kubernetes 容器编排系统部署容器时的部署策略。在本文的最后,我们将学习如何在 Kubernetes 集群中使用不同的方式进行部署。如果您觉得这个话题很有趣,请继续阅读!本教程的代码可在 Github上找到[2]
公众号: 云原生生态圈
2021/11/10
3.8K0
K8s中 蓝绿部署、金丝雀发布、滚动更新汇总
云原生技术之kubernetes学习笔记(8)---Deployment控制器
Deployment是k8s中比较常用的控制器,它实现了k8s中一个重要的功能:Pod的水平扩展和水平收缩。
AsiaYe
2021/05/10
7360
云原生技术之kubernetes学习笔记(8)---Deployment控制器
运维锅总详解Kubernetes之Deployment
如何更好的用好Deployment?本文尝试从Deployment的使用、控制器实现原理及使用规范3方面进行阐述。希望对您有所帮助!
锅总
2024/07/20
2060
运维锅总详解Kubernetes之Deployment
kubernetes系列教程(十一)深入学习Deployment控制器
前面的文章我们深入介绍了Pod的使用,包括Pod定义,Pod资源管理和服务质量,Pod健康检查,Pod存储管理,Pod调度,当Pod所在的node异常时,Pod无法自动恢复,因此Pod很少单独使用,一般以template的形式嵌套在控制器中使用,下来介绍kubernetes系列教程副本控制器Deployment,ReplicaSet,ReplicationController的使用。
HappyLau谈云计算
2019/10/29
3.4K0
kubernetes系列教程(十一)深入学习Deployment控制器
K8S之Pod控制器
我们之前通过资源配置清单,自己创建了一个Pod资源,如果此时这个Pod被删除了,K8S是不会帮我们重新创建的。通过这种方式创建的Pod称之为自主式Pod资源,如果线上所有的服务都需要我们来手动管理Pod,那将是一个巨大的运维开销,那K8S就失去了其存在的意义,所以,K8S为我们提供了Pod控制器资源,专门用于对Pod的管理。Pod控制器可以帮我们自动保持Pod状态处于我们期望的状态,例如Pod的副本数,Pod中使用的容器镜像版本,Pod的更新策略等等。
后场技术
2021/07/23
3470
Kubernetes(k8s)-Deployment介绍
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
运维小路
2024/12/30
3830
Kubernetes(k8s)-Deployment介绍
相关推荐
6.工作负载管理-认识和使用Deployment
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验