kubernetes - Kubernetes 连接在部署期间被拒绝
问题描述
我正在尝试使用 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
该应用程序是谷歌云平台提供的默认helloapp,运行在8080
.
集群信息:
- Kubernetes 版本:1.8.8
- 谷歌云平台
- 机器类型:g1-小型
解决方案
看起来您的请求发送到了一个未启动的 pod。我通过添加一些参数来避免这种情况:
Liveness probe
确保应用程序已经启动maxUnavalible: 1
一个一个地部署 pod
我仍然有一些错误,但它们是可以接受的,因为它们很少发生。在部署过程中,可能会出现一两次错误,因此随着负载的增加,您将遇到可忽略不计的错误。我的意思是在部署期间每 2000 个请求出现一两个错误。
推荐阅读
- r - 将 rmarkdown 渲染到字符变量
- ios - Firebase MLKit 迁移 - 架构 x86_64 的未定义符号
- javascript - 警报删除:无法从平面列表中删除项目
- python - 有没有办法在 tkinter 中实时更新标签?
- python - 未找到熊猫模块
- c# - C# 计算在 const 和 variable locals 之间有什么不同?
- snowflake-cloud-data-platform - 为 python 安装雪花连接器时出错
- xml - xpath 条件不适用于 xmllint
- python - 仅反转字符链接列表中的元音
- mysql - 如何比较不同表的SQL字段,然后用值替换其他字段?