首页 > 解决方案 > 延迟 Kubernetes pod 创建以实现零停机

问题描述

我正在尝试在 Kubernetes 中实现部署的滚动更新。我关注了很多文章,说停机时间为零,但是当我连续运行 curl 时。在得到回复之前,我的一些请求失败了。下面是部署文件。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: my-image
        imagePullPolicy: Always
        ports:
          - containerPort: 80
            protocol: TCP
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
          successThreshold: 1

我做的下一件事是添加

MinReadySeconds:120

这可以解决这个问题,但它不是最佳解决方案,因为我们希望在下一个 Pod 开始服务请求并终止旧 Pod 时立即切换到它。我有两个问题——

  1. 当两个 pod(新的和旧的)都在运行并且都开始为流量提供服务时,是否会出现这种情况?那也不理想。因为我们希望一次只有一个 pod 为请求提供服务。
  2. Kubernetes 是否提供了其他开箱即用的解决方案来进行滚动部署?

标签: kuberneteskubectlkubernetes-deployment

解决方案


尝试这个。这应该适合你。尝试更新您的图像。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: nginx
        imagePullPolicy: Always
        ports:
          - containerPort: 80
            protocol: TCP
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
          successThreshold: 1

为了您更好地理解,请查看此链接


推荐阅读