开发者社区> 问答> 正文

如何在部署升级期间进行测试以确保我的应用程序是安全的?

我不知道测试什么或如何测试以确保我的应用程序在升级部署时不会进入不可恢复的状态(推出新版本)。据我所知,Kubernetes部署提供滚动升级,这意味着在新的pod准备好之前,旧的pod不会被杀死。但我仍然认为在过渡期间会有gRPC请求丢失。无论如何,我可以测试它吗?

展开
收起
k8s小能手 2018-12-14 15:02:46 1735 0
2 条回答
写回答
取消 提交回答
  • 这是个好问题,同问,等答案

    2019-07-17 23:20:59
    赞同 展开评论 打赏
  • 整合最优质的专家资源和技术资料,问答解疑

    要使部署映像升级完全证明并且0停机,您需要在部署文件readiness probe和rollingUpdate策略中进行两项操作 。

    readiness probe是Kubernetes的检查,以确保您的pod已准备好向其发送流量。在它没有准备好之前,Kubernetes不会使用你的pod。在我们的例子中,它看起来像这样:

    readinessProbe:
    httpGet:

    path: /
    port: 80

    initialDelaySeconds: 5
    periodSeconds: 5
    successThreshold: 1
    我们基本上告诉Kubernetes每5秒向路径发送一次http get请求,如果成功,请将pod标记为准备好并开始向其发送流量。

    您应该知道的另一件事是RollingUpdate strategy,它看起来像这样:

    strategy:
    type: RollingUpdate
    rollingUpdate:

    maxUnavailable: 0
    maxSurge: 1

    它基本上告诉Kubernetes在部署(maxUnavailable: 0)时应该有零个不可用的pod,并且一次应该有一个新的pod(maxSurge: 1)。

    因此,您的部署yaml应如下所示:

    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: prafull/myapp:1
        imagePullPolicy: Always
        ports:
          - containerPort: 80
            protocol: TCP
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
          successThreshold: 1    

    如果您现在使用升级图像kubectl apply -f deployment.yaml,请求将不会停机。

    2019-07-17 23:20:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
移动互联网测试到质量的转变 立即下载
给ITer的技术实战进阶课-阿里CIO学院独家教材(四) 立即下载
F2etest — 多浏览器兼容性测试整体解决方案 立即下载