首页 > 解决方案 > 为什么我的 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 负载的屏幕截图

节点 1 节点!

节点 2 节点 2

我的问题是,每当我将应用程序部署到生产环境时,我都会在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

我在这里没有适当地扩大规模吗?如果只使用一个节点,那么拥有两个节点有什么意义?如何正确扩展我的应用程序以使用多个节点?

标签: amazon-web-serviceskubernetesamazon-eks

解决方案


发生这种情况是因为节点调度算法基于优先级分数,不同的优先级算法对分数有贡献。一种这样的优先级算法是ImageLocalityPriority为已经拥有 pod 使用的图像的节点添加一个正的优先级分数。因此,最初,已经运行 pod 的第一个副本的节点由于ImageLocalityPriority. 一旦添加了越来越多的副本,每个节点上运行的 pod 的数量就会出现平衡,因为其他优先级(例如BalancedResourceAllocationetc)也会受到影响。

还有一个SelectorSpreadPriority有助于最小化节点上属于同一服务的 pod 数量。因此,如果您service在创建部署之前创建对象,它可能会有所帮助。

要强制 pod 散开,您应该向 pod 添加跨 pod 反关联约束

您还应该考虑向容器添加请求和限制。这有助于分散 pod,因为LeastRequestedPriority优先级也会启动。(注意:还有MostRequestedPriority为使用的节点添加优先级,但默认情况下不启用)。


推荐阅读