什么是 Kubernetes Deployment?

Kubernetes Deployment是一种用于部署和更新应用的API对象。它管理Pod和ReplicaSet的CREATE/DELETE过程,提供资源创建、删除和更新的声明式定义(通过 Deployment yaml文件)。
Deployment主要功能:

  1. 在 Deployment创建时,创建一个ReplicaSet来启动指定数目的Pod。
  2. Deployment可以实施Pod的rolling update,无中断地更新应用。
  3. 声明式的更新Pod和ReplicaSet的期望状态。
  4. 暂停和恢复 Deployment 进行部署。
  5. 扩容和缩容 Deployment,以达到新的Pod数量。
  6. 回滚到任何的上个 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提供了如下新特性:

  1. 支持ReplicaSet,底层使用ReplicaSet来实现Pod管理和复制。
  2. 支持rolling update,可以进行控制的Pod更新。
  3. 支持回滚到历史版本。
  4. 支持暂停和恢复Deployment进行控制。
  5. 有更强的扩展性(支持5000+ Pod)。

理解Deployment需要掌握:

  1. 其资源定义和组成结构。熟悉.spec以及.status等各字段。
  2. 其Pod管理与升级机制。理解其使用RS进行Pod管理和滚动升级的过程。
  3. 会根据Deployment策略编写Deployment资源清单。并进行创建、更新与回滚。
  4. 了解Deployment的限制与注意事项。
  5. 会根据应用需求选择使用Deployment或StatefulSet等其他管理方式。
    所以,Deployment已经成为Kubernetes中最常用的应用管理方案。