无法理解 DeploymentStatus 中的 availableReplicas、readyReplicas、unavailableReplicas

Shi*_*gla 8 kubernetes kubernetes-apiserver

我正在使用服务器上的 Kubernetes API 创建部署。部署 Pod 有两个容器 - 一个是主容器,另一个是 Sidecar 容器,用于检查 Pod 的运行状况并在运行状况良好时调用服务器。

我正在使用端点来进行部署。它具有部署状态属性,其结构如下所述

我无法理解availableReplicasreadyReplicasreplicas和字段。unavailableReplicasupdatedReplicas

我也检查了 Kubernetes 的文档和这些 SO 问题 - What is the Difference Between current and available pod replicas in kubernetes deployment? kubectl中“可用”和“不可用”的含义描述了部署,但无法推断 pod 准备就绪、正在运行和可用之间的区别。有人可以解释一下这些术语和状态之间的区别吗?

OhH*_*ark 13

Deployment的Status中的不同种类replicas可以描述如下:

  • Replicas- 描述此部署应有多少个 Pod。它是从规范中复制的。spec.replicas这是异步发生的,因此在很短的时间内,您可以读取不等于 的Deployment status.replicas

  • availableReplicas- 表示有多少 pod 至少在一段时间内准备就绪 ( minReadySeconds)。这可以防止状态抖动。

  • unavailableReplicas- 是应该存在的 pod 总数,减去必须创建的 pod 数量,或尚不可用的 pod 数量(例如,失败或尚未准备好minReadySeconds)。

  • updatedReplicas- 部署可到达的、与规范模板匹配的 Pod 数量。

  • readyReplicas- 通过所有副本部署可访问的 Pod 数量。

让我们使用官方的Deployment 示例来创建一个 ReplicaSet 来启动三个 nginx Pod:

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.14.2
        ports:
        - containerPort: 80
Run Code Online (Sandbox Code Playgroud)

Deployment 创建三个复制 Pod,如.spec.replicas字段所示。

通过运行以下命令创建部署:

kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
Run Code Online (Sandbox Code Playgroud)

运行kubectl get deployments以检查 Deployment 是否已创建。

如果仍在创建 Deployment,则输出类似于以下内容:

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   0/3     0            0           1s
Run Code Online (Sandbox Code Playgroud)

当您检查集群中的部署时,会显示以下字段:

  • NAME- 列出命名空间中部署的名称。

  • READY- 显示有多少个应用程序副本可供您的用户使用。它遵循准备/期望的模式。

  • UP-TO-DATE- 显示已更新以达到所需状态的副本数量。

  • AVAILABLE- 显示有多少个应用程序副本可供您的用户使用。

  • AGE- 显示应用程序已运行的时间量。

kubectl get deployments几秒钟后再次运行。输出类似于:

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           18s
Run Code Online (Sandbox Code Playgroud)

rs要查看Deployment 创建的ReplicaSet ( ),请运行kubectl get rs。输出类似于:

NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-75675f5897   3         3         3       18s
Run Code Online (Sandbox Code Playgroud)

ReplicaSet 输出显示以下字段:

  • NAME- 列出命名空间中 ReplicaSet 的名称。

  • DESIRED- 显示所需的应用程序副本数量,该数量是您在创建部署时定义的。这是期望的状态。

  • CURRENT- 显示当前正在运行的副本数量。

  • READY显示有多少个应用程序副本可供您的用户使用。

  • AGE- 显示应用程序已运行的时间量。

availableReplicas正如您所看到的, 和之间没有实际区别,readyReplicas因为这两个字段都显示用户可以使用多少个应用程序副本。

当谈到Pod 生命周期时,重要的是要看到Pod 阶段容器状态Pod 条件之间的区别,它们都有不同的含义。我强烈建议您仔细阅读链接的文档,以便对其背后有一个扎实的理解。

  • 非常感谢您的回答!我仍然无法区分“availableReplicas”和“readyReplicas”。对于容器来说,什么是就绪、运行和可用?您能否举个例子,其中包含一些值,例如 - 所需的总 relocas - 10,准备好 - 5,类似这样的值? (4认同)