注明:当前文档内容来源于51cto课堂‘宽哥’杜宽学习课程。
一、什么是Deployment
Deployment 一般用于部署公司的无状态服务,这个也是最常用的控制器,因为企业内部现在都是以微服务为主,而微服务实现无状态化也是最佳实践,可以利用Deployment的高级功能做到无缝迁移、自动扩容缩容、自动灾难恢复、一键回滚等功能。
Deployment部署过程
二、创建一个基础的Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3 #设置pod的副本个数
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.12
ports:
- containerPort: 80
示列解析:
1.nginx-deployment: Deployment的名称
2.replica: 创建pod的副本数
3.selector: 定义Deployment如何找到要管理的pod,与template的label(标签)对应,apiversion为apps/v1 必须指定该字段
4.template字段包含一下字段
app: nginx使用label(标签)标记Pod;
spec: 表示Pod运行一个名字为nginx的容器
image: 运行此pod使用的镜像;
Port: 容器用于发送和接收流量的接口
三、kubectl 命令简用
# 创建此Deployment
kubctl create -f nginx-deployment.yaml
# 使用kubectl或者kubectl describe 查看此Deployment的状态
kubectl get deploy
输出解释:
Name: 集群中Deployment的名称。
READY:pod就绪个数和总副本数。
UP-TO-DATE: 显示已达到期望状态的被更新的副本数。
AVAILABLE:显示用户可以使用的应用程序副本数。
AGE: 显示应用程序运行时间。
# 查看此Deployment创建的pod 标签
kubectl get pods --show-labels
四、Deployment 更新
注意:仅当Deployment 的pod模版(.spec.template)更改时,才会触发Deployment更新,例如更改内存、cpu配置或者容器的image
更新过程如图所示
使用命令
kubectl set 命令 更新deployment 镜像
kubectl set image deployment nginx-deployment nginx=nginx:1.9.1
kubectl edit 命令 编辑运行中的deployment
kubectl edit deployment nginx-deployment
kubectl rollout status 查看更新过程
kubectl rollout status deployment nginx-deployment
五、回滚Deployment
kubectl rollout history 查看更新历史
kubectl rollout history deployment nginx-deployment
查看某次更新的具体信息
kubectl rollout history deployment nginx-deployment --revision=3
回滚到上一个稳定版本,使用kubectl rollout undo 即可
kubectl rollout undo deployment nginx-deployment
回滚到指定版本,使用--to-revision
kubectl rollout undo deployment nginx-deployment --to-revision=2