Kubernetes资源对象:Deployment

简介: Kubernetes资源对象:Deployment

Deployment

Deployment 为 Pod 和 Replica Set(下一代 Replication Controller)提供声明式更新。你只需要在 Deployment 中描述你想要的目标状态是什么,Deployment controller 就会帮你将 Pod 和 Replica Set 的实际状态改变到你的目标状态。你可以定义一个全新的 Deployment,也可以创建一个新的替换旧的 Deployment。


deployment demo

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

deployment.spec.replicas : 代表pod实例个数

deployment.spec.template: 代表生成pod实例的模板


创建depployment

创建deployment后,deployment-controller 会根据deployment 信息生成对应的replicaset,通过后台查看,会发现replicaset 的name 为 {deployment.name}-{根据deployment.spec.template生成hash},replicaset 实例个数为deployment.spec.replicas 数值。

根据replicaset 创建后续pods 实例,deployment-controller 会根据pods 实例的创建过程更新 deployment status

status:
  availableReplicas: 2
  conditions:
  - lastTransitionTime: 2016-10-04T12:25:42Z
    lastUpdateTime: 2016-10-04T12:25:42Z
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  observedGeneration: 3
  replicas: 2
  unavailableReplicas: 2

status.replicas 代表当前实例个数

status.avaliableReplicas: 代表已ready的实例个数

status.unavaliableReplicas: 代表还未ready的实例个数


更新deployment

更新deployment,deployment-controller会生成新的rs 或者沿用旧rs,这个根据deployment.spec.template 生成的hash 是否一致决定。

deployment关于更新策略有两种:Recreate 与 RollingUpdate

Recreate 策略: 在创建出新的 Pod 之前会先杀掉所有已存在的 Pod;也就是说更新deployment,旧deployment生成的pods会先进行删除,删除完毕后,再创建新deployment下的pods,这种做法,会导致服务中断,故生产环境是不允许这种策略的。

RollingUpdate 策略: 根据配置策略,创建部分新pods实例,等待新的pods实例ready 后,删除相同个数的旧pods实例,循环这样的操作,直到所有新pods 实例个数为deployment设定的deployment.spec.replicas

RollingUpdate 策略配置:

strategy:
     rollingUpdate:
         maxSurge: 0
         maxUnavailable: 1
      type: RollingUpdate

spec.strategy.rollingUpdate.maxUnavailable :   是可选配置项,用来指定在升级过程中不可用 Pod 的最大数量。该值可以是一个绝对值(例如 5),也可以是期望 Pod 数量的百分比(例如 10%)。通过计算百分比的绝对值向下取整。如果 .spec.strategy.rollingUpdate.maxSurge 为 0 时,maxUnavailable 这个值不可以为 0。默认值是 1。

spec.strategy.rollingUpdate.maxSurge 是可选配置项,用来指定可以超过期望的 Pod 数量的最大个数。该值可以是一个绝对值(例如 5)或者是期望的 Pod 数量的百分比(例如 10%)。当 MaxUnavailable 为 0 时该值不可以为 0。通过百分比计算的绝对值向上取整。默认值是 1

当deployment 进行了更新且启用Rollingupdate策略:deployment controller 会根据deployment的最新内容,生成新 rs, 然后根据Rollingupdate策略来调节 新旧rs 的replicas


新旧rs replicas 变迁公式

新rs的replicas 变迁:newRs.replicas + (deploy.replicas+maxSurge-allPods)

旧rs的replicas 变迁:oldRs.replicas – (allReadyPods-(deploy.replicas-maxUnavailable))

例子: 当前deployment replicas为5 ,maxSurge为1 , maxUnavailable为0

newRs

0

1

1

2

2

3

3

4

OldRs

5

5

4

4

3

3

2

2

NewRS 初步创建,replicas为0,根据公式,replicas变为1,等待new rs对应的pod变为ready,则oldrs replicas变为4 ,之后new RS replicas 变为 2,等待new rs对应的pod变为ready,则oldrs replicas变为3…..


扩容缩容

通过修改 deployment.spec.replicas 来达到 修改replicaset 的replicas,从而扩容缩容服务

kubernetes 存在一种资源 horizontal pod autoscaling(hpa),该资源写着扩容缩容的规则,hpa-controller 会根据 hpa配置的规则,自动扩容缩容对应的服务

hpa demo

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50

hpa.spec.scaleTargetRef: 代表该规则生效于哪些服务

hpa.spec.minReplicas : 代表自动缩容,最小值不可比minreplicas 小

hpa.spec.maxReplicas: 代表自动扩容,最大值不可比maxreplicas 大

hpa.spec.metrics : 代表自动扩容缩容规则

hpa.spec.metrics[].resource  代表该规则类型为资源类型,根据资源使用量,来判定是否扩容缩容

hpa.spec.metrics[].resource.targetAverageUtilization: 代表目标百分比,举例现场景就是50%cpu

HPA允许一定范围内的CPU使用量的不稳定,只有avg(CurrentPodsConsumption) / Target小于90%或者大于110%时才会触发扩容或缩容,避免频繁扩容、缩容造成颠簸。


hpa-controller  流程

1、创建HPA资源,设定目标CPU使用率限额,以及最大、最小实例数

2、收集一组中(PodSelector)每个Pod最近一分钟内的CPU使用率,并计算平均值

3、读取HPA中设定的CPU使用限额

4、计算:平均值之和/限额,求出目标调整的实例个数

5、目标调整的实例数不能超过1中设定的最大实例数,如果没有超过,则扩容;超过,则扩容至最大的实例个数

6、回到2,不断循环


暂停/恢复deployment

对deployment进行暂停/恢复操作,其实就是对deployment.spec.paused状态修改;

当deployment 处于暂停状态,去修改deployment 内容,不会因此创建出对应的pods;相应的deployment-controller处于这个状态,不会去更新与创建replicaset。


回滚deployment

当服务不稳定,需要回滚到一个稳定版本,deployment 提供版本回滚机制;

当deployment 修后,创建或更新对应的replicaset,该replicaset 会有一个标志位

replicaset.annotations: 
          deployment.kubernetes.io/revision: "5"

revision 值会随着deployment 的更新次数不断累加,故deployment 回滚 到某版本,可以根据revision找到replicaset,从而确定pod teamplate内容,来达到更新deployment 达到指定版本


清除旧replicaset

随着deployment修改次数变多,相应的replicaset的个数也会增多,为了避免过多的replicaset,可以通过设置 .spec.revisonHistoryLimit 项来指定 deployment 最多保留多少 revison 历史记录

 


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
借助阿里云ACK One注册集群,充分利用阿里云强大ACS GPU算力,实现DeepSeek推理模型高效部署。
|
8月前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
203 3
|
9月前
|
弹性计算 运维 Kubernetes
使用ACK Edge统一管理多地域的ECS资源
本文介绍如何使用ACK Edge来管理分布在多个地域的ECS资源。
|
8月前
|
弹性计算 运维 Kubernetes
使用ACK Edge统一管理多地域的ECS资源
使用ACK Edge统一管理多地域的ECS资源
112 0
|
8月前
|
存储 Kubernetes 对象存储
部署 DeepSeek 但 GPU 不足,ACK One 注册集群助力解决 IDC GPU 资源不足
部署 DeepSeek 但 GPU 不足,ACK One 注册集群助力解决 IDC GPU 资源不足
|
JSON 运维 Kubernetes
|
11月前
|
Kubernetes 应用服务中间件 nginx
【赵渝强老师】K8s中的Deployment控制器
Kubernetes中的Deployment用于部署无状态应用程序,管理Pod的数量、更新方式和资源限制。通过创建和管理ReplicaSet,Deployment可以实现Pod的自动扩缩容、滚动更新和回滚。本文介绍了Deployment的基本概念,并通过一个具体的示例演示了如何使用Deployment创建、更新和管理Pod。
197 1
|
11月前
|
存储 Kubernetes 调度
【赵渝强老师】K8s中Deployment控制器与StatefulSet控制器的区别
K8s中的Deployment控制器用于管理无状态应用程序,关注Pod数量、更新方式等;而StatefulSets控制器则管理有状态应用程序,提供持久存储和唯一标识符,适用于需要稳定网络标识符和持久化存储的场景。两者的主要区别在于是否维护状态和顺序。
357 0
|
3天前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
33 1
|
10天前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。

热门文章

最新文章

推荐镜像

更多