我不知道要测试什么或如何进行测试以确保在升级部署(推出新版本)时我的应用程序不会进入不可恢复的状态。我知道Kubernetes部署提供滚动升级,这意味着直到准备好新Pod为止,旧Pod不会被杀死。但是我仍然假设过渡期间将丢失gRPC请求。无论如何,我可以进行测试吗?
答案 0 :(得分:1)
要使部署映像升级得到充分证明并在0
停机的情况下,部署文件readiness probe
和rollingUpdate
策略中需要两件事。
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
升级映像,则不会因请求而停机。