Google cloud platform Kubernetes:负载平衡器与就绪状态检查
我正在Kubernetes(GKE)中运行一个WebService后端应用程序。它仅由我们的前端Web应用程序使用。通常,来自同一用户(ClientIP)的数十个请求序列。 我的应用程序设置为运行至少2个实例(“minReplicas:2”) 问题: 从日志中我可以看到一个pod过载(接收许多请求)而另一个闲置的情况。两个吊舱都处于Google cloud platform Kubernetes:负载平衡器与就绪状态检查,google-cloud-platform,google-kubernetes-engine,load-balancing,kubernetes-health-check,Google Cloud Platform,Google Kubernetes Engine,Load Balancing,Kubernetes Health Check,我正在Kubernetes(GKE)中运行一个WebService后端应用程序。它仅由我们的前端Web应用程序使用。通常,来自同一用户(ClientIP)的数十个请求序列。 我的应用程序设置为运行至少2个实例(“minReplicas:2”) 问题: 从日志中我可以看到一个pod过载(接收许多请求)而另一个闲置的情况。两个吊舱都处于就绪状态 我的修复尝试: 我尝试添加一个自定义就绪状态检查,当有太多打开的连接时,该检查将返回“不健康”状态。 但即使在运行状况检查返回“不健康”后,负载平衡器也会在
就绪状态
我的修复尝试:
我尝试添加一个自定义就绪状态检查,当有太多打开的连接时,该检查将返回“不健康”状态。
但即使在运行状况检查返回“不健康”后,负载平衡器也会在第二个(正常)pod空闲时向同一个pod发送进一步的请求
以下是service.yaml的摘录:
kind: Service
metadata:
annotations:
networking.gke.io/load-balancer-type: "Internal"
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 8080
sessionAffinity
未指定,因此我希望它为“无”
我的问题:
我做错了什么?
就绪状态检查对负载平衡器有影响吗?
如何控制请求分发
其他信息:
群集创建:
gcloud container --project %PROJECT% clusters create %CLUSTER%
--zone "us-east1-b" --release-channel "stable" --machine-type "n1-standard-2"
--disk-type "pd-ssd" --disk-size "20" --metadata disable-legacy-endpoints=true
--scopes "storage-rw" --num-nodes "1" --enable-stackdriver-kubernetes
--enable-ip-alias --network "xxx" --subnetwork "xxx"
--cluster-secondary-range-name "xxx" --services-secondary-range-name "xxx"
--no-enable-master-authorized-networks
节点池:
gcloud container node-pools create XXX --project %PROJECT% --zone="us-east1-b"
--cluster=%CLUSTER% --machine-type=c2-standard-4 --max-pods-per-node=16
--num-nodes=1 --disk-type="pd-ssd" --disk-size="10" --scopes="storage-full"
--enable-autoscaling --min-nodes=1 --max-nodes=30
服务:
apiVersion: v1
kind: Service
metadata:
name: XXX
annotations:
networking.gke.io/load-balancer-type: "Internal"
labels:
app: XXX
version: v0.1
spec:
selector:
app: XXX
version: v0.1
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 8080
HPA:
部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: XXX
labels:
app: XXX
version: v0.1
spec:
replicas: 1
selector:
matchLabels:
app: XXX
version: v0.1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: XXX
version: v0.1
spec:
containers:
- image: XXX
name: XXX
imagePullPolicy: Always
resources:
requests:
memory: "10Gi"
cpu: "3200m"
limits:
memory: "10Gi"
cpu: "3600m"
readinessProbe:
httpGet:
path: /health/ready
port: 8080
initialDelaySeconds: 3
periodSeconds: 8
failureThreshold: 3
livenessProbe:
httpGet:
path: /health/live
port: 8080
initialDelaySeconds: 120
periodSeconds: 30
nodeSelector:
cloud.google.com/gke-nodepool: XXX
发布此社区wiki答案以扩展我对复制步骤的评论
我复制了您的设置,无法复制您遇到的问题。请求平均分配。至于图像,我使用了plainnginx
,所有的测试都显示使用率/平衡在50%左右(来自容器的日志,它们的cpu使用率)。您能检查一下您的设置中的nginx
图像是否也会出现同样的情况吗
我遵循的复制步骤如下:
- 运行以下脚本,该脚本将创建网络、子网、群集并添加节点池:
project\u id=“在此处插入项目\u id”
zone=“us-east1-b”
region=“美国东部1”
gcloud compute networks创建vpc网络--项目=$project_id--子网模式=自动--mtu=1460--bgp路由模式=区域
gcloud compute防火墙规则创建vpc网络允许icmp--project=$project\u id--network=projects/$project\u id/global/networks/vpc网络--description=Allows\icmp\connections\from\any\source\to\any\instance\on\网络--方向=入口--优先级=65534--源范围=0.0.0.0/0--操作=允许--规则=icmp
gcloud compute防火墙规则创建vpc网络允许内部--project=$project\u id--network=projects/$project\u id/global/networks/vpc网络--description=Allows\connections\from\any\source\in\network\IP\range\to\any\instance\on\network\using\all\协议--方向=入口--优先级=65534--源范围=10.128.0.0/9--操作=允许--规则=全部
gcloud compute防火墙规则创建vpc网络允许rdp--project=$project\u id--network=projects/$project\u id/global/networks/vpc网络--description=Allows\rdp\connections\from\any\source\to\any\instance\on\network\using\port\3389--方向=入口--优先级=65534--源范围=0.0.0.0/0--操作=允许--规则=tcp:3389
gcloud compute防火墙规则创建vpc网络允许ssh--project=$project\u id--network=projects/$project\u id/global/networks/vpc网络--description=Allows\TCP\connections\from\any\source\to\any\instance\on\network\using\port\22--方向=入口--优先级=65534--源范围=0.0.0.0/0--操作=允许--规则=tcp:22
gcloud计算网络子网更新vpc网络--区域=$region--添加辅助范围=服务范围=10.1.0.0/16,pods范围=10.2.0.0/16
gcloud容器--project$project_id clusters创建集群--zone$zone--发布通道“稳定”--机器类型“n1-standard-2”--磁盘类型“pd ssd”--磁盘大小“20”--元数据禁用遗留端点=true--作用域“storage rw”--num nodes“1”--启用堆栈驱动程序kubernetes--启用ip别名--网络“vpc网络”--子网络“vpc网络”--群集辅助范围名称“pods范围”--服务辅助范围名称“服务范围”--不启用主授权网络
gcloud容器节点池创建第二个池--project$project\u id--zone=$zone--cluster=cluster--machine type=n1-standard-4--max pods per node=16--num nodes=1--disk type=“pd ssd”-disk size=“10”-scopes=“storage full”--启用自动缩放--min nodes 1--max nodes 5
gcloud容器群集获取凭据群集--zone=$zone--project=$project\u id
#使用n1-standard-4而不是c2-standard-4
- 使用以下清单计划群集上的工作负载:
apiVersion:apps/v1
种类:部署
元数据:
姓名:nginx
标签:
app:nginx
规格:
副本:3份
选择器:
火柴标签:
app:nginx
模板:
元数据:
标签:
app:nginx
规格:
容器:
-图片:nginx
姓名:nginx
imagePullPolicy:始终
资源:
请求:
内存:“10Gi”
cpu:“3200m”
限制:
内存:“10Gi”
cpu:“3200m”
节点选择器:
cloud.google.com/gke-nodepool:第二个池
---
版本:v1
种类:服务
元数据:
姓名:nginx
注释:
networking.gke.io/load-balancer-type:“内部”
标签:
app:nginx
规格:
选择器:
app:nginx
类型:负载平衡器
端口:
-协议:TCP
港口:80
目标港:80
$kubectl获取节点
名称状态角色年龄版本
gke群集默认池XYZ就绪3h25m v1.18.17-gke.1901
gke集群第二池一就绪83m v1.18.17-gke.1901
gke集群第二池准备就绪83m v1.18.17-gke.1901
gke集群第二池三就绪167m v1.18.17-gke.1901
$kubectl获得吊舱-o宽
名称就绪状态
apiVersion: apps/v1
kind: Deployment
metadata:
name: XXX
labels:
app: XXX
version: v0.1
spec:
replicas: 1
selector:
matchLabels:
app: XXX
version: v0.1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: XXX
version: v0.1
spec:
containers:
- image: XXX
name: XXX
imagePullPolicy: Always
resources:
requests:
memory: "10Gi"
cpu: "3200m"
limits:
memory: "10Gi"
cpu: "3600m"
readinessProbe:
httpGet:
path: /health/ready
port: 8080
initialDelaySeconds: 3
periodSeconds: 8
failureThreshold: 3
livenessProbe:
httpGet:
path: /health/live
port: 8080
initialDelaySeconds: 120
periodSeconds: 30
nodeSelector:
cloud.google.com/gke-nodepool: XXX
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-7db7cf7c77-4ttqb 1/1 Running 0 85m 10.2.1.6 gke-cluster-second-pool-three <none> <none>
nginx-7db7cf7c77-dtwc8 1/1 Running 0 85m 10.2.1.34 gke-cluster-second-pool-two <none> <none>
nginx-7db7cf7c77-r6wv2 1/1 Running 0 85m 10.2.1.66 gke-cluster-second-pool-one <none> <none>