【Kubernetes】Deployment 的状态

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

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

Deployment 的状态

在这里插入图片描述

Deployment 控制器在整个生命周期中存在 3 3 3 种状态:

  • 已完成Complete
  • 进行中Progressing
  • 失败Failed

通过观察 Deployment 的当前特征,可以判断 Deployment 的状态。下表展示了不同状态时 Deployment 的特征。

Deployment 的状态
Deployment 的特征
已完成Complete(1)Deployment 管理的所有 Pod 副本都已更新到指定的版本了。
(2)Deployment 管理的所有 Pod 副本都可用。
(3)所有旧的 Pod 副本都已停止。
进行中Progressing(1)Deployment 正在通过 ReplicaSet 创建 Pod。
(2)Deployment 正在通过 ReplicaSet 进行扩容 / 缩容。
(3)Deployment 管理的 Pod 已经就绪或者可用。
失败Failed(1)就绪探针检测失败。
(2)资源的配额不足。
(3)镜像下载错误。
(4)权限与应用配置错误。

下面通过一个例子来验证 Deployment 在生命周期内的不同状态。

修改 deployment-demo.yaml 文件,将其副本数设置为 1。完整的 YAML 文件如下:

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

运行以下命令创建 Deployment。

kubectl apply -f deployment-demo.yaml

运行以下命令获取 Deployment 的详细信息。

kubectl describe deploy deployment-demo

输出的信息如下:

在这里插入图片描述

🚀 从输出的信息可以看出,Deployment 的 ProgressingAvailable 都是 True。这说明 Deployment 已经满足 已完成Complete)状态的特征,因此此时 Deployment 已经进入 已完成Complete)状态。

执行 Deployment 的扩容操作,将其副本数设置为 5

kubectl scale deployment deployment-demo --replicas=5

使用 kubectl rollout status 命令监视 Deployment 扩容的进度。

kubectl rollout status deployment deployment-demo

输出的信息如下:

在这里插入图片描述

在 Deployment 扩容过程中,运行以下命令获取 Deployment 的详细信息。

kubectl describe deploy deployment-demo

输出的信息如下:

Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      False   MinimumReplicasAvailable

🚀 从参数 ProgressingAvailable 的值(Progressing=TrueAvailable=False)可以看出,Deployment 正处于 进行中Progressing)状态。

更新 Nginx 的版本为 nginx:1.123

kubectl set image deployment deployment-demo nginx=nginx:1.123

nginx:1.123 是一个不存在的版本,所以会导致 Deployment 更新失败。

为了尽快看到 Deployment 的出错信息,可以将 .spec.progressDeadineSeconds 字段设置得小一些,例如 120 s 120 s 120s

kubectl patch deployment deployment-demo \
-p '{"spec": {"progressDeadlineSeconds":120}}'

🚀 .spec.progressDeadlineSeconds 字段表示在 Deployment 完成前需要等待的最长时间,默认值是 600 s 600 s 600s

等待 120 s 120s 120s 后,运行以下命令获取 Deployment 的详细信息。

kubectl describe deploy deployment-demo

输出的信息如下:

在这里插入图片描述

⭕ 由于 Deployment 无法下载镜像信息,因此进入 失败Failed)状态。这时参数 Processing 的值是 False

使用 kubectl rollout status 命令监视 Deployment 的更新进度。

kubectl rollout status deployment deployment-demo

输出的信息如下:

在这里插入图片描述

### Kubernetes Deployment 创建、配置与管理 #### 创建 Deployment 为了在 Kubernetes 中创建一个 Deployment,通常需要编写 YAML 文件来定义所需的资源。下面是一个简单的 Nginx Deployment 定义文件 `nginx-deployment.yaml`: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 ``` 通过运行命令可应用此配置并启动三个副本的 Nginx Pod[^1]。 ```bash kubectl apply -f nginx-deployment.yaml ``` #### 配置 Deployment Deployment 的配置主要集中在 `.spec.template.spec.containers[]` 下面的部分,这里可以指定容器镜像版本、环境变量、卷挂载等参数。对于更复杂的场景,还可以设置自动扩展策略、健康检查探针以及更新策略等内容。 例如,在上面的例子中修改容器端口映射或增加环境变量如下所示: ```yaml containers: - name: nginx image: nginx:latest env: - name: EXAMPLE_ENV_VAR value: "example_value" ports: - containerPort: 8080 ``` #### 管理 Deployment 一旦 Deployment 被成功创建之后,可以通过多种方式对其进行管理和维护。常见的操作包括但不限于查看状态、滚动升级、回滚到之前的版本等。 ##### 查看状态 要获取关于特定 Pod 更多的信息,比如事件日志或者其他诊断数据,可以执行以下命令[^3]: ```bash kubectl describe pod <pod-name> ``` 这有助于理解为什么某些 Pods 可能未能正常启动或者遇到了其他问题。 ##### 更新和回滚 当想要改变现有应用程序的行为时(如更改使用的 Docker 映像),只需编辑相应的 YAML 文件再重新提交即可触发一次新的部署过程。如果新版本存在问题,则很容易利用内置的历史记录功能来回退至前一稳定版。 ##### 故障排除 面对潜在的问题,除了上述提到的方法外,还有专门针对 Kubernetes Deployment 排查故障的文章提供了详尽指导,帮助定位和解决问题所在[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

G皮T

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

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

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

打赏作者

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

抵扣说明:

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

余额充值