Kubernetes使用探针实现零停机时间重新部署

时间:2019-07-12 10:51:21

标签: kubernetes kubernetes-ingress istio kubernetes-pod

我正在尝试实现零停机时间部署过程,但是它没有用。

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

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

在部署期间,访问pod返回503至少10秒钟。我有问题:

  • 怎么了?
  • 我该如何调试呢?
  • 在哪里可以查看正在探测我的服务的服务的日志?

在获得的豆荚上运行describe

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

2 个答案:

答案 0 :(得分:1)

问题出在

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

如果选择器像#{Release.ReleaseName}#这样会更改每个发行版,则找不到旧的Pod,因此当发行版开始时,服务与Pod断开连接,只有在新Pod完成部署后,服务才会开始重定向

答案 1 :(得分:0)

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

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

有趣的全局示例here