Deployment 是 Kubernetes v1.2 引入的新概念,引入的目的是为了更好的解决 Pod 的编排问题。为此,Deployment 在内部使用了 Replica Set 来实现目的,无论从 Deployment 的作用与目的、它的 YAML 定义,还是从它的具体命令操作来看,都可以把它看做 RC 的一次升级两者的相似度超过 90%。
Deplyment 相对于 RC 的嘴个最大升级时可以随时知道当前 Pod “部署” 的进度。实际上由于一个 Pod 的创建、调度、绑定节点以及在目标 Node 上启动对应的容器这一完整过程需要一定的时间,所以期待系统启动 N 个 Pod 副本的目标状态,实际上是一个连续变化的 “部署过程” 导致的最终状态。
Deployment 的典型使用场景有以下几个。
- 创建一个 Deployment 对象来生成对应的 Replica Set 并完成 Pod 副本的创建过程。
- 检查 Deployment 的状态来部署动作是否完成(Pod 副本的数量是否达到预期的值)。
- 更新 Deployment 以创建新的 Pod(比如镜像升级)。
- 如果当前 Deployment 不稳定,则回滚到一个早先的 Deployment 版本。
- 暂停 Deployment 以便于下一次性修改多个 PotTemplateSpec 的配置项,之后再回复 Deployment,进行新的发布。
- 扩展 Deployment 以应对高负载。
- 查看 Deployment 的状态,以此作为发布是否完成的指标。
- 清理不在需要的旧版本 ReplicaSets。
Deployment 的定义与 Replica Set 的定义很类似,除了 API 声明与 Kind 类型等有所区别: 3A网络怎么样?3A网络好不好,好久没有分享3A网络了,本月他家发布了2022年年初促销特惠价格,5Mbps、10Mbps、15Mbps 、30Mbps、 50Mbps、100Mbps香港优质或BGPN2、阿里云线路、华为云线路,满足多种项目需求!支持测试。全部线路月付99元起。如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的,目前商家有优质BGP、CN2、线路,国内用户用来做站非常不错。支持市面上99%的付款方式。需要更多支持请访问官网获取。官网:iis3.com
| 1234 | apiVersion: extensions``/v1beta1``kind: Deployment``metadata:`` ``name: nginx-deployment |
|---|
| 1234 | apiVersion: v1``kind: ReplicaSet``metadata:`` ``name: nginx-repset |
|---|
下面通过运行一些例子来一起直观的感受这个新概念。首先创建一个 tomcat 的 Deployment 描述文件,内容如下:3A网络怎么样?3A网络好不好,好久没有分享3A网络了,本月他家发布了2022年年初促销特惠价格,5Mbps、10Mbps、15Mbps 、30Mbps、 50Mbps、100Mbps香港优质或BGPN2、阿里云线路、华为云线路,满足多种项目需求!支持测试。全部线路月付99元起。如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的,目前商家有优质BGP、CN2、线路,国内用户用来做站非常不错。支持市面上99%的付款方式。需要更多支持请访问官网获取。官网:iis3.com
tomcat-deployment.yaml
apiVersion: extensions``/v1beta1``kind: Deployment``metadata:`` ``name: tomcat-deployment``spec:`` ``replicas: 1`` ``selector:`` ``matchLabels:`` ``tier: frontend`` ``matchExpressions:`` ``- {key: tier, operator: In, values: [frontend]}`` ``template:`` ``metadata:`` ``labels:`` ``app: app-demo`` ``tier: frontend`` ``spec:`` ``containers:`` ``- name: tomcat-dome`` ``image: tomcat`` ``imagePullPolicy: IfNotPresent`` ``ports:`` ``- containerPort: 8080 |
|---|
创建命令:
$ kubectl apply -f tomcat-deployment.yaml``deployment ``"tomcat-deployment" created |
|---|
查看 Deployment 信息:
$ kubectl get deployment``NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE``tomcat-deployment 1 1 1 1 21s |
|---|
对上述输出中涉及的数量解释如下:
- DESIRED:Pod 副本数量的期望值,即 Deployment 里定义的 Replica。
- CURRENT:当前 Replica 的值,实际上是 Deployment 所创建的 Replica Set 里的 Replica 值,这个值不断增加,直到达到 DESIRED 为止,表名整个部署过程完成。
- UP-TO-DATE:最新版本的 Pod 的副本数量,用于只是在滚动升级的过程中,有多少个 Pod 副本已经成功升级。
- AVAILABLE:当集群中可用的 Pod 副本数量,即集群中当前存活的 Pod 数量。
运行下述命令查看对应的 Replica Set,看到它的命名与 Deployment 的名字有关系:3A网络怎么样?3A网络好不好,好久没有分享3A网络了,本月他家发布了2022年年初促销特惠价格,5Mbps、10Mbps、15Mbps 、30Mbps、 50Mbps、100Mbps香港优质或BGPN2、阿里云线路、华为云线路,满足多种项目需求!支持测试。全部线路月付99元起。如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的,目前商家有优质BGP、CN2、线路,国内用户用来做站非常不错。支持市面上99%的付款方式。需要更多支持请访问官网获取。官网:iis3.com
$ kubectl get rs``NAME DESIRED CURRENT READY AGE``tomcat-deployment-7b54cd85d6 1 1 1 32s |
|---|
运行下述命令查看创建的 Pod,发现 Pod 的命名与 Deployment 对应的 Replica Set 的名字为前缀,这种命名很清晰的表明了一个 Replica Set 创建了那些 Pod,对于 Pod 滚动升级这种复杂的过程来说,很容易排查错误:
$ kubectl get po``NAME READY STATUS RESTARTS AGE``tomcat-deployment-7b54cd85d6-4lpvx 1``/1 Running 0 48s |
|---|
运行 describe ,可以清楚的看到 Deployment 控制的 Pod 的水平扩展过程。
Pod 的管理对象,除了 RC 和 Deployment,还包括 ReplicaSet、Deployment、StatefulSet、Job 等,分别用于不同的应用场景中。