Configurando a prioridade do pod
Com a prioridade e a preempção de pod, é possível configurar classes prioritárias para indicar a prioridade relativa dos pods que compõem a sua carga de trabalho do cluster Red Hat OpenShift. O controlador Red Hat OpenShift leva em consideração a prioridade de um pod e pode até mesmo priorizar (remover) pods com prioridade menor para fazer espaço em um nó do trabalhador para pods de prioridade mais alta. Para obter mais informações, consulte a documentação do site Red Hat OpenShift.
- Por que devo definir a prioridade do pod?
- Como um administrador de cluster, você deseja controlar quais pods são mais críticos para a carga de trabalho do cluster. As classes de prioridade podem ajudá-lo a controlar as decisões do controlador do Red Hat OpenShift para favorecer os pods de prioridade mais alta sobre os pods de prioridade mais baixa. O controlador do Red Hat OpenShift pode até mesmo priorizar (remover) os pods de prioridade mais baixa que estão em execução para que os pods de prioridade mais alta pendentes possam ser planejados.
Configurando a prioridade do pod, é possível ajudar a evitar que cargas de trabalho de prioridade mais baixa impactem cargas de trabalho críticas em seu cluster, especialmente nos casos em que o cluster começa a atingir a sua capacidade de recurso.
Certifique-se de que você tenha configurado o acesso de usuário adequado ao seu cluster e, se aplicável, restrições de contexto de segurança (SCCs). As políticas de acesso e as SCCs podem ajudar a evitar que usuários não confiáveis implementem os pods de alta prioridade que impedem outros pods de planejar.
Como funcionam o agendamento prioritário e a preempção?
Em geral, os pods pendentes que têm uma prioridade mais alta são planejados antes dos pods priorizados mais baixos. Se não houver recursos suficientes restantes nos seus nós de trabalho, o controlador de Red Hat OpenShift s pode preemptar (remover) pods para liberar recursos suficientes para que os pods com prioridade mais alta sejam agendados. A preempção é afetada também por períodos de finalização harmoniosa, orçamentos de interrupção do pod e afinidade do nó do trabalhador.
Se você não especificar uma prioridade para a implementação de pod, o padrão será definido para a classe de prioridade configurada como globalDefault. Se você não tiver uma classe de prioridade globalDefault, a prioridade
padrão para todos os pods será zero (0). Por padrão, o IBM Cloud Kubernetes Service não configura um globalDefault, portanto, a prioridade padrão do pod é zero.
Para entender como a prioridade do pod e o controlador do Red Hat OpenShift trabalham juntos, considere os cenários na figura a seguir. Deve-se colocar os pods priorizados nos nós do trabalhador com recursos disponíveis. Caso contrário, os pods de alta prioridade em seu cluster podem permanecer pendentes, ao mesmo tempo que os pods existentes são removidos, como no Cenário 3.
- Três pods com prioridade alta, média e baixa estão pendentes de planejamento. O controlador do Red Hat OpenShift encontra um nó do trabalhador disponível com espaço para todos os três pods e os planeja em ordem de prioridade, com o pod de prioridade mais alta programado primeiro.
- Três pods com prioridade alta, média e baixa estão pendentes de planejamento. O controlador do Red Hat OpenShift encontra um nó do trabalhador disponível, mas o nó do trabalhador tem apenas recursos suficientes para suportar os pods de prioridade alta e média. O pod de baixa prioridade não está planejado e permanece em pendente.
- Dois pods com prioridade alta e média estão pendentes de planejamento. Existe um terceiro pod com baixa prioridade em um nó do trabalhador disponível. No entanto, o nó do trabalhador não tem recursos suficientes para planejar qualquer um dos pods pendentes. O controlador do Red Hat OpenShift prioriza, ou remove, o pod de baixa prioridade, o que retorna o pod a um estado pendente. Em seguida, o controlador do Red Hat OpenShift tenta planejar o pod de alta prioridade. No entanto, o nó do trabalhador não tem recursos suficientes para planejar o pod de alta prioridade e, em vez disso, o controlador do Red Hat OpenShift planeja o pod de prioridade média.
Para obter mais informações, consulte a documentação do Kubernetes sobre prioridade e preempção de pod.
- Posso desativar o controlador de admissão por prioridade de pods?
- Nº Se não quiser usar prioridade de pod, não configure um
globalDefaultou inclua uma classe de prioridade nas implementações de pod. Cada pod é padronizado para zero, exceto para os pods críticos do cluster que a IBM implementa com as classes de prioridade padrão. Como a prioridade do pod é relativa, essa configuração básica assegura que os pods críticos de cluster sejam priorizados para os recursos e planeja qualquer outro pod seguindo as políticas de planejamento existentes estabelecidas.
Entendendo classes de prioridade padrão
Seus clusters do Red Hat® OpenShift® on IBM Cloud® vêm com algumas classes de prioridade por padrão.
Não modifique as classes padrão, que são usadas para gerenciar adequadamente seu cluster. É possível usar essas classes em suas implementações de app ou criar suas próprias classes de prioridade.
A tabela a seguir descreve as classes de prioridade que estão em seu cluster por padrão e por que elas são usadas.
| Nome | Configurado por | Valor de Prioridade | Propósito |
|---|---|---|---|
system-node-critical |
Kubernetes | 2000001000 | Selecione os pods que são implantados em namespaces privilegiados do sistema ao criar o cluster e use essa classe de prioridade para proteger funcionalidades essenciais dos nós de trabalho, como pods de rede, armazenamento, registro de logs, monitoramento e métricas. |
system-cluster-critical |
Kubernetes | 2000000000 | Selecione os pods que são implantados em namespaces privilegiados do sistema ao criar o cluster e utilize essa classe de prioridade para proteger funcionalidades críticas dos clusters, como pods de rede, armazenamento, registro de logs, monitoramento e métricas. |
ibm-app-cluster-critical |
IBM | 900000000 | Selecione os pods que são implantados em namespaces privilegiados do sistema ao criar o cluster e use essa classe de prioridade para proteger funcionalidades críticas dos aplicativos, como os pods do balanceador de carga. |
É possível verificar quais pods usam as classes de prioridade, executando o comando a seguir.
oc get pods --all-namespaces -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName
Criando uma classe de prioridade
Para configurar a prioridade do pod, é necessário usar uma classe de prioridade.
Antes de Iniciar:
- Acesse o seu Red Hat OpenShift cluster.
- Assegure-se de ter a função de acesso de serviço Gravador ou Gerenciador do IBM Cloud IAM para o namespace
default.
-
Liste as classes de prioridade existentes. Você pode usar uma classe de prioridade já existente como modelo para a nova classe.
oc get priorityclasses -
Escolha a classe de prioridade que você deseja copiar e crie um arquivo YAML local.
oc get priorityclass <priority_class> -o yaml > Downloads/priorityclass.yaml -
Faça seu arquivo YAML de classe de prioridade.
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."Entendendo os componentes de arquivo YAML Componentes Descrição nameNecessário: o nome da classe de prioridade que você deseja criar. valueNecessário: insira um número inteiro menor ou igual a 1 bilhão (1000000000). Quanto maior o valor, maior a prioridade. Os valores são relativos aos valores de outras classes de prioridade no cluster. Reserve números muito altos para pods críticos do sistema que você não quer que sejam priorizados (removidos). Por exemplo, as classes de prioridade críticas para o cluster padrão variam entre os valores 900000000 e 2000001000, portanto, insira um valor menor que esses números para novas classes de prioridade para que nada receba uma prioridade mais alta do que esses pods.
globalDefaultOpcional: configure o campo como truepara tornar essa classe de prioridade o padrão global que é aplicado a cada pod que está planejado sem um valorpriorityClassName. Apenas uma classe de prioridade em seu cluster pode ser configurada como o padrão global. Se não houver um padrão global, os pods sempriorityClassNameespecificado terão prioridade zero (0).As classes de prioridade padrão não configuram um
globalDefault. Se você criou outras classes de prioridade no cluster, será possível verificar se elas não configuram umglobalDefaultexecutandooc describe priorityclass <name>.descriptionOpcional: diga aos usuários por que usar essa classe de prioridade. Coloque a sequência entre aspas ( ""). -
Crie a classe de prioridade em seu cluster.
oc apply -f filepath/priorityclass.yaml -
Verifique se a classe de prioridade foi criada.
oc get priorityclasses
Ótimo! Você criou uma classe de prioridade. Deixe a sua equipe saber sobre a classe de prioridade e qual classe de prioridade, se houver, que ela deve usar para as suas implementações de pod.
Designando prioridade a seus pods
Designe uma classe de prioridade à sua especificação de pod para configurar a prioridade do pod no seu cluster do Red Hat OpenShift on IBM Cloud.
Antes de Iniciar:
- Acesse o seu Red Hat OpenShift cluster.
- Certifique-se de ter a função de acesso de serviço Gravador ou Gerenciador do IBM Cloud IAM no namespace no qual deseja implementar os pods.
- Entenda como o planejamento de prioridade funciona, pois a prioridade pode priorizar os pods existentes e afetar como os recursos de seu cluster são consumidos.
Siga as etapas a seguir para verificar a importância dos outros pods implantados, de modo que você possa escolher a classe de prioridade correta para seus pods em relação ao que já está implantado.
-
Visualize as classes de prioridade que outros pods no namespace usam.
oc get pods -n <namespace> -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName -
Obtenha os detalhes da classe de prioridade e anote o número do valor. Os pods com números mais altos são priorizados antes dos pods com números mais baixos. Repita essa etapa para cada classe de prioridade que deseja revisar.
oc describe priorityclass <priorityclass_name> -
Obtenha a classe de prioridade que você deseja usar ou crie sua própria classe de prioridade.
oc get priorityclasses -
Em sua especificação de pod, inclua o campo
priorityClassNamecom o nome da classe de prioridade que você recuperou na etapa 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> -
Crie seus pods priorizados no namespace em que você deseja implementá-los.
oc apply -f filepath/pod-deployment.yaml