我正在尝试使用kubernetes实现零停机部署,并且在我的测试期间,服务无法很好地平衡负载。
我的kubernetes清单是:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
template:
metadata:
labels:
app: myapp
version: "0.2"
spec:
containers:
- name: myapp-container
image: gcr.io/google-samples/hello-app:1.0
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
---
apiVersion: v1
kind: Service
metadata:
name: myapp-lb
labels:
app: myapp
spec:
type: LoadBalancer
externalTrafficPolicy: Local
ports:
- port: 80
targetPort: 8080
selector:
app: myapp
如果我使用外部IP循环服务,请说:
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.35.240.1 <none> 443/TCP 1h
myapp-lb LoadBalancer 10.35.252.91 35.205.100.174 80:30549/TCP 22m
使用bash脚本:
while True
do
curl 35.205.100.174
sleep 0.2s
done
我在部署期间收到了一些connection refused
:
curl: (7) Failed to connect to 35.205.100.174 port 80: Connection refused
该应用程序是Google Cloud Platform提供的默认helloapp,并在8080
上运行。
群集信息:
答案 0 :(得分:0)
看起来您的请求转到未启动的广告连播。我通过添加一些参数来避免这种情况:
Liveness probe
确保应用已启动
maxUnavalible: 1
逐个部署pod
我仍然有一些错误,但它们是可以接受的,因为它们很少发生。在部署期间,可能会发生一次或两次错误,因此随着负载的增加,您将出现可忽略不计的错误。我的意思是在部署期间每2000个请求有一两个错误。