如何理解Deployment的操作

72次阅读
没有评论

共计 3339 个字符,预计需要花费 9 分钟才能阅读完成。

本篇文章给大家分享的是有关如何理解 Deployment 的操作,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。

我们通过一些简单的例子来演示 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.

以上就是如何理解 Deployment 的操作,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-17发表,共计3339字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)