问:如何设置kubernetes集群以更好地平衡cpu负载?
我的一个Kubernetes集群GKE只有三个节点,并且经常有一个节点对CPU过载。我有大约32个部署,大多数部署有3个吊舱。当一个节点过载时,我通常会看到3个pod中的1个出现崩溃。理想情况下,事情不会崩溃,我的所有节点的利用率都不会超过100% 为了解决这个问题,我删除pod,排空和释放节点,或者拉动节点,事情通常会恢复正常。然而,我想知道其他人是如何解决这个问题的: 我需要更好的健康检查吗? 我的资源设置是否错误或过低? 调试这个的正确方法是什么?我使用kubectl top节点、kubectl top pods和kubectl get pods-o wide来理解发生了什么。 典型节点倾斜:问:如何设置kubernetes集群以更好地平衡cpu负载?,kubernetes,devops,google-kubernetes-engine,Kubernetes,Devops,Google Kubernetes Engine,我的一个Kubernetes集群GKE只有三个节点,并且经常有一个节点对CPU过载。我有大约32个部署,大多数部署有3个吊舱。当一个节点过载时,我通常会看到3个pod中的1个出现崩溃。理想情况下,事情不会崩溃,我的所有节点的利用率都不会超过100% 为了解决这个问题,我删除pod,排空和释放节点,或者拉动节点,事情通常会恢复正常。然而,我想知道其他人是如何解决这个问题的: 我需要更好的健康检查吗? 我的资源设置是否错误或过低? 调试这个的正确方法是什么?我使用kubectl top节点、kube
kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
gke-staging-cluster-default-pool-386bd62d-bj36 481m 24% 4120Mi 38%
gke-staging-cluster-default-pool-386bd62d-cl3p 716m 37% 6583Mi 62%
gke-staging-cluster-default-pool-386bd62d-gms8 1999m 103% 6679Mi 63%
Pod资源:
kubectl top pod | sort -nr -k2
hchchc-staging-deployment-669ff7477c-lcx5d 248m 47Mi
ggg-hc-demo-staging-deployment-77f68db7f8-nf9b5 248m 125Mi
ggg-hc-demo-staging-deployment-77f68db7f8-c6jxd 247m 96Mi
ggg-hc-demo-staging-deployment-77f68db7f8-l44vj 244m 196Mi
athatha-staging-deployment-6dbdf7fb5d-h92h7 244m 95Mi
athatha-staging-deployment-6dbdf7fb5d-hqpm9 243m 222Mi
engine-cron-staging-deployment-77cfbfb948-9s9rv 142m 35Mi
hchchc-twitter-staging-deployment-7846f845c6-g8wt4 59m 83Mi
hchchc-worker-staging-deployment-7cbf995ddd-msrbt 51m 114Mi
hchchc-twitter-staging-deployment-7846f845c6-brlbl 51m 94Mi
将吊舱和节点关联起来:
kubectl get pods -o wide | grep Crash
hchchc-twitter-staging-deployment-7846f845c6-v8mgh 1/2 CrashLoopBackOff 17 1h 10.0.199.31 gke-staging-cluster-default-pool-386bd62d-gms8
hchchc-worker-staging-deployment-66d7b5d7f4-thxn6 1/2 CrashLoopBackOff 17 1h 10.0.199.31 gke-staging-cluster-default-pool-386bd62d-gms8
ggggg-worker-staging-deployment-76b84969d-hqqhb 1/2 CrashLoopBackOff 17 1h 10.0.199.31 gke-staging-cluster-default-pool-386bd62d-gms8
ggggg-worker-staging-deployment-76b84969d-t4xmb 1/2 CrashLoopBackOff 17 1h 10.0.199.31 gke-staging-cluster-default-pool-386bd62d-gms8
ggggg-worker-staging-deployment-76b84969d-zpkkf 1/2 CrashLoopBackOff 17 1h 10.0.199.31 gke-staging-cluster-default-pool-386bd62d-gms8
您可能需要向部署中添加pod反亲和力。这将使负载更均匀地分布在所有节点上 反亲和力的一个例子:
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
topologyKey: kubernetes.io/hostname
这会告诉部署避免在节点上放置相同的pod(如果已经存在)。因此,如果部署有3个副本,那么所有3个副本都应该分布在3个节点上,而不是全部聚集在单个节点上并耗尽CPU
这不是一个完美的解决方案,但它可以帮助平衡一点负载
查看更多关于反亲和力的信息:Lindsay,谢谢,我以前从未听说过!由于这是一个很小的群集,它可能无法很好地工作,但这是一个很好的第一步。32部署3个pod,每个pod仅位于3个节点上,这对于太少的节点来说似乎太多了,除非您严重限制了它们的资源。可能还值得研究群集自动扩展,以根据节点资源使用情况处理其他pod部署。