Configuración de la prioridad de pod
Con la preferencia y prioridad de pod, puede configurar las clases de prioridad para indicar la prioridad relativa de los pods que componen la carga de trabajo del clúster de Red Hat OpenShift. El controlador de Red Hat OpenShift tiene en cuenta la prioridad de un pod e incluso puede evitar (eliminar) pods con menor prioridad para hacer espacio en un nodo trabajador para pods de prioridad más alta. Para más información, consulte la documentación de Red Hat OpenShift.
- ¿Por qué establezco la prioridad de los pods?
- Como administrador del clúster, desea controlar qué pods son más importantes para la carga de trabajo del clúster. Las clases de prioridad pueden ayudarle a controlar las decisiones del controlador de Red Hat OpenShift para favorecer los pods de prioridad más alta sobre los pods de prioridad más baja. El controlador de Red Hat OpenShift puede incluso evitar (eliminar) pods de prioridad más baja que se estén ejecutando, para que se puedan planificar pods pendientes de prioridad más alta.
Al establecer la prioridad de pod, puede evitar que las cargas de trabajo de prioridad más baja afecten a las cargas de trabajo críticas para el clúster, especialmente en los casos en los que el clúster empieza a alcanzar su capacidad de recursos.
Asegúrese de que ha configurado correctamente el acceso de usuario al clúster y, si procede, las restricciones de contexto de seguridad (SCC). Las políticas de acceso y las SCC pueden ayudar a evitar que usuarios no fiables desplieguen pods de alta prioridad que evitan que otros pods se planifiquen.
¿Cómo funcionan la programación prioritaria y la preeminencia?
En general, los pods pendientes que tienen una prioridad más alta se planifican antes que los pods con prioridad más baja. Si no dispones de suficientes recursos restantes en tus nodos de trabajo, el controlador « Red Hat OpenShift » puede preemptar (eliminar) pods para liberar los recursos necesarios y que se puedan programar los pods con mayor prioridad. La evitación también se ve afectada por los periodos de terminación ordenada, los presupuestos de interrupción de pod y la afinidad de los nodos trabajadores.
Si no especifica una prioridad para el despliegue del pod, el valor predeterminado se establece en la clase de prioridad establecida como globalDefault. Si no tiene una clase de prioridad globalDefault, la prioridad
predeterminada para todos los pods es cero (0). De forma predeterminada, Red Hat OpenShift on IBM Cloud no establece un globalDefault, por lo que la prioridad predeterminada del pod es cero.
Para entender cómo la prioridad de pod y el controlador de Red Hat OpenShift trabajan juntos, tenga en cuenta los casos de ejemplo de la figura siguiente. Debe colocar los pods priorizados en nodos trabajadores con recursos disponibles. De lo contrario, los pods de prioridad alta del clúster pueden quedar pendientes, al mismo tiempo que se eliminan pods existentes, como en el caso de ejemplo 3.
- Tres pods con prioridad alta, media y baja están pendientes de planificación. El controlador de Red Hat OpenShift encuentra un nodo trabajador disponible con espacio para los tres pods, y los planifica en orden de prioridad, con el pod de prioridad más alta planificado primero.
- Tres pods con prioridad alta, media y baja están pendientes de planificación. El controlador de Red Hat OpenShift encuentra un nodo trabajador disponible, pero el nodo trabajador sólo tiene recursos suficientes para admitir los pods de prioridad alta y media. El pod de prioridad baja no está planificado y se queda pendiente.
- Dos pods con prioridad alta y media están pendientes de planificación. Existe un tercer pod con una prioridad baja en un nodo trabajador disponible. Sin embargo, el nodo trabajador no tiene recursos suficientes para planificar ninguno de los pods pendientes. El controlador de Red Hat OpenShift evita, o elimina, el pod de baja prioridad, que devuelve el pod a un estado pendiente. A continuación, el controlador de Red Hat OpenShift intenta planificar el pod de prioridad alta. Sin embargo, el nodo trabajador no tiene suficientes recursos para planificar el pod de prioridad alta y, en su lugar, el controlador de Red Hat OpenShift planifica el pod de prioridad media.
Para obtener más información, consulta la documentación de « Kubernetes » sobre la prioridad y la preeminencia de los pods.
- ¿Puedo desactivar el controlador de admisión por prioridad de pods?
- Núm. Si no desea utilizar la prioridad de pod, no establezca un
globalDefaulto incluya una clase de prioridad en los despliegues de pod. Cada pod se establece de forma predeterminada en cero, excepto los pods críticos del clúster que IBM despliega con las clases de prioridad predeterminadas. Puesto que la prioridad de pod es relativa, esta configuración básica garantiza que se prioricen los pods críticos del clúster para los recursos, y planifica cualquier otro pod siguiendo las políticas de planificación existentes que tiene aplicadas.
Clases de prioridad predeterminadas
Los clústeres de Red Hat® OpenShift® on IBM Cloud® vienen con algunas clases de prioridad de forma predeterminada.
No modifique las clases predeterminadas, que se utilizan para gestionar correctamente el clúster. Puede utilizar estas clases en los despliegues de apps o crear sus propias clases de prioridad.
En la tabla siguiente se describen las clases de prioridad que se encuentran en el clúster de forma predeterminada y para qué se utilizan.
| Nombre | Establecida por | Valor de prioridad | Finalidad |
|---|---|---|---|
system-node-critical |
Kubernetes | 2000001000 | Selecciona esta clase de prioridad para los pods que se implementan en espacios de nombres privilegiados del sistema al crear el clúster, con el fin de proteger las funciones críticas de los nodos de trabajo, como los pods de red, almacenamiento, registro, supervisión y métricas. |
system-cluster-critical |
Kubernetes | 2000000000 | Selecciona esta clase de prioridad para los pods que se implementan en espacios de nombres privilegiados del sistema al crear el clúster, con el fin de proteger las funcionalidades críticas de los clústeres, como los pods de red, almacenamiento, registro, supervisión y métricas. |
ibm-app-cluster-critical |
IBM | 900000000 | Selecciona esta clase de prioridad para los pods que se implementan en espacios de nombres privilegiados del sistema al crear el clúster, con el fin de proteger las funcionalidades críticas de las aplicaciones, como los pods del equilibrador de carga. |
Puede comprobar qué pods utilizan las clases de prioridad ejecutando el mandato siguiente.
oc get pods --all-namespaces -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName
Creación de una clase de prioridad
Para establecer la prioridad de pod, tiene que utilizar una clase de prioridad.
Antes de empezar:
- Acceda al clúster de Red Hat OpenShift.
- Asegúrate de que dispones del rol de acceso al servicio IAM « IBM Cloud »(Writer o Manager ) para el espacio de nombres
default.
-
Obtenga una lista de las clases de prioridad existentes. Puedes utilizar una clase de prioridad ya existente como plantilla para la nueva clase.
oc get priorityclasses -
Elija la clase de prioridad que desea copiar y cree un archivo YAML local.
oc get priorityclass <priority_class> -o yaml > Downloads/priorityclass.yaml -
Cree el archivo YAML de clase de prioridad.
apiVersion: scheduling.k8s.io/v1alpha1 kind: PriorityClass metadata: name: <priority_class_name> value: <1000000> globalDefault: <false> description: "Use this class for XYZ service pods only."Visión general de los componentes del archivo YAML Componentes Descripción nameObligatorio: el nombre de la clase de prioridad que desea crear. valueObligatorio: especifique un número entero inferior o igual a 1000 millones (1000000000). Cuanto mayor sea el valor, más alta es la prioridad. Los valores son relativos a los valores de otras clases de prioridad del clúster. Reserve números muy altos para los pods críticos del sistema que no desea que se eviten (eliminen). Por ejemplo, el rango de clases de prioridad crítica de clúster predeterminado es de 900000000-2000001000, así que especifique un valor menor para las nuevas clases de prioridad, para que nada tenga una prioridad mayor que estos pods.
globalDefaultOpcional: establezca el campo en truepara convertir esta clase de prioridad en el valor predeterminado global que se aplica a cada pod planificado sin un valor depriorityClassName. Solo se puede establecer una clase de prioridad en el clúster como valor predeterminado global. Si no hay ningún valor predeterminado global, los pods sin unpriorityClassNameespecificado tienen una prioridad de cero (0).Las clases de prioridad predeterminadas no establecen un
globalDefault. Si ha creado otras clases de prioridad en el clúster, para asegurarse de que que no establecen unglobalDefault, ejecuteoc describe priorityclass <name>.descriptionOpcional: indique a los usuarios para qué se utiliza esta clase de prioridad. Encierre la serie entre comillas ( ""). -
Cree la clase de prioridad en el clúster.
oc apply -f filepath/priorityclass.yaml -
Verifique que se ha creado la clase de prioridad.
oc get priorityclasses
Estupendo. Ha creado una clase de prioridad. Comunique a su equipo la información de la prioridad de prioridad y qué clase de prioridad, si corresponde, deben utilizar en sus despliegues de pod.
Asignación de prioridad a los pods
Asigne una clase de prioridad a su especificación de pod para establecer la prioridad del pod dentro del clúster de Red Hat OpenShift on IBM Cloud.
Antes de empezar:
- Acceda al clúster de Red Hat OpenShift.
- Asegúrate de que dispones del rol de acceso al servicio IAM « IBM Cloud » de tipo «Writer» o «Manager» en el espacio de nombres en el que deseas implementar los pods.
- Comprenda cómo funciona la planificación de prioridad, ya que la prioridad puede evitar los pods existentes y afectar a la forma en que se consumen los recursos del clúster.
Sigue los siguientes pasos para comprobar la importancia de los demás pods desplegados, de modo que puedas elegir la clase de prioridad adecuada para tus pods en función de lo que ya esté desplegado.
-
Consulte las clases de prioridad que utilizan otros pods en el espacio de nombres.
oc get pods -n <namespace> -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName -
Obtenga los detalles de la clase de prioridad y anote el número del valor. Los pods con números más altos se priorizan antes que los pods con números más bajos. Repita este paso para todas las clases de prioridad que desee revisar.
oc describe priorityclass <priorityclass_name> -
Obtenga la clase de prioridad que desea utilizar, o bien cree su propia clase de prioridad.
oc get priorityclasses -
En la especificación de pod, añada el campo
priorityClassNamecon el nombre de la clase de prioridad que ha recuperado en el paso anterior.apiVersion: apps/v1 kind: Deployment metadata: name: ibmliberty spec: replicas: 1 selector: matchLabels: app: ibmliberty template: metadata: labels: app: ibmliberty spec: containers: - name: ibmliberty image: icr.io/ibm/liberty:latest ports: - containerPort: 9080 priorityClassName: <priorityclass_name> -
Cree los pods priorizados en el espacio de nombres en el que desea desplegarlos.
oc apply -f filepath/pod-deployment.yaml