Kubernetes工作负载资源之Deployment
发布日期:2025-04-03 12:17:47 浏览次数:11 分类:精选文章

本文共 2026 字,大约阅读时间需要 6 分钟。

Kubernetes工作负载资源之Deployment

1. 前言

一个Deployment控制器为Pods和ReplicaSets提供声明式的更新能力。Deployment控制器通过调整实际状态以实现目标状态,同时以受控速率进行操作,确保Kubernetes集群的稳定性。

2. 适用场景

2.1 创建Deployment启动ReplicaSet

通过创建Deployment,定义新的ReplicaSet,ReplicaSet会在后台创建所需的Pod。检查ReplicaSet的上线状态,确保所有Pod都已成功上线。

2.2 更新Pod模板

通过修改Deployment的PodTemplateSpec声明新的Pod状态,系统会在后台创建新的ReplicaSet,旧的ReplicaSet会被逐渐替代。每次修改都会生成新的Deployment修订版本。

2.3 回滚到旧版本

当Deployment状态不稳定时,可以选择回滚到较早的版本。每次回滚都会生成新的修订版本。

2.4 扩容

扩大Deployment的规模以处理更多负载,通过修改Deployment的replicas字段即可实现。

2.5 暂停并恢复部署

在对PodTemplateSpec进行多次修改后,先暂停部署,待确认新版本稳定后再恢复部署执行。

2.6 检查部署状态

通过查看Deployment的状态(如kubectl get deployments命令)确保部署运行正常,关注其就绪、更新、可用和年龄等字段信息。

3. 启动 Pod

3.1 编写yaml

编写deployment_nginx.yml文件,用于创建一个ReplicaSet并启动三个Nginx Pod。

示例:

apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx-deployment  labels:    app: nginxspec:  replicas: 3  selector:    matchLabels:      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:        - name: nginx          image: nginx:1.12.2          ports:            - containerPort: 80

3.2 启动

使用kubectl命令创建Deployment:

kubectl create -f deployment_nginx.yml deployment.apps/nginx-deployment created

检查ReplicaSet状态:

kubectl get rs

4. 更新 Deployment

4.1 只有当模板发生变化时才会触发更新

只有当Deployment的Pod模板(.spec.template)发生变化时,比如标签或镜像更新,才会触发上线操作。其他修改如扩缩容不会触发上线。

4.2 先更新Nginx Pod

通过以下命令将Nginx镜像从1.12.2更新到1.13:

kubectl --record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1

或直接执行:

kubectl set image deployment nginx-deployment nginx=nginx:1.13

5. 检查 Deployment 上线历史

5.1 查看修订历史

查看Deployment的滚动历史和修订信息:

kubectl rollout history deployment.v1.apps/nginx-deployment

输出显示每个修订的原因,CHANGE-CAUSE字段从kubernetes.io/change-cause注解复制而来。

5.2 设置 CHANGE-CAUSE 信息

手动添加注解并使用--record标志保存操作:

kubectl annotate deployment.v1.apps/nginx-deployment kubernetes.io/change-cause="image updated to 1.9.1"

6. 图解滚动发布

滚动发布通常包括以下步骤:

  • 创建新ReplicaSet。
  • 交换旧和新ReplicaSet的Pod,逐步替换。
  • 确保新ReplicaSet完全 operational。
  • 最终删除旧ReplicaSet。
  • 通过这些步骤,可以实现零停机时间或最小化停机时间的滚动发布,确保服务连续性。

    上一篇:kubernetes常用工具
    下一篇:Kubernetes对象Service详解

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年04月20日 16时12分57秒