以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本介绍
在 Kubernetes 中,Deployment 是一种高级 API 对象,用于声明式地管理无状态应用的生命周期,确保指定数量的 Pod 副本始终运行,并且是最新的。
说明:无状态应用(Stateless Application)是指应用程序在处理客户请求时不会存储客户端的任何状态信息。简单来说,无状态应用不会记住之前的交互或状态,每次客户端发起请求时,应用都会从头开始处理请求,不依赖于之前的任何状态信息。在无状态应用中,所有的请求都被视为独立的、没有关联的事件。
Deployment 控制器可以确保无状态应用的高可用性和一致性,支持:
工作原理
Deployment 控制器通过 ReplicaSet(副本集控制器)来管理 Pod 的生命周期。ReplicaSet 确保指定数量的 Pod 副本始终运行。
Deployment 控制器的工作流程如下:
相关特性
资源清单(示例)
# 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