在EKS(Kubernetes)和ELB中使用gunicorn和django的高延迟
我在Kubernetes中运行DjangoRestAPI,当我在同一部署中使用gunicorn为DjangoRestAPI提供服务时,我注意到一些非常糟糕的性能。一个简单的HttpResponse平均需要约6000ms。如果没有gunicorn,由在EKS(Kubernetes)和ELB中使用gunicorn和django的高延迟,kubernetes,gunicorn,amazon-elb,amazon-eks,Kubernetes,Gunicorn,Amazon Elb,Amazon Eks,我在Kubernetes中运行DjangoRestAPI,当我在同一部署中使用gunicorn为DjangoRestAPI提供服务时,我注意到一些非常糟糕的性能。一个简单的HttpResponse平均需要约6000ms。如果没有gunicorn,由python manage.py runserver提供服务,同样的请求只需要50毫秒 下面是我通过运行命令gunicornapi.wsgi--bind 0.0.0.0:8000对djangoRestAPI和gunicorn的部署 apiVersion
python manage.py runserver
提供服务,同样的请求只需要50毫秒
下面是我通过运行命令gunicornapi.wsgi--bind 0.0.0.0:8000对djangoRestAPI和gunicorn的部署
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: djangoapi
type: web
name: djangoapi
namespace: "default"
spec:
replicas: 3
template:
metadata:
labels:
app: djangoapi
type: web
spec:
containers:
- name: djangoapi
image: <repo>/app:v0.9a
imagePullPolicy: Always
args:
- gunicorn
- api.wsgi
- --bind
- 0.0.0.0:8000
envFrom:
- configMapRef:
name: djangoapi-config
ports:
- containerPort: 8000
imagePullSecrets:
- name: regcred
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: djangoapi-svc
namespace: "default"
labels:
app: djangoapi
spec:
ports:
- port: 8000
protocol: TCP
targetPort: 8000
selector:
app: djangoapi
type: web
type: NodePort
以防万一,以下是我的yaml文件:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: api-ingress
namespace: "default"
labels:
app: api-ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:eu-west-1:<>:certificate/<>
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]'
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/healthcheck-interval-seconds: '15'
alb.ingress.kubernetes.io/healthcheck-timeout-seconds: '8'
alb.ingress.kubernetes.io/healthy-threshold-count: '2'
alb.ingress.kubernetes.io/healthcheck-path: '/'
alb.ingress.kubernetes.io/healthcheck-protocol: HTTPS
alb.ingress.kubernetes.io/success-codes: "200"
spec:
rules:
- host: test.mydomain.com
http:
paths:
- path: /*
backend:
serviceName: echoheaders
servicePort: 80
- host: dev.mydomain.com
http:
paths:
- path: /*
backend:
serviceName: djangoapi-svc
servicePort: 8000
apiVersion:extensions/v1beta1
种类:入口
元数据:
名称:api入口
名称空间:“默认”
标签:
应用程序:api入口
注释:
kubernetes.io/ingres.class:alb
alb.ingres.kubernetes.io/certificate-arn:arn:aws:acm:eu-west-1::certificate/
alb.ingres.kubernetes.io/listen-port:“[{”HTTPS:443}”
alb.ingres.kubernetes.io/scheme:面向互联网
alb.ingres.kubernetes.io/healthcheck-interval-seconds:'15'
alb.ingres.kubernetes.io/healthcheck-timeout-seconds:'8'
alb.ingres.kubernetes.io/health-threshold-count:'2'
alb.ingres.kubernetes.io/healthcheck-path:“/”
alb.ingres.kubernetes.io/healthcheck-protocol:HTTPS
alb.ingres.kubernetes.io/success-code:“200”
规格:
规则:
-主机:test.mydomain.com
http:
路径:
-路径:/*
后端:
服务名称:echoheaders
服务端口:80
-主机:dev.mydomain.com
http:
路径:
-路径:/*
后端:
服务名称:djangoapi svc
服务端口:8000
我的alb入口控制器基于
我想知道我部署gunicorn的方式是否错误,或者是否有任何其他方法可以解决延迟问题。你有没有想过?你有没有想过?
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: api-ingress
namespace: "default"
labels:
app: api-ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:eu-west-1:<>:certificate/<>
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]'
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/healthcheck-interval-seconds: '15'
alb.ingress.kubernetes.io/healthcheck-timeout-seconds: '8'
alb.ingress.kubernetes.io/healthy-threshold-count: '2'
alb.ingress.kubernetes.io/healthcheck-path: '/'
alb.ingress.kubernetes.io/healthcheck-protocol: HTTPS
alb.ingress.kubernetes.io/success-codes: "200"
spec:
rules:
- host: test.mydomain.com
http:
paths:
- path: /*
backend:
serviceName: echoheaders
servicePort: 80
- host: dev.mydomain.com
http:
paths:
- path: /*
backend:
serviceName: djangoapi-svc
servicePort: 8000