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

时间:2018-12-07 22:59:16

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

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

1 个答案:

答案 0 :(得分:1)

要使部署映像升级得到充分证明并在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,它看起来像这样:

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

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

因此您的部署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升级映像,则不会因请求而停机。