【问题标题】:How to kickoff the dead replicas of Kubernetes Deployment如何启动 Kubernetes Deployment 的死副本
【发布时间】:2017-04-17 07:30:06
【问题描述】:

现在我们已将服务部署为具有多个副本的 Kubernetes 部署。一旦服务器崩溃,Kubernetes 会将其容器迁移到另一个可用的服务器上,该服务器的任务大约需要 3~5 分钟。

迁移时,客户端可以访问部署服务,因为我们还有其他正在运行的副本。但有时请求会失败,因为负载均衡器重定向到死容器或正在迁移的容器。

如果 Kubernetes 能够自动启动死副本并在它们在其他服务器上运行时添加它们,那就太好了。否则,我们需要像 haproxy 一样设置 LB 来对多个 Deployment 实例执行相同的工作。

【问题讨论】:

    标签: deployment kubernetes load-balancing


    【解决方案1】:

    您需要配置运行状况检查,以便为服务提供正常工作的负载平衡。请阅读:

    https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

    kubelet 使用就绪探测来了解容器何时准备好开始接受流量。当 Pod 的所有 Container 都准备好时,就认为 Pod 准备好了。此信号的一种用途是控制哪些 Pod 用作服务的后端。当 Pod 未准备好时,它会从服务负载均衡器中移除。

    【讨论】:

    • 谢谢@Lenart。我认为readiness 可能需要我们的要求来启动死副本,我们将在我们的环境中进行测试。
    • 我们测试了readiness,它只在容器运行时有效。一旦我们杀死了kubeletdocker daemonreadiness probe 将永远不会被执行,并且死去的副本仍然被用作Service 的后端。这是预期的行为吗?
    【解决方案2】:

    1、kubelet

    --node-status-update-frequency 持续时间 指定 kubelet 将节点状态发布到 master 的频率。注意:更改常量时要小心,它必须与nodecontroller中的nodeMonitorGracePeriod一起使用。默认:10s(默认10s)

    2、控制器-管理器

    --node-monitor-grace-period 持续时间 在将其标记为不健康之前,我们允许运行的节点无响应的时间量。 必须是 kubelet 的 nodeStatusUpdateFrequency 的 N 倍,其中 N 表示允许 kubelet 发布节点状态的重试次数。 (默认 40 秒

    --pod-eviction-timeout 持续时间 删除故障节点上的 pod 的宽限期。 (默认 5m0s

    【讨论】:

    • 这在kubelet 被杀死时确实有效。谢谢@x1957。
    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多