Kubernetes Deployment是一种用于部署和更新应用的API对象。它管理Pod和ReplicaSet的CREATE/DELETE过程,提供资源创建、删除和更新的声明式定义(通过 Deployment yaml文件)。
Deployment主要功能:
- 在 Deployment创建时,创建一个ReplicaSet来启动指定数目的Pod。
- Deployment可以实施Pod的rolling update,无中断地更新应用。
- 声明式的更新Pod和ReplicaSet的期望状态。
- 暂停和恢复 Deployment 进行部署。
- 扩容和缩容 Deployment,以达到新的Pod数量。
- 回滚到任何的上个 Deployment 版本。
一个简单的Deployment定义:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
这个Deployment以“app=nginx”作为selector,创建2个Pod副本,使用nginx:1.14.2镜像。
所以,Deployment主要是为Pod集合提供声明式的更新与回滚机制。相比RC,Deployment提供了如下新特性:
- 支持ReplicaSet,底层使用ReplicaSet来实现Pod管理和复制。
- 支持rolling update,可以进行控制的Pod更新。
- 支持回滚到历史版本。
- 支持暂停和恢复Deployment进行控制。
- 有更强的扩展性(支持5000+ Pod)。
理解Deployment需要掌握:
- 其资源定义和组成结构。熟悉.spec以及.status等各字段。
- 其Pod管理与升级机制。理解其使用RS进行Pod管理和滚动升级的过程。
- 会根据Deployment策略编写Deployment资源清单。并进行创建、更新与回滚。
- 了解Deployment的限制与注意事项。
- 会根据应用需求选择使用Deployment或StatefulSet等其他管理方式。
所以,Deployment已经成为Kubernetes中最常用的应用管理方案。