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

标签 testing kubernetes integration-testing google-kubernetes-engine

我不知道要测试什么或如何测试以确保在升级部署(推出新版本)时我的应用程序不会进入不可恢复的状态。我了解到 Kubernetes 部署提供滚动升级,这意味着旧的 pod 不会被杀死,直到新的 pod 就绪。但我仍然假设在过渡期间会丢失 gRPC 请求。无论如何,我可以测试它吗?

最佳答案

要使您的部署镜像升级得到充分证明并且停机时间为 0,您需要在部署文件中添加两样东西 readiness proberollingUpdate 策略.

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

readinessProbe:
  httpGet:
    path: /
    port: 80
  initialDelaySeconds: 5
  periodSeconds: 5
  successThreshold: 1

我们基本上是告诉 Kubernetes 每五秒向路径/发送一个 http get 请求,如果成功,则将 pod 标记为准备就绪并开始向其发送流量。

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

strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 0
    maxSurge: 1

它基本上告诉 Kubernetes 在部署时应该有零个不可用的 pod (maxUnavailable: 0) 并且一次应该有一个新的 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 升级您的镜像,您的请求将不会停机。

关于testing - 如何测试以确保我的应用程序在部署升级期间是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53677832/

相关文章:

apache-spark - PySpark SparkSession Builder 与 Kubernetes Master

在黑莓设备上测试 - 多次添加和删除应用程序

c# - 我应该使用什么类型的项目进行集成测试

java - 我可以为这个程序编写什么断言测试用例?

c# - 系统测试与验收测试 - 测试用例的差异

kubernetes - Kubernetes 中资源限制的目的是什么?

Kubernetes 动态设置服务注解值

django - 在 Django 中使用 LiveServerTestCase 时使用代码登录

java - 测试 applet 的最佳机制是什么?

unit-testing - 如果一个方法调用另一个方法,是单元测试还是集成测试?