一、认识Deployment控制器
Deployment控制器为Pod和Replica Set控制器提供声明式的更新;你只需要在Deployment中描述你想要的目标状态是什么,Deployment Controller就会帮你将Pod和Relica Set控制器的实际状态改变到你的目标状态。你也可以定义一个新的Deployment,也可以创建一个新的替换旧的Deployment控制器。
当我们在使用Deployment控制器做滚动更新时,Deployment控制器首先会创建出一个新的ReplicaSet控制器,在新的ReplicaSet控制器上创建出新的Pod;并且通过一定的频率,将老的ReplicaSet控制器上的Pod发送退出信号;但是无论如何更新,老的ReplicaSet控制器上的Pod副本数和新的ReplicaSet副本数必须要满足Deployment控制器所规定的数量;当老的ReplicaSet控制器中的Pod被用户访问完毕时,便会退出;新的用户访问会被调度到新的ReplicaSet控制器下的Pod上。
二、Deployment典型的应用场景如下
- 使用Deployment控制器来创建ReplicaSet,ReplicationSet在后台创建Pod;检查启动状态,看它是成功还是失败。
- 通过更新Deployment控制器中的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicationSet,Deployment控制器会按照自己所控制的速率将Pod从旧的ReplicaSet中移动到新的ReplicaSet中。
- 如果当前状态不稳定,回滚到之前的Deployment revision,每次回滚都会更新Deployment的revision。
- 支持动态扩缩容,扩容Deployment控制器以满足更高的负载。
- 暂停Deployment控制器来应用PodTemplateSpec的多个修复,然后恢复上线。
- 根据Deployment控制器的状态来判断上线是否失败了。
- 定时清理不必要的ReplicaSet
三、Deployment使用操作
1)创建Deployment资源
]# cat deploy-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
labels:
app: myapp
release: canary
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
]# kubectl apply -f deploy-demo.yaml
deployment.apps/myapp-deploy created
2)查看Deployment资源
]# kubectl get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
myapp-deploy 3/3 3 3 2m35s myapp ikubernetes/myapp:v1 app=myapp,release=canary
]# kubectl get rs -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
myapp-deploy-65fb6c8459 3 3 3 2m43s myapp ikubernetes/myapp:v1 app=myapp,pod-template-hash=65fb6c8459,release=canary
]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-deploy-65fb6c8459-bkcbj 1/1 Running 0 3m49s 10.244.1.28 node1 <none> <none>
myapp-deploy-65fb6c8459-c44fs 1/1 Running 0 3m49s 10.244.1.27 node1 <none> <none>
myapp-deploy-65fb6c8459-fbbl7 1/1 Running 0 3m49s 10.244.2.10 node2 <none> <none>
3)访问pod资源
]# curl 10.244.1.28
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
]# curl 10.244.1.27
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
]# curl 10.244.2.10
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
4)查看Deoloyment和ReplicaSet的详细信息
]# kubectl describe deployment myapp-deploy
Name: