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

1

2

3

4

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

  name: nginx-deployment

1

2

3

4

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 的名字有关系:

$ kubectl get rs

NAME                           DESIRED   CURRENT   READY     AGE

tomcat-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 po

NAME                                 READY     STATUS    RESTARTS   AGE

tomcat-deployment-7b54cd85d6-4lpvx   1/1       Running   0          48s

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

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

### Kubernetes Deployment 创建、配置与管理 #### 创建 Deployment 为了在 Kubernetes 中创建一个 Deployment,通常需要编写 YAML 文件来定义所需的资源。下面是一个简单的 Nginx Deployment 定义文件 `nginx-deployment.yaml`: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 ``` 通过运行命令可应用此配置并启动三个副本的 Nginx Pod[^1]。 ```bash kubectl apply -f nginx-deployment.yaml ``` #### 配置 Deployment Deployment 的配置主要集中在 `.spec.template.spec.containers[]` 下面的部分,这里可以指定容器镜像版本、环境变量、卷挂载等参数。对于更复杂的场景,还可以设置自动扩展策略、健康检查探针以及更新策略等内容。 例如,在上面的例子中修改容器端口映射或增加环境变量如下所示: ```yaml containers: - name: nginx image: nginx:latest env: - name: EXAMPLE_ENV_VAR value: "example_value" ports: - containerPort: 8080 ``` #### 管理 Deployment 一旦 Deployment 被成功创建之后,可以通过多种方式对其进行管理和维护。常见的操作包括但不限于查看状态、滚动升级、回滚到之前的版本等。 ##### 查看状态 要获取关于特定 Pod 更多的信息,比如事件日志或者其他诊断数据,可以执行以下命令[^3]: ```bash kubectl describe pod <pod-name> ``` 这有助于理解为什么某些 Pods 可能未能正常启动或者遇到了其他问题。 ##### 更新和回滚 当想要改变现有应用程序的行为时(如更改使用的 Docker 映像),只需编辑相应的 YAML 文件再重新提交即可触发一次新的部署过程。如果新版本存在问题,则很容易利用内置的历史记录功能来回退至前一稳定版。 ##### 故障排除 面对潜在的问题,除了上述提到的方法外,还有专门针对 Kubernetes Deployment 排查故障的文章提供了详尽指导,帮助定位和解决问题所在[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值