Skip to content

39 kubernetes无感知部署服务

Jinxin Chen edited this page Dec 11, 2019 · 1 revision

本文介绍在kubernetes环境下如何不停机部署服务

kubernetes不是已经支持滚动更新吗,为什么还要讨论这个问题?

虽然kubernetes的deployment可以滚动更新,但是当一个新的pod建立,及旧的pod删除时,如果此时正好有请求到旧的pod,则会被返回一个错误。

如何处理?

对于一个即将被删除的pod来说,需要满足如下条件:

  1. 不再接收新的请求
  2. 已经接收的请求要执行完毕

对于第1点,可以用readinessProbe来解决:

readinessProbe:
    httpGet:
    path: /
    port: 80
    initialDelaySeconds: 2
    periodSeconds: 1

对于第2点,可以用preStop来解决:

lifecycle:
    preStop:
    exec:
        command:
        - sleep
        - "10"

更多的优化

对于需要较长时间来启动的服务来说,可以通过readinessProbe参数来保证服务启动完成之后才开始处理请求,从而避免启动完成之前请求到来而出现错误。

参考:

Clone this wiki locally