我们的一个微服务(工人组件-自然是短暂的)实际上是以自动缩放的方式部署在K8s吊舱上的,有时这个数字也会因负载而达到数千个,而这个工人必然会与各种持久性服务,因为这些服务带有一些资源限制,所以我们在访问级别上遇到瓶颈,所以我的问题是,我们是否在Kubernetes中有某种方法(类似于某种网关/代理),可以将多路复用请求缩小到资源限制下的限制。假设每个Pod都建立了到MySQL服务器的连接,该连接的活动连接数限制为50,因此如果我们不断旋转新的Pod(要求1个MySQL连接),那么我们不能同时旋转50个以上的Pod。
答案 0 :(得分:0)
您可以设置Pod Quota for a Namespace。
如果可以在单独的命名空间上旋转这些Pod,则可以通过创建ResourceQuota
对象来限制正在运行的Pod的数量,让调用为quota-pod.yaml
:
apiVersion: v1
kind: ResourceQuota
metadata:
name: pod-demo
spec:
hard:
pods: "2"
kubectl create -f quota-pod.yaml --namespace=quota-pod-example
如果您选中kubectl get resourcequota pod-demo --namespace=quota-pod-example --output=yaml
,将会得到类似的信息:
spec:
hard:
pods: "2"
status:
hard:
pods: "2"
used:
pods: "0"
在例如3个副本nginx部署的描述中,您将看到:
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 2m deployment-controller Scaled up replica set nginx-1-7cb5b65464 to 3
Normal ScalingReplicaSet 16s deployment-controller Scaled down replica set nginx-1-7cb5b65464 to 1
kubectl get deployment nginx -o yaml
将显示:
...
status:
availableReplicas: 1
conditions:
- lastTransitionTime: 2018-12-05T10:42:45Z
lastUpdateTime: 2018-12-05T10:42:45Z
message: Deployment does not have minimum availability.
reason: MinimumReplicasUnavailable
status: "False"
type: Available
- lastTransitionTime: 2018-12-05T10:42:45Z
lastUpdateTime: 2018-12-05T10:42:45Z
message: 'pods "nginx-6bd764c757-4gkfq" is forbidden: exceeded quota: pod-demo,
requested: pods=1, used: pods=2, limited: pods=2'
我建议检查K8s文档Create a ResourceQuota以获得更多信息。