【问题标题】:How do I make Kubernetes scale my deployment based on the "ready"/ "not ready" status of my Pods?如何根据 Pod 的“就绪”/“未就绪”状态让 Kubernetes 扩展我的部署?
【发布时间】:2019-07-01 07:57:03
【问题描述】:

我有一个定义数量为replicas 的部署。如果我的 Pod 准备好/尚未准备好处理新连接,我会使用就绪探针进行通信——我的 Pod 在其生命周期内会在 ready/not ready 状态之间切换。

我希望 Kubernetes 向上/向下扩展部署,以确保始终有所需数量的处于 ready 状态的 pod。

例子:

  • 如果 replicas 为 4 并且有 4 个 Pod 处于 ready 状态,那么 Kubernetes 应该保持当前的副本数。
  • 如果 replicas 为 4,并且有 2 个 ready pod 和 2 个 not ready pod,那么 Kubernetes 应该再添加 2 个 pod。

如何根据 Pod 的“就绪”/“未就绪”状态让 Kubernetes 扩展我的部署?

【问题讨论】:

  • 什么原因还没准备好?
  • 那么你将有 4 个未就绪——因为新的 pod 将首先在此状态下启动,此时第一个未就绪的 pod 将变为就绪。
  • @EngineerDollery 这不仅仅是为了启动,这主要是为了一般生命周期
  • 您可以根据这些资源的 CPU、内存等利用率来扩展/缩减部署。而不是基于 pod 状态

标签: kubernetes scale kubernetes-health-check


【解决方案1】:

您无法在集群中运行状况不佳的节点上安排部署。 master api 只会在健康且满足配额条件的节点上创建 Pod,以便在可调度的节点上创建任何额外的 Pod。

此外,您所定义的称为 k8s 的自动修复概念,基本术语将得到处理。

【讨论】:

    【解决方案2】:

    可以通过在部署定义中指定副本属性来确保始终运行 4 个 pod:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 4  #here we define a requirement for 4 replicas
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
    

    Kubernetes 将确保如果任何 Pod 崩溃,将创建替换 Pod,以便始终有 4 个可用。

    【讨论】:

    • 这不是它的工作方式。在这种情况下,Kubernetes 只关心总共有 4 个 Pod,但它并不能确保 always for 都准备好。
    • 但我的 pod 没有崩溃,它们只是 not ready 一会儿然后恢复。我也不希望 kubernetes 让它们崩溃,只是为了创建新的。
    【解决方案3】:

    我认为这是不可能的。如果 pod 没有准备好,k8 不会让它准备好,因为它与你的应用程序有关。即使它创建新的 pod,也会保证准备好。所以你必须解决非就绪状态背后的原因,然后是k8。只有 k8 可以让他们远离世界负载以避免请求失败

    【讨论】:

    • Kubernetes 会在运行状况检查显示后立即准备就绪,通常是在受监控的端点返回正确的状态代码时。
    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多