我不知道测试什么或如何测试以确保我的应用程序在升级部署时不会进入不可恢复的状态(推出新版本)。据我所知,Kubernetes部署提供滚动升级,这意味着在新的pod准备好之前,旧的pod不会被杀死。但我仍然认为在过渡期间会有gRPC请求丢失。无论如何,我可以测试它吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要使部署映像升级完全证明并且0停机,您需要在部署文件readiness probe和rollingUpdate策略中进行两项操作 。
readiness probe是Kubernetes的检查,以确保您的pod已准备好向其发送流量。在它没有准备好之前,Kubernetes不会使用你的pod。在我们的例子中,它看起来像这样:
readinessProbe:
  httpGet:
path: /
port: 80initialDelaySeconds: 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: 1template:
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,请求将不会停机。