【K8s】专题四(2):Kubernetes 控制器之 Deployment

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!

公众号二维码


目录

一、基本介绍

二、工作原理

三、相关特性

四、资源清单(示例)

五、常用操作


一、基本介绍

在 Kubernetes 中,Deployment 是一种高级 API 对象,用于声明式地管理无状态应用的生命周期,确保指定数量的 Pod 副本始终运行,并且是最新的。

说明:无状态应用(Stateless Application)是指应用程序在处理客户请求时不会存储客户端的任何状态信息。简单来说,无状态应用不会记住之前的交互或状态,每次客户端发起请求时,应用都会从头开始处理请求,不依赖于之前的任何状态信息。 在无状态应用中,所有的请求都被视为独立的、没有关联的事件。

Deployment 控制器可以确保无状态应用的高可用性和一致性,支持:

  • 动态创建和销毁 Pod
  • 查看升级进度和状态
  • 升级回滚,并具有版本记录
  • 暂停和恢复升级
  • 滚动重启


二、工作原理

Deployment 控制器通过 ReplicaSet(副本集控制器)来管理 Pod 的生命周期。ReplicaSet 确保指定数量的 Pod 副本始终运行。

Deployment 控制器的工作流程如下:

  • 创建 Deployment:用户创建一个 Deployment 对象,定义了应用的预期状态,包括 Pod 模板、副本数量等
  • 创建 ReplicaSet:Deployment 控制器创建或更新一个 ReplicaSet,以确保 Pod 副本的数量与预期状态一致
  • 创建 Pod:ReplicaSet 根据 Deployment 定义的 Pod 模板创建或更新 Pod
  • 监控 Pod:Deployment 控制器持续监控 Pod 的状态,确保副本数量与预期状态一致
  • 更新 Pod:当用户更新 Deployment 时,控制器会根据定义的更新策略逐步替换旧版本的 Pod


三、相关特性
  • 声明式更新:用户可以定义应用的预期状态,Deployment 控制器会自动将当前状态更改为预期状态
  • 自愈能力:如果 Pod 由于某些原因失败,Deployment 控制器会自动替换它们
  • 水平扩展:用户可以指定 Pod 副本的数量,并根据需要进行水平扩展或缩减
  • 滚动更新:Deployment 控制器支持滚动更新,创建新 Pod 逐步替换旧 Pod,以确保应用的高可用性
  • 回滚支持:如果更新过程中出现问题,可以轻松回滚到以前的版本


四、资源清单(示例)
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo-deployment
  template:
    metadata:
      labels:
        app: demo-deployment
    spec:
      containers:
      - name: demo-container
        image: demo-image:latest
        ports:
        - containerPort: 80

上述 deployment.yaml 文件定义了一个名为 demo-deployment 的 Deployment 对象,该对象包括 3 个 Pod 副本,每个 Pod 包含一个名为 demo-container 的业务容器,业务容器使用 demo-image:latest 镜像,并指定监听端口为 80。

说明:可以通过以下命令查看 Deployment 资源清单支持定义的内容

kubectl explain deployment --recursive


五、常用操作

1、创建 Deployment

# 方式一:命令行
kubectl create deployment demo-deployment --image=demo-image:latest

# 方式二:资源清单
kubectl create -f deployment.yaml
或
kubectl apply -f deployment.yaml


2、更新 Deployment

# 方式一:更新 deployment.yaml 内容后执行
kubectl apply -f deployment.yaml

# 方式二:更新镜像
kubectl set image deployment demo-deployment app=demo-image:v1

# 方式三:更新环境变量
kubectl set env deployment demo-deployment keyname=keyvalue

3、回滚 Deployment

# 默认回滚至上一版本
kubectl rollout undo deployment demo-deployment

# 回滚至指定版本
kubectl rollout undo deployment demo-deployment --to-revision=3

# 查看可回滚版本
kubectl rollout history deployment demo-deployment

4、查看 Deployment

# 查看实例列表
kubetcl get deployment

# 查看详细信息
kubectl describe deployment demo-deployment

5、删除 Deployment

# 方式一:命令行
kubectl delete deployment demo-deployment

# 方式二:资源清单
kubectl delete -f deployment.yaml

6、副本伸缩

kubectl scale deployment demo-deployment --replicas=1

  • 41
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行者Sun1989

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值