无状态应用管理Deployment
1、Deployment介绍
Deployment一般用于部署公司的无状态服务。
格式:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15
ports:
- containerPort: 80
注:从Kubernetes 1.16版本开始,彻底废弃了其他的APIVersion,只能使用apps/v1,1.16以下的版本可以使用extension等。
- metadata.name:Deployment的名称,例如:nginx-deployment。
- metadata.labels.app:Deployment的标签,例如:nginx
- spec.replicas:Deployment的副本数量,例如:3
- spec.selector.matchLabels.app:Deployment管理的pod,与metadata.labels.app 对应,apiVersion为apps/v1必须指定该字段。
- template.metadata.labels.app:定义Pod的标签,例如:nginx
- template.spec.containers.name:定义Pod运行的容器名称,例如:nginx
- template.spec.containers.image:定义Pod使用的镜像,例如:nginx:1.15
8)template.spec.containers.ports.containerPort:定义Pod用于发送和接收流量的端口,例如:80
2、创建Deployment
使用kubectl create创建Deployment
3、查看Deployment
是用kubectl get deployment(简写deploy)
NAME:Deployment的名称;
READY:Pod就绪个数和总副本数;
UP-TO-DATE:显示已达到期望状态的被更新的副本数;
AVAILABLE: 显示用户可以使用的应用程序副本数,当前为3,说明目前达到望的Pod;
AGE:显示应用程序运行的时间。
3.1 查看当前Deployment对应的ReplicaSet
kubectl get rs -l app=nginx
3.2 查看Deployment创建的Pod
kubectl get pods
3.3 查看pod 节点信息
kubectl get pods -owide
4、更新Deployment
注意:当且仅当Deployment的Pod模板(即.spec.template)更改时,才会触发Deployment更新,例如更改内存、CPU配置或者容器的image。
假如更新nginx Pod的image使用nginx:latest,并使用--record记录当前更改的参数,后期回滚时可以查看到对应的信息:
kubectl set image deployment nginx nginx=registry.cn-shenzhen.aliyuncs.com/zhouwb/nginx --record
过describe查看Deployment的详细信息:
kubectl describe deploy nginx
5、回滚Deployment
当更新了版本不稳定或配置不合理时,可以对其进行回滚操作,假设我们又进行了几次更新(此处以更新镜像版本触发更新,更改配置效果类似):
kubectl set image deployment nginx nginx=registry.cn-shenzhen.aliyuncs.com/zhouwb/nginx:latest --record
kubectl set image deployment nginx nginx=registry.cn-shenzhen.aliyuncs.com/zhouwb/nginx:1.15 --record
使用kubectl rollout history查看更新历史:
kubectl rollout history deployment nginx
如果只需要回滚到上一个稳定版本,使用kubectl rollout undo即可:
如果要回滚到指定版本,使用--to-revision参数:
kubectl rollout undo deployment nginx --to-revision=4
6、扩容Deployment
当公司访问量变大,或者有预期内的活动时,三个Pod可能已无法支撑业务时,可以提前对其进行扩展。
使用kubectl scale动态调整Pod的副本数,比如增加Pod为5个:
kubectl scale deployment nginx --replicas=5