【Kubernetes】Deployment 的创建和使用(实战)

Deployment 控制器》系列,共包含以下几篇文章:

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

Deployment 的创建和使用

创建 deployment-demo.yaml 文件,并在其中输入以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-demo
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
  • .metadata.name:创建名为 deployment-demo 的 Deployment。
  • .spec.replicas:指示 Deployment 创建具有 3 3 3 个副本的 Pod。
  • .spec.selector:定义 Deployment 如何查找要管理的 Pod。在这种情况下,只需在 Pod 模板中定义对应的标签,则 Kubernetes 会进行自动匹配。
  • .spec.template:定义 Pod 的相关属性(🚀 埋一个彩蛋,文末会提到)。
  • .spec.template.metadata.labels:给 Pod 添加标签 Label。
  • .spec.template.spec:使用 Nginx 1.7.9 版本的镜像创建一个名为 nginx 的容器,并暴露容器的端口。

运行以下命令创建 Deployment。

kubectl apply -f deployment-demo.yaml

查看创建的 Deployment 和 ReplicaSet。

kubectl get deployments,replicaset,pod
kubectl get deploy,rs,pod

输出的信息如下图所示:

在这里插入图片描述

查看每个 Pod 自动生成的标签。

kubectl get pods --show-labels

在这里插入图片描述

修改 YAML 文件来实现配置信息的更新。以下 YAML 文件将 Nginx 的版本升级到 1.9.1 并将 Pod 的副本数改成了 4

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-demo
  labels:
    app: nginx
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.9.1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

🚀 也可以使用命令行的方式来实现更新,例如:kubectl set image deploy deployment-demo nginx=nginx:1.9.1

运行以下命令重新应用 Deployment。

kubectl apply -f deployment-demo.yaml

在这里插入图片描述

获取 Deployment 的信息。

kubectl describe deployments deployment-demo

输出的信息如下:

在这里插入图片描述

执行以下命令将 Nginx 的版本更新为 1.7.9

kubectl --record deployment.apps/deployment-demo \
set image deployment.apps/deployment-demo nginx=nginx:1.7.9

🚀 为了能够追溯修改历史记录,这里使用了 --record 参数。

获取 Deployment 的信息。

kubectl describe deployments deployment-demo

输出的部分信息如下。可以看出,Nginx 的版本又回到了 1.7.9

在这里插入图片描述

我们看一下此时 ReplicaSet 的情况。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

执行以下命令追溯修改的历史。

kubectl rollout history deployment deployment-demo

输出的信息如下:

在这里插入图片描述

执行以下命令将 Nginx 回滚到 2 版本。

kubectl rollout undo deployment deployment-demo --to-revision=2

重新获取 Deployment 的信息。

kubectl describe deployments deployment-demo

输出的信息如下。可以看到,Nginx 又回滚到 1.9.1 版本。

在这里插入图片描述

我们看一下此时 ReplicaSet 的情况。

在这里插入图片描述
在这里插入图片描述

以下命令将对 Deployment 进行缩放。

kubectl scale deployment deployment-demo --replicas=7

在这里插入图片描述

我们看一下此时 ReplicaSet 的情况。

在这里插入图片描述
在这里插入图片描述

我们编辑 deployment-demo.yaml,将参数 replicas 改为 5

在这里插入图片描述

我们编辑 deployment-demo.yaml,将 Nginx 的版本更新为 1.7.9

在这里插入图片描述

我们编辑 deployment-demo.yaml,将 Nginx 的版本更新为 1.25.5

在这里插入图片描述
在这里插入图片描述

🚀 根据上述实验可知,只有修改了 pod template 中的内容(即 .spec.template 定义的内容),pod-template-hash 的值才会变化,才会生成一个新的 ReplicaSet 对象。

在这里插入图片描述

我们对 Deployment 进行的每一次更新操作,都会生成一个新的 ReplicaSet 对象,是不是有些多余,甚至浪费资源?所以,Kubernetes 项目还提供了一个指令,使得我们对 Deployment 的多次更新操作,最后只生成一个 ReplicaSet 对象。具体的做法是,在更新 Deployment 前,你要先执行一条 kubectl rollout pause 指令。它的用法如下所示:

kubectl rollout pause deployment deployment-demo

这个命令的作用,是让这个 Deployment 进入了一个 “暂停” 状态。由于此时 Deployment 正处于 “暂停” 状态,所以我们对 Deployment 的所有修改,都不会触发新的 “滚动更新”,也不会创建新的 ReplicaSet。而等到我们对 Deployment 修改操作都完成之后,只需要再执行一条 kubectl rollout resume 指令,就可以把它恢复回来,如下所示:

kubectl rollout resume deployment deployment-demo
  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G皮T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值