大数跨境
0
0

Kubernetes Deployment

Kubernetes Deployment 开发运维devops
2025-11-14
5
导读:Kubernetes Deployment

Deployment是Kubernetes1.2引入的新概念,引入的目的是为了更好的解决Pod的编排问题,为此Deployment内部使用了Replica Set来实现目的

Deployment 相对于RC的一个最大升级是我们可以随时知道当前Pod"部署"的进度,实际上由于一个Pod的创建、调度、绑定节点及在Node上启动对应的容器这一完整过程需要一定的时间,所以我们期待系统启动N个Pod副本的目标状态,实际上是一个连续变化的"部署过程"导致的最终状

Deployment经典常用场景

1.创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建过程 

2.检查Deployment的状态来看部署动作是否完成(Pod副本的数量是否达到预期的值) 

3.更新Deployment以创建新的Pod (比如镜像升级) 

4.如果当前Deployment不稳定,则回滚到一个早先的Deployment版本 

5.暂停Deployment以便于一次性修改多个PodTemplateSpec的配置项,之后再恢复Deployment,进行新的发布 

6.扩展Deployment以应对高负载 

7.查看Deployment的状态,以此作为发布是否成功的指标 

8.清理不再需要的旧版本ReplicaSets

RC主要功能

·确保Pod数量: 它会确保Kubernetes中有指定数量的Pod在运行,如果少于指定数量的Pod,RC就会创建新的,反之会删除多余的,保证Pod的副本数量不变

·确保Pod健康: 当Pod不健康,RC会杀死不健康的Pod,重新创建新的

·弹性伸缩: 在业务高峰或者低峰的时候,可以用RC来动态调整Pod数量来提供资源的利用率吧,当然也可以使用HPA来实现

·滚动升级: 滚动升级是一种平滑的升级方式,通过逐步替换的策略,保证整体系统的稳定性

Deployment主要功能 

Deployment主要职责和RC是一样的,保证Pod的数量和健康,二者大部分功能都是完全一致的,可以看成是一个升级版的RC控制器

·事件和状态查看: 可以查看deployment的升级详细进度和状态

·回滚: 当升级Pod的时候出现问题,可以使用回滚操作回滚到之前的任一版本

·版本记录: 每一次对Deployment的擦破自拍,都可以保存下来,这也是保证可以回滚到任一版本的基础

·暂停和启动: 对于每一次升级都能够随时暂停和启动

Deployment在滚动升级的时候会产生新的rs

创建一个Nginx Deployment

[root@master ~]# cat nginx-deployment.yamlapiVersion: apps/v1beta1kind: Deploymentmetadata:  name: abcdockerspec:  replicas: 1  selector:    matchLabels:      app: abcdocker  template:    metadata:      labels:        app: abcdocker    spec:      containers:      - name: nginx        image: nginx:1.13.5-alpine        imagePullPolicy: IfNotPresent        ports:        - containerPort: 80 详细解释:NAME:定义的名称DESIRED:Pod副本数量的期望值,即Deployment里定义的ReplicaCURRENT:当前Replica的值,实际上是Deployment所创建的Replica Set里的Replica值,这个值不断增加,直到达到DESIRED为止,表明整个部署过程UP-TO-DATE:最新版本的Pod的副本数量,用于指示在滚动升级的过程中,有多少副本已经成功升级AVAILABLE:当前集群中可用的Pod副本数量,即集群中当前存活的Pod数量

创建nginx-deployment.yaml

[root@master ~]# kubectl create -f nginx-deployment.yaml deployment.apps/abcdocker created

查看对应的Replica Set

[root@master ~]# kubectl get rsNAME                   DESIRED   CURRENT   READY     AGEabcdocker-86459dd76f   1         1         0         18m
$rs的命名与Deployment的名字有关系

查看Pod

[root@master ~]# kubectl get podsNAME                         READY     STATUS              RESTARTS   AGEabcdocker-86459dd76f-m6pj7   0/1       ContainerCreating   0          24m

Pod的命名以Deployment对应的Replica Set的名称为前缀,这种命名很清晰地表明了一个Replica Set创建了哪些Pod

行 [kubetl describe deployments] 可以清楚的看到Deployment控制的Pod详细信息

查看deployment信息

root@test222:/soft/k8s_yaml# kubectl get deploymentNAME                     READY   UP-TO-DATE   AVAILABLE   AGEnfs-client-provisioner   1/1     1            1           18hnginx-test               2/2     2            2           2d18h



deployment 参数解释

参数

解释

NAME

定义的名称

READY

当前就绪(可用)的 Pod 数量 / 期望的副本数

UP-TO-DATE

最新版本的Pod的副本数量,用于指示在滚动升级的过程中,有多少个Pod副本已经成功更新

AVAILABLE

当前集群中可用的Pod副本数量,即集群中当前存活的Pod数量

查看对应的Replica Set 我们可以看到他的命名和Deployment的名字有关系

[root@master ~]# kubectl get rsNAME                          DESIRED   CURRENT   READY     AGEnginx-deployment-7c5b578d88   2         2         2         33d

Pod的管理对象除了RC和Deployment,还包括ReplicaSet、DaemonSet、StatefulSet、Job等

运行下述命令可以查看创建的Pod

[root@master ~]# kubectl get podsNAME                                READY     STATUS    RESTARTS   AGEnginx-deployment-7c5b578d88-gzqvf   1/1       Running   0          30dnginx-deployment-7c5b578d88-jc5td   1/1       Running   1          30d

【声明】内容源于网络
0
0
开发运维devops
10+老运维,devops相关文档精华。
内容 96
粉丝 0
开发运维devops 10+老运维,devops相关文档精华。
总阅读182
粉丝0
内容96