Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform Kubernetes:负载平衡器与就绪状态检查_Google Cloud Platform_Google Kubernetes Engine_Load Balancing_Kubernetes Health Check - Fatal编程技术网

Google cloud platform Kubernetes:负载平衡器与就绪状态检查

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过载(接收许多请求)而另一个闲置的情况。两个吊舱都处于就绪状态 我的修复尝试: 我尝试添加一个自定义就绪状态检查,当有太多打开的连接时,该检查将返回“不健康”状态。 但即使在运行状况检查返回“不健康”后,负载平衡器也会在

我正在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答案以扩展我对复制步骤的评论


我复制了您的设置,无法复制您遇到的问题。请求平均分配。至于图像,我使用了plain
nginx
,所有的测试都显示使用率/平衡在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>