Tengo un clúster en EKS con el escalador automático de clústeres habilitado. Supongamos que hay 3 nodos, nodo-1, nodo-2, nodo3. Los nodos pueden tener un máximo de 10 pods cada uno. Ahora, cuando aparezca el pod 31, la CA lanzará un nuevo nodo y programará el pod en ese momento. Ahora, tal vez digamos que los 4 pods del nodo 2 no son necesarios y se caen. Ahora, de acuerdo con el requisito, si se lanza un nuevo pod, el planificador coloca el nuevo pod en el cuarto nodo (lanzado por la CA) y no en el segundo nodo. También quiero que baje aún más si los pods se eliminan de los nodos, entonces los nuevos pods deberían entrar en el nodo ya existente y no en un nuevo nodo creado por CA. Intenté actualizar el archivo de configuración del programador predeterminado de EKS usando un complemento del programador, pero no puedo hacerlo.
Creo que podemos crear un segundo programador, pero no estoy al tanto del proceso correctamente. Cualquier solución o sugerencia ayudará mucho.
Este es el comando: "kube-scheduler --config custom.config" y este es el error "intentando adquirir el arrendamiento líder kube-system/kube-scheduler..."
Este es mi archivo custom.config
apiVersion: kubescheduler.config.k8s.io/v1beta1 clientConnection: kubeconfig: /etc/kubernetes/scheduler.conf kind: KubeSchedulerConfiguration percentageOfNodesToScore: 100 profiles: - schedulerName: kube-scheduler-new plugins: score: disabled: - name: '*' enabled: - name: NodeResourcesMostAllocated¿Cómo administrar la programación de pods?
El programador personalizado es, por supuesto, una forma de hacerlo si tiene un caso de uso específico, pero si solo desea tener un nodo en particular en el que desea programar el pod en Kubernetes, ofrece opciones para hacerlo.
La selección del algoritmo de programación se puede dividir en dos partes:
Kubernetes funciona muy bien si permite que el programador decida a qué nodos debe ir el pod y viene con herramientas que le darán sugerencias al programador:
NoSchedule lo que significa que no habrá programaciónPreferNoSchedule , lo que significa que el programador intentará evitar la programaciónNoExecute también afecta la programación y afecta a los pods que ya se están ejecutando en el nodo. SI agrega esta contaminación al nodo, los pods que se ejecutan en el nodo y no lo toleran serán desalojados.La afinidad de nodos en el otro lado se puede usar para atraer ciertos pods a nodos específicos. Similar a la afinidad del nodo tains, me da algunas opciones para ajustar sus preferencias de programación:
requiredDuringSchedulingIgnoredDuringExecution , que se puede usar como requisito estricto e indicar al programador que se deben cumplir las reglas para que el pod se programe en el nodo.preferredDuringSchedulingIgnoredDuringExecution , que se puede usar como requisito flexible y decirle al programador que intente aplicarlo, pero no tiene que estar garantizado.PodAffinity se puede usar si, por ejemplo, desea que sus pods front-end se ejecuten en el mismo nodo que su pod de base de datos. Esto puede describirse de manera similar como requisito duro o blando, respectivamente.
podAntiAffinity se puede usar si no desea que algún pod determinado se ejecute entre sí.