共计 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 行业资讯频道。