前言
相较于直接部署Pod, 以Deployment方式部署更为常见,且Deployment部署可以更容易控制Pod,使Pod拥有多副本、自愈、扩缩容的能力。
多副本
以Deployment的方式同时创建两个nginx
命令行部署
kubectl create deployment my-dep-nginx --image=nginx --replicas=2
yml文件创建
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: my-dep-nginx-yml
name: my-dep-nginx-yml
spec:
replicas: 2
selector:
matchLabels:
app: my-dep-nginx-yml
template:
metadata:
labels:
app: my-dep-nginx-yml
spec:
containers:
- image: nginx
name: nginx
结果
扩缩容
即在多副本的基础上修改副本数量
命令行修改
kubectl scale --replicas=3 deployment/my-dep-nginx
修改yml文件
kubectl edit deploy my-dep-nginx-yml
结果
自愈与故障转移
针对于Deployment创建的Pod,删除Pod后会自动创建
kubectl delete pod my-dep-nginx-6dd785d769-hbsbf
删除deployment创建的pod(模拟pod被误删除等场景)
会自动再创建一个pod
滚动更新
更新的核心在于更新容器中的镜像,所以我们只需要将需要更新的镜像版本告诉k8s即可。流程如下:
- 告诉k8s版本,以命令行传入
kubectl set image deploy/my-dep-nginx nginx=nginx:1.16.1 --record
- 对于deployment部署的多副本,则会拉取新的镜像并到达running状态
- 此时kill掉原来的一个pod
- 即起一个新的pod,kill一个老的pod,以此类推,至全部的pod更新完
版本回滚
流程如下:
- 传入需要回滚到的指定版本
- 滚动更新