Ativando Cgroups v2 em Nós de Trabalho OL8 Usando Imagens Personalizadas

Descubra como ativar cgroups v2 em nós de trabalho que executam o Oracle Linux 8 (OL8) em clusters criados com o Kubernetes Engine (OKE), usando imagens personalizadas.

Observação

Em imagens do OKE OL8 que têm um número de build igual ou superior a 1367, os cgroups v2 são ativados por padrão. No entanto, em imagens OL8 do OKE que têm um número de build menor que 1367 (e em imagens da plataforma OL8), os cgroups v1 são ativados por padrão. Este tópico descreve como ativar cgroups v2 no kernel do Linux de instâncias que hospedam nós de trabalho que usam imagens do OKE OL8 com um número de build inferior a 1367 ou que usam imagens da plataforma OL8.

Grupos de Controle (cgroups) é uma funcionalidade do kernel do Linux que fornece um mecanismo para gerenciar e controlar a alocação de recursos para processos ou grupos de processos. O recurso cgroups permite que administradores e desenvolvedores do sistema aloquem e limitem vários recursos do sistema (como CPU, memória, E/S, largura de banda da rede) a processos ou conjuntos de processos específicos. O Cgroups oferece uma maneira poderosa e flexível de gerenciar o uso de recursos, garantindo que os processos recebam os recursos necessários, evitando que consumam quantidades excessivas e afetem o desempenho de outros processos ou do sistema como um todo. Ao criar e organizar processos em grupos de controle, os administradores podem impor restrições de recursos, priorizar tarefas e manter a estabilidade do sistema.

O Oracle Linux fornece dois tipos de grupos de controle:

  • Grupos de controle versão 1 (cgroups v1): Esses grupos fornecem uma hierarquia de controladores por recurso. Cada recurso, como CPU, memória, E/S e assim por diante, tem sua própria hierarquia de grupo de controle. Uma desvantagem dos cgroups v1 é a dificuldade de coordenar o uso de recursos entre grupos que podem pertencer a diferentes hierarquias de processo.
  • Grupos de controle versão 2 (cgroups v2): Esses grupos fornecem uma única hierarquia de grupos de controle na qual todos os controladores de recursos são montados. Nesta hierarquia, você pode coordenar o uso de recursos entre diferentes controladores de recursos

Para obter mais informações sobre grupos de controle e o Oracle Linux, consulte Gerenciando Recursos Usando Grupos de Controle na documentação do Oracle Linux.

Ambos os cgroups v1 e v2 estão presentes no Oracle Linux 8 (e versões posteriores).

Em imagens OL8 do OKE que têm um número de build igual ou superior a 1367, os cgroups v2 são ativados por padrão. Em imagens OL8 do OKE que têm um número de build inferior a 1367 (e em imagens da plataforma OL8), os cgroups v1 são ativados por padrão. Portanto, quando você especifica uma imagem OL8 do OKE com um número de build menor que 1367 (ou uma imagem de plataforma OL8) para um pool de nós, os cgroups v1 são ativados por padrão nos kernels Linux de instâncias de computação que hospedam os nós no pool de nós.

No entanto, você pode ativar cgroups v2 ao usar imagens OL8 do OKE com um número de build menor que 1367 (e imagens da plataforma OL8).

Em um nível alto, o processo para ativar cgroups v2 é o seguinte:

Etapa 1: Criar uma instância de computação executando a imagem OL8 necessária e ativar cgroups v2

Nesta etapa, você usa o serviço Compute para criar uma instância de computação que esteja executando a release OL8 desejada nos nós de trabalho do cluster do Kubernetes.

  1. Decida qual release do OL8 (e se você quiser selecionar uma imagem do OKE, qual versão do Kubernetes) deseja nos nós de trabalho.

    A Oracle fornece várias imagens do OKE e da plataforma OL8 diferentes.

  2. Siga as instruções em Criando uma Instância na documentação do serviço Compute para criar uma nova instância de computação e selecione uma imagem de plataforma adequada (seja selecionando uma imagem de plataforma ou especificando o OCID de uma imagem do OKE).

    Essa é a instância de computação que você usará como base de uma nova imagem personalizada.

Etapa 2: Ativar cgroups v2 na instância de computação

Nesta etapa, você ativa cgroups v2 na instância de computação criada na etapa anterior. As instruções aqui são um resumo conveniente de Ativando cgroups v2 na documentação OL8.

  1. Em uma janela de terminal, conecte-se à instância de computação e configure todas as entradas de inicialização do kernel para montar cgroups v2 por padrão, digitando:
    sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
  2. Reinicialize a instância, digitando:
    sudo reboot
  3. Confirme se os cgroups v2 agora estão montados, digitando:
    sudo mount -l | grep cgroup
  4. Opcionalmente, verifique o conteúdo do diretório /sys/fs/cgroup (o grupo de controle raiz), digitando:
    ls -l /sys/fs/cgroup/

    Para cgroups v2, os arquivos no diretório devem ter prefixos no início de seus nomes de arquivos (como cgroup.*, cpu.*, memory.*).

Etapa 3: Criar uma imagem personalizada com base na instância de computação em que cgroups v2 estão ativados

Nesta etapa, você usa o serviço Compute para criar uma imagem personalizada da instância de computação que você ativou para cgroups v2 na etapa anterior.

  1. Faça shutdown da instância que você ativou para cgroups v2, informando:
    sudo shutdown -h now
  2. Siga as instruções em Gerenciando Imagens Personalizadas na documentação do serviço Compute para criar uma imagem personalizada com base na instância de computação.
  3. Anote o OCID da imagem personalizada que você criou.

Etapa 4: Adicionar nós de trabalho que executam OL8 com cgroups v2 ativados para um cluster

Nesta etapa, você usa a imagem personalizada criada na etapa anterior para adicionar nós de trabalho que executam OL8 com cgroups v2 ativados para um cluster do Kubernetes.

Observe que há diferentes instruções a serem seguidas, dependendo se você deseja ativar cgroups v2 em nós gerenciados ou em nós autogerenciados. Para nós gerenciados, você define um pool de nós gerenciados. Para nós autogerenciados, você adiciona instâncias de computação como nós de trabalho.

Observe que você precisa usar a CLI para criar nós gerenciados com base em imagens personalizadas.

Adicionando nós gerenciados executando OL8 com cgroups v2 ativados

Para adicionar nós gerenciados que executam OL8 com cgroups v2 ativados para um cluster existente:

  1. Abra um prompt de comando e use o comando oci ce node-pool create para criar um novo pool de nós.
  2. Além dos parâmetros obrigatórios exigidos pelo comando, inclua o parâmetro --node-image-id e especifique o OCID da imagem personalizada que você criou na Etapa 3: Criar uma imagem personalizada com base na instância de computação em que cgroups v2 estão ativados.

    Por exemplo, você pode digitar o seguinte comando:

    oci ce node-pool create \
    --cluster-id ocid1.cluster.oc1.iad.aaaa______m4w \
    --name my-nodepool \
    --node-image-id ocid1.image.oc1.iad.aaaa______zpq \
    --compartment-id ocid1.tenancy.oc1..aaa______q4a \
    --kubernetes-version v1.29.1 \
    --node-shape VM.Standard2.1 \
    --placement-configs "[{\"availabilityDomain\":\"PKGK:US-ASHBURN-AD-1\", \"subnetId\":\"ocid1.subnet.oc1.iad.aaaa______kfa\"}]" \
    --size 3 \
    --region us-ashburn-1

Adicionando nós autogerenciados que executam o OL8 com cgroups v2 ativados

Antes de criar um nó autogerenciado:

  • Confirme se o cluster ao qual você deseja adicionar o nó autogerenciado está configurado adequadamente para nós autogerenciados. Consulte Requisitos de Cluster.
  • Confirme se já existe um grupo dinâmico e uma política do serviço IAM para permitir que a instância de computação que hospeda o nó autogerenciado se junte a um cluster aprimorado criado com o Kubernetes Engine. Consulte Criando um Grupo Dinâmico e uma Política paraNós Autogerenciados.
  • Crie um script cloud-init que contenha o ponto final privado da API do Kubernetes e o certificado de CA codificado em base64 do cluster aprimorado ao qual você deseja adicionar o nó autogerenciado. Consulte Criando Scripts Cloud-init para Nós Autogerenciados.

Usando a Console

  1. Crie uma nova instância de computação para hospedar o nó autogerenciado:
    1. Abra o menu de navegação e selecione Compute. Em Compute, selecione Instâncias.
    2. Siga as instruções na documentação do serviço Compute para criar uma nova instância de computação. Observe que devem existir políticas apropriadas para permitir que a nova instância de computação se junte ao cluster aprimorado. Consulte Criando um Grupo Dinâmico e uma Política paraNós Autogerenciados.
    3. Na seção Imagem e Forma, selecione Alterar imagem.
    4. Selecione Minhas imagens, selecione a opção OCID da Imagem e digite o OCID da imagem personalizada que você criou na Etapa 3: Criar uma imagem personalizada com base na instância de computação em que cgroups v2 estão ativados.
    5. Selecione Opções avançadas e, na seção Gerenciamento, selecione a opção Colar script cloud-init.
    6. Copie e cole o script cloud-init para nós autogerenciados que você criou anteriormente no campo Cloud-init script.
    7. Selecione Criar para criar a instância de computação a fim de hospedar o nó autogerenciado.

    Quando a instância de computação é criada, ela é adicionada como um nó autogerenciado ao cluster com o ponto final da API do Kubernetes especificado no script cloud-init.

  2. (Opcional) Verifique se o nó autogerenciado foi adicionado ao cluster do Kubernetes e se os labels foram adicionados ao nó e definidos conforme esperado, seguindo as instruções em Criando Nós Autogerenciados.

Usando a CLI

  1. Abra um prompt de comando e informe o comando oci Compute instance launch e os parâmetros necessários para criar um nó autogerenciado.
  2. Assim como os parâmetros obrigatórios exigidos pelo comando:
    1. Inclua o parâmetro --image-id e especifique o OCID da imagem personalizada que você criou na Etapa 3: Criar uma imagem personalizada com base na instância de computação em que cgroups v2 estão ativados.
    2. Inclua o parâmetro --user-data-file e especifique o script cloud-init para nós autogerenciados que você criou anteriormente.

    Por exemplo, você pode digitar o seguinte comando:

    oci compute instance launch \
    --availability-domain zkJl:PHX-AD-1 \
    --compartment-id ocid1.compartment.oc1..aaaaaaa______neoq \
    --shape VM.Standard2.2 \
    --subnet-id ocid1.subnet.oc1.phx.aaaaaaa______hzia \
    --user-data-file my-selfmgd-cgroupsv2-cloud-init.yaml \
    --image-id ocid1.image.oc1.phx.aaaaaaa______slcr

    Quando a instância de computação é criada, ela é adicionada como um nó autogerenciado ao cluster com o ponto final da API do Kubernetes especificado no script cloud-init.