我正在尝试使用 kubernetes 实现零停机部署,但在我的测试期间,服务负载平衡不佳。
我的 kubernetes list 是:
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
我在部署期间收到一些连接被拒绝
:
curl: (7) Failed to connect to 35.205.100.174 port 80: Connection refused
应用默认为helloapp由 Google Cloud Platform 提供并在 8080
上运行。
集群信息:
- Kubernetes 版本:1.8.8
- 谷歌云平台
- 机器类型:g1-small
最佳答案
看起来您的请求转到了一个未启动的 pod。我通过添加一些参数避免了这种情况:
Liveness probe
以确保应用程序已经启动maxUnavalible: 1
一个一个部署pods
我仍然有一些错误,但它们是可以接受的,因为它们很少发生。在部署过程中,可能会出现一次或两次错误,因此随着负载的增加,错误数量可以忽略不计。我的意思是在部署期间每 2000 个请求出现一两个错误。
关于kubernetes 连接在部署期间被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50307476/