深入浅出 Kubernetes:浅谈 Deployment 和 ReplicaSet

深入浅出 Kubernetes:浅谈 Deployment 和 ReplicaSet

一 背景

Deployment 和 ReplicaSet 是 Kubernetes 中两个比较重要的对象,本文简单地讨论了他们之间的一些区别与联系。

二 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-gysl
spec:
  replicas: 2
  selector:
    matchLabels:
      app-1: nginx
      app-2: busybox
  template:
    metadata:
      labels:
        app-1: nginx
        app-2: busybox
    spec:
      containers:
        - name: app-1
          image: nginx:1.16.0
          imagePullPolicy: Always
          ports:
            - containerPort: 80
            - containerPort: 8080
        - name: app-2
          image: busybox
          imagePullPolicy: Never
          command: ['/bin/sh', '-c']
          args:
            - while :;do sleep 20;done

这是一个编排得非常简单的 Deployment,确保携带 app-1=nginx 和 app-2=busybox 标签的 Pod 的个数等于 spec.replicas 指定的总数 2 个。也就是说在这个 Deployment 的 Pod 数量大等于2时,就会有 Pod 被删除,反之则会有 Pod 被创建。

这个 Deployment 由2个部分构成,例子中的 yaml 第1-10行定义了 Deployment 控制器,第10行以后的内容则定义了被控制的 Pod ,template 后面这一部分我们会发现跟之前的 Pod 定义大同小异。

此处顺便提一条命令(更新 Deployment 的镜像):

kubectl set image deployment/deployment-gysl app-1=nginx:latest

这个命令还可以更新以下对象:

  env            Update environment variables on a pod template
  image          更新一个 pod template 的镜像
  resources      在对象的 pod templates 上更新资源的 requests/limits
  selector       设置 resource 的 selector
  serviceaccount Update ServiceAccount of a resource
  subject        Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBinding

三 ReplicaSet

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replica-set-gysl
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest

一个 ReplicaSet 对象就是由副本数目的定义和一个 Pod 模板组成的, 它的定义就是 Deployment 的一个子集。Deployment 控制器实际操纵的是 ReplicaSet 对象,而不是 Pod 对象。

ReplicaSet 负责通过“控制器模式”,保证系统中 Pod 的个数永远等于指定的个数(比如,2 个)。这也正是 Deployment 只允许容器的 restartPolicy=Always 的主要原因:只有在容器能保证自己始终是 Running 状态的前提下,ReplicaSet 调整 Pod 的个数才有意义。

Deployment 通过“控制器模式”,来操作 ReplicaSet 的个数和属性,进而实现“水平扩展 / 收缩”和“滚动更新”这两个编排动作。

四 其他

在之前的文章中已经讨论过 Kubernetes 中的滚动更新,这是 Deployment 控制器与 ReplicaSet 的最大不同之处,也是 Deployment 被广泛使用的最主要原因。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: DeploymentKubernetes中的一种资源对象,用于管理Pod的创建、更新和删除,它可以保证Pod的副本数目和状态的稳定性。Deployment通过控制器的方式,自动地创建和管理Pod,可以实现滚动升级、回滚等操作。 ReplicaSet也是Kubernetes中的一种资源对象,用于确保Pod的副本数目和状态的稳定性。与Deployment不同的是,ReplicaSet没有滚动升级和回滚的功能,它只能保证Pod的副本数目和状态的稳定性。 因此,Deployment是ReplicaSet的一种高级封装,它在ReplicaSet的基础上增加了滚动升级和回滚等功能,更加方便管理和操作。 ### 回答2: Deployment和ReplicaSet都是Kubernetes中非常重要的概念,用于管理Pod副本的部署和自动伸缩。Deployment和ReplicaSet的主要作用是确保Pod的可用性和一致性,当Pod数量发生变化时,它们可以自动地创建或删除Pod副本。 Deployment是ReplicaSet的封装,即Deployment是ReplicaSet控制器的一种。当我们定义一个Deployment时,Kubernetes会自动创建对应的ReplicaSet。Deployment用于定义Pod副本的期望状态,并根据需要创建或删除Pod副本,以使当前状态符合所定义的期望状态。Deployment还支持滚动升级,可以按照指定的策略进行控制,确保在升级过程中不会出现中断。 ReplicaSet是一个Kubernetes控制器,用于管理Pod副本的生命周期。与Deployment相比,ReplicaSet更加原始和直接,它并不会关心应用程序的版本和滚动升级等细节。相反,ReplicaSet只关注创建和维护指定数量的Pod副本,如果Pod副本数量与指定的数量不符合,则会自动创建或删除Pod副本,以使当前状态符合所定义的期望状态。 因此,Deployment和ReplicaSet之间的最大区别在于它们的职责和用途。Deployment主要用于应用程序的版本管理和滚动升级,同时也可以用于管理Pod副本的生命周期。而ReplicaSet则专注于管理Pod副本的数量,保证Pod的可用性和一致性。因此,在使用Kubernetes时,我们需要根据实际情况选择适合的控制器,以满足我们的需求。 ### 回答3: Deployment和ReplicaSet(副本集)是KubernetesK8s)中最常用的两个组件之一,非常重要。Deployment用于在K8s集群中部署应用程序并管理应用程序的扩展和升级。ReplicaSet则用于保证Pod的数量和状态。 Deployment是一种高级别的抽象,它用来定义Pod的期望状态和如何实现它。Deployment控制Pod的副本数量,并确保每个Pod的副本都具有相同的配置和数量。它实现了升级和回滚应用程序的功能,以及控制应用程序在集群中的部署状态。Deployment提供可以让用户更新应用程序的新版本,更新过程不会影响原始Pod的稳定性,而只需要在保证新Pod状态正常的基础上逐步替换旧Pod。 ReplicaSet是Deployment的一个子组件。它主要用于维护Pod的状态,并确保Pod的数量与所需数量相匹配。ReplicaSet的主要目的是实现Pod的水平伸缩和故障转移。在Pod运行时发生故障时,ReplicaSet可以自动创建新的Pod来替换故障的Pod,保证集群中的Pod数量一直与所需数量相匹配。它确保了每个Pod的配置和数量都符合预期,从而维护了应用程序的正常运行。 总的来说,Deployment和ReplicaSet在Kubernetes中扮演着不同的角色,它们共同管理应用程序的部署和状态,确保它们在K8s集群中的健康运行。Deployment关注的是应用程序的部署,管理可更新的应用程序,而ReplicaSet则关注应用程序的状态,确保集群中的Pod数量与所需数量相匹配。两者相辅相成,为Kubernetes应用程序的稳健性和可靠性提供了重要的保障。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值