​Kubernetes Deployment​

Kubernetes Deployment

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 类型等有所区别:

1234

apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: nginx-deployment

1234

apiVersion: v1kind: ReplicaSetmetadata:  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/v1beta1kind: Deploymentmetadata:  name: tomcat-deploymentspec:  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.yamldeployment "tomcat-deployment" created

查看 Deployment 信息:

$ kubectl get deploymentNAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGEtomcat-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 的名字有关系:

$ kubectl get rsNAME                           DESIRED   CURRENT   READY     AGEtomcat-deployment-7b54cd85d6   1         1         1         32s

运行下述命令查看创建的 Pod,发现 Pod 的命名与 Deployment 对应的 Replica Set 的名字为前缀,这种命名很清晰的表明了一个 Replica Set 创建了那些 Pod,对于 Pod 滚动升级这种复杂的过程来说,很容易排查错误:3A网络怎么样?3A网络好不好,好久没有分享3A网络了,本月他家发布了2022年年初促销特惠价格,5Mbps、10Mbps、15Mbps 、30Mbps、 50Mbps、100Mbps香港优质或BGPN2、阿里云线路、华为云线路,满足多种项目需求!支持测试。全部线路月付99元起。如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的,目前商家有优质BGP、CN2、线路,国内用户用来做站非常不错。支持市面上99%的付款方式。需要更多支持请访问官网获取。官网:iis3.com

$ kubectl get poNAME                                 READY     STATUS    RESTARTS   AGEtomcat-deployment-7b54cd85d6-4lpvx   1/1       Running   0          48s

运行 describe ,可以清楚的看到 Deployment 控制的 Pod 的水平扩展过程。

Pod 的管理对象,除了 RC 和 Deployment,还包括 ​​ReplicaSet​​​、​​Deployment​​​、​​StatefulSet​​、Job 等,分别用于不同的应用场景中。