Kubernetes 零停机时间重新部署与探测器

Kubernetes zero downtime redeploy with probes

我正在尝试实现零停机部署过程,但它不起作用。

我的部署有一个副本。 pod 探针如下所示:

livenessProbe:
  httpGet:
    path: /health/live
    port: 80
  initialDelaySeconds: 15
  periodSeconds: 20
readinessProbe:
  httpGet:
    path: /health/ready
    port: 80
  initialDelaySeconds: 15
  periodSeconds: 20

部署期间,访问 pod returns503 至少 10 秒。我的问题:

运行 describe 在 pod 上我得到:

Liveness:       http-get http://:80/health/live delay=5s timeout=1s period=2s #success=1 #failure=3
Readiness:      http-get http://:80/health/ready delay=5s timeout=1s period=2s #success=1 #failure=3

除了探测之外,您还需要在 Deployment 中使用 RollingUpdate 策略:

strategy:
  type: RollingUpdate
  rollingUpdate:
     maxUnavailable: 25%
     maxSurge: 1

有趣的全局示例here

问题出在

kind: Service
spec:
  type: ClusterIP
  selector:
    app: maintenance-api
    version: "1.0.0"
    stage: #{Release.EnvironmentName}#
    release: #{Release.ReleaseName}#

如果选择器是像#{Release.ReleaseName}#这样的东西,它会改变每个版本,那么它就像找不到旧的 pod,所以当版本开始时,服务与 pod 断开连接,并且只有在新 pod 完成部署之后服务将开始重定向到它。