amazon-web-services - 为什么我的 Pod 没有使用多个节点?
问题描述
目前,我在 AWS 上有 2 个节点
NAME STATUS ROLES AGE VERSION
NODE-1-xxx-xxx-xxx-xxx.cn-north-1.compute.internal Ready <none> 15d v1.16.13-eks-2ba888
NODE-2-xxx-xxx-xxx-xxx.cn-north-1.compute.internal Ready <none> 13d v1.16.13-eks-2ba888
这也是我的 CPU 负载的屏幕截图
我的问题是,每当我将应用程序部署到生产环境时,我都会在NODE 2上最大限度地使用我的 CPU ,这会减慢整个站点的速度
这是我的部署配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend # name of the deployment
namespace: backend
labels: # these labels apply to the deployment
app: root
component: backend
spec:
replicas: 2
minReadySeconds: 20
selector:
matchLabels:
app: root
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels: # these labels apply to our container
app: root
component: backend
version: xxx_${BITBUCKET_BUILD_NUMBER}
spec:
containers:
- name: backend # name of our container
image: xxx/xxx_main:${BITBUCKET_BUILD_NUMBER} # the URI that we got from ECR
imagePullPolicy: Always
envFrom:
- configMapRef:
name: env
ports:
- containerPort: 3000 # expose the running contianer on port 3000
name: backend
protocol: TCP
readinessProbe:
tcpSocket:
port: backend
initialDelaySeconds: 20
periodSeconds: 5
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 20
imagePullSecrets:
- name: xxx
我在这里没有适当地扩大规模吗?如果只使用一个节点,那么拥有两个节点有什么意义?如何正确扩展我的应用程序以使用多个节点?
解决方案
发生这种情况是因为节点调度算法基于优先级分数,不同的优先级算法对分数有贡献。一种这样的优先级算法是ImageLocalityPriority
为已经拥有 pod 使用的图像的节点添加一个正的优先级分数。因此,最初,已经运行 pod 的第一个副本的节点由于ImageLocalityPriority
. 一旦添加了越来越多的副本,每个节点上运行的 pod 的数量就会出现平衡,因为其他优先级(例如BalancedResourceAllocation
etc)也会受到影响。
还有一个SelectorSpreadPriority
有助于最小化节点上属于同一服务的 pod 数量。因此,如果您service
在创建部署之前创建对象,它可能会有所帮助。
要强制 pod 散开,您应该向 pod 添加跨 pod 反关联约束。
您还应该考虑向容器添加请求和限制。这有助于分散 pod,因为LeastRequestedPriority
优先级也会启动。(注意:还有MostRequestedPriority
为使用的节点添加优先级,但默认情况下不启用)。
推荐阅读
- postgresql - 使用 debezium 链接 postgresql 11 无法获取数据库测试的编码
- google-apps-script - 从 Appscript 中的另一个 url 获取数据
- typescript - 如何在打字稿中重建文字字符串键
- visual-studio-code - VS code Live Server Web Extension服务器端口8080问题
- oop - 如何使用状态设计模式处理订单状态更改
- linux - 尝试在 Ubuntu 20.04 上的 VSCode 中运行 Hello World 项目时出现 Omnisharp 问题
- css - 媒体查询未在谷歌开发控制台中触发
- pytorch - PyTorch 内存不足:DefaultCPUAllocator 无法分配内存
- xamarin - Xamarin (Visual Studio),视图映射的 MKMapView,不是视图上的控件,不会显示添加到视图的导航栏
- google-apps-script - 使用 AppScript 将值复制到另一个电子表格