Actualmente, tengo 2 nodos en AWS
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
Aquí también hay una captura de pantalla de mis cargas de CPU
Mi problema es que cada vez que implemento mi aplicación en producción, maximizaré el uso de mi CPU en el NODO 2 y ralentizará todo el sitio.
Aquí está mi configuración de implementación
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
¿No estoy escalando las cosas correctamente aquí? ¿Cuál es el punto de tener dos nodos si solo uno está en uso? ¿Cómo puedo escalar correctamente mis aplicaciones para usar múltiples nodos?
Esto sucede porque el algoritmo de programación del nodo se basa en la puntuación de prioridad con diferentes algoritmos de prioridad que contribuyen a la puntuación. Uno de esos algoritmos de prioridad es ImageLocalityPriority
que agrega una puntuación de prioridad positiva para los nodos que ya tienen las imágenes utilizadas por el pod. Entonces, inicialmente, un nodo que ya tiene la primera réplica del pod en ejecución, recibe un pequeño aumento de prioridad debido a ImageLocalityPriority
. Una vez que se agregan más y más réplicas, la cantidad de pods que se ejecutan en cada nodo se iguala porque otras prioridades como BalancedResourceAllocation
, etc., también tienen efecto.
También hay un SelectorSpreadPriority
que ayuda a minimizar la cantidad de pods que pertenecen a un mismo servicio en un nodo. Entonces, si crea su objeto de service
antes de crear la implementación, podría ayudar.
Para hacer que los pods se extiendan, debe agregar restricciones de antiafinidad entre pods a sus pods.
También debe considerar agregar solicitudes y límites a sus contenedores. Esto ayuda a distribuir los pods, ya que también se activa la prioridad LeastRequestedPriority
. ( Nota: también existe MostRequestedPriority
, que agrega prioridad para los nodos usados, pero no está habilitada de manera predeterminada).