《Kubernetes设计与实现》
  • Introduction
  • 内容简介
  • 前言
  • [第二章:Kubernetes基础]
    • 2.3 Kubernetes API
  • [第三章:工作负载管理]
    • [3.1 Pod]
      • 3.1.1 Pod概述
      • 3.1.1 Pod初体验
    • [3.2 ReplicationController]
      • 3.2.1 ReplicationController概述
      • 3.2.2 ReplicationController初体验
    • [3.3 ReplicaSet]
      • 3.3.1 ReplicaSet概述
      • 3.3.2 ReplicaSet初体验
    • [3.4 Deployment]
      • 3.4.1 Deployment概述
      • 3.4.2 Deployment初体验
    • [3.5 DaemonSet]
      • 3.5.1 DaemonSet概述
      • 3.5.2 DaemonSet初体验
  • [第四章:服务]
    • [4.1 Service]
      • 4.1.1 Service概述
      • 4.1.1 Service上手体验
  • [第六章:配置管理]
    • [6.1 Secret--机密信息管理]
      • 6.1.1 Secret概述
  • [第七章:集群认证]
    • [7.1 证书]
      • 7.1.1 证书基础
      • 7.1.2 证书签发流程
  • [第九章:准入控制器]
    • [9.1 准入控制器概述]
      • 9.1.1 概述
      • [9.1.2 内置默认启动的插件]
        • 9.1.2.1 NamespaceLifecycle
        • 9.1.2.15 MutatingAdmissionWebhook
  • [第十章:ResourceQuota]
    • 10.1 ResourceQuota概述
  • [第十六章:API设计约定]
    • 16.1 字段可选性设计约定
    • 16.2 condition设计约定
    • 16.3 event设计约定
  • [第十九章:Kubernetes生态]
    • [19.1 Kind]
      • [19.1.1 Kind概述]
      • 19.1.2 映射端口到主机
      • 19.1.3 配置端口转发
由 GitBook 提供支持
在本页
  • 创建
  • 查看
  • 查看Deployment
  • 查看ReplicaSet
  • 查看Pod
  • 更新
  • 删除

这有帮助吗?

  1. [第三章:工作负载管理]
  2. [3.4 Deployment]

3.4.2 Deployment初体验

本节,我们通过一些简单的例子来演示Deployment的创建、查看、更新、删除等操作,以期快速地掌握Deployment的用法。

创建

首先我们先将以下配置保存到名为deployment.yaml的文件中。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19.0

该份配置将创建一个名为nginx-deployment的Deployment资源对象,根据spec.replicas中的信息可知,它期望有3个Pod副本。

接下来使用kubectl create命令将该配置提交给kube-apiserver,如下所示:

[root@ecs-d8b6 manifests]# kubectl create -f deployment.yaml 
deployment.apps/nginx-deployment created

根据命令行输出内容可知,名为nginx-deployment的Deployment已创建完成。

查看

当创建一个Deployment资源对象时,Deployment控制器不会直接创建Pod,而是通过创建ReplicaSet来间接创建Pod。

查看Deployment

查看新创建的Deployment资源:

[root@ecs-d8b6 manifests]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           90s

命令行输出中各字段含义如下:

  • NAME:Deployment资源名称,同配置中的metadata.name;

  • READY:<已处于Reday状态的Pod数量>/<期望的Pod数量>;

  • UP-TO-DATE:处于最新状态的Pod数量;

  • AVAILABLE:可用的Pod数量;

  • AGE:应用运行时间,也是资源自创建至今经过的时间。

此处READY和AVAILABLE有一些细微的区别,当Pod中指定的容器全部运行起来后,就可以认定该Pod为READY,所以READY含义更倾向于Running,而AVAILABLE要求会更严格一些,只有当Pod处于READY状态且持续一段时间后才可被认定为AVAILABLE,其含义更倾向于可用的数量。

UP-TO-DATE表示运行最新配置的Pod数量,当修改Deployment配置中Pod模版时,新版的Pod会被创建且短期内会与旧版的Pod并存,UP-TO-DATE正是表示已创建的新版Pod数量。

查看ReplicaSet

接着查看ReplicaSet:

[root@ecs-d8b6 manifests]# kubectl get replicaset
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6fd78f555b   3         3         3       104s

由Deployment创建的ReplicaSet名称由Deployment的名称和一个随机字符串组成。

查看Pod

接着查看最终生成的Pod:

[root@ecs-d8b6 manifests]# kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6fd78f555b-clf9w   1/1     Running   0          110s
nginx-deployment-6fd78f555b-vlvp6   1/1     Running   0          110s
nginx-deployment-6fd78f555b-wjslg   1/1     Running   0          110s

这些Pod都是由ReplicaSet自动创建出来的,其名称由ReplicaSet名称和一个随机字符串组成。

更新

由于Deployment控制器通过ReplicaSet来创建并管理Pod,当修改Deployment配置中的spec.replicas时,Deployment控制器相应地也会修改Replicaset中spec.replicas值,最终由Replicaset控制器来调整Pod的副本数,该部分功能我们已经在介绍ReplicaSet时演示过,此处不再演示。

我们在此演示一种Deployment相较于ReplicaSet更高阶的功能,即应用版本的升降级。当前应用使用的nginx镜像版本为1.19.0,我们希望把该版本降为1.18.0。

通过以下命令,将spec.template.spec.containers.image值由nginx:1.19.0改为nginx:1.18.0:

[root@ecs-d8b6 manifests]# kubectl edit deployments nginx-deployment

然后再次查看Deployment、ReplicaSet和Pod:

[root@ecs-d8b6 manifests]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           33m
[root@ecs-d8b6 manifests]# kubectl get replicaset 
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6fd78f555b   0         0         0       33m
nginx-deployment-7df9bc6ff5   3         3         3       32s
[root@ecs-d8b6 manifests]# kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-7df9bc6ff5-4rz8l   1/1     Running   0          40s
nginx-deployment-7df9bc6ff5-tmxwl   1/1     Running   0          44s
nginx-deployment-7df9bc6ff5-vmdzp   1/1     Running   0          42s

可以看到,之前的ReplicaSet(nginx-deployment-6fd78f555b)副本数已被修改为0,新的ReplicaSet(nginx-deployment-7df9bc6ff5)被创建了出来,进而创建了新的Pod。新的Pod中运行的容器镜像版本就是我们修改后的容器镜像版本,读者可以自行验证。

删除

当删除Deployment资源时,由Deployment控制器创建的ReplicaSet也会被删除,因此由ReplicaSet创建的Pod也会被删除。

[root@ecs-d8b6 manifests]# kubectl delete deployment nginx-deployment 
deployment.apps "nginx-deployment" deleted
[root@ecs-d8b6 manifests]# kubectl get replicaset
No resources found in default namespace.
[root@ecs-d8b6 manifests]# kubectl get pods
No resources found in default namespace.
上一页3.4.1 Deployment概述下一页[3.5 DaemonSet]

最后更新于4年前

这有帮助吗?