Como usar sysctls do Linux no Kubernetes

Como Usar Sysctls Do Linux No Kubernetes



Este post discutirá o que é Linux sysctl no Kubernetes e como ele pode ser usado em um cluster do Kubernetes. O sysctl é uma interface do sistema operacional Linux que permite ao administrador modificar os parâmetros do kernel em tempo de execução. Aqui, demonstraremos como usar os sysctls do Linux na plataforma Kubernetes. Demonstraremos um exemplo simples para ajudá-lo a entender que tipo de saída você pode esperar ao implementar os comandos kubectl para usar os sysctls no Kubernetes.

O que são sysctls?

O sysctls é uma interface no Linux que é usada para ajustar os parâmetros do kernel em tempo de execução para o namespace em um contêiner. Esses parâmetros podem ser encontrados no arquivo de processo virtual /proc/sys/ e cobrem vários subsistemas como memória virtual, rede, kernel, etc. Os sysctls de nível de nó que não têm namespace precisam ser definidos com outro método de configuração de sysctls, como operador de ajuste de nó. Além disso, apenas os sysctls seguros são colocados na lista de permissões por padrão, enquanto os sysctls inseguros precisam ser ativados manualmente no nó para que possam estar disponíveis para o usuário. Agora, vamos entender como usar Linux sysctls no Kubernetes.







Pré-requisitos

Antes de começar a aprender a usar os sysctls do Linux no Kubernetes, certifique-se de ter as seguintes ferramentas instaladas em seu sistema:



    • Kubernetes versão 1.23 ou qualquer outra versão mais recente
    • Ubuntu 20.04 ou qualquer outra versão mais recente
    • Sysctls para suporte de pod
    • Ferramenta de linha de comando Kubectl
    • Aglomerado Minikube

Supondo que seu sistema esteja atendendo aos requisitos de pré-requisito, estamos nos movendo para a seção de implementação.



Como usar os sysctls do Linux no Kubernetes?

O sistema operacional Linux é uma plataforma que permite ajustar os kernels por meio de botões sysctls na pilha de rede. Alguns dos sysctls têm namespace para um pod com sua própria configuração, enquanto outros são válidos para todo o sistema. O Kubernetes agrupou a interface sysctls em duas categorias:





    • Namespace vs sysctls no nível do nó
    • Sistemas seguros vs inseguros

Namespace vs sysctls no nível do nó:

No kernel do Linux, a maioria dos sysctls tem namespace, o que permite configurá-los independentemente entre vários pods em um nó. Os sysctls com namespace são facilmente acessíveis em um pod do Kubernetes. Alguns dos sysctls com namespace são os seguintes:



    • fs.mqueue.*
    • kernel .msg*
    • kernel.shm*
    • kernel.sem

Os sysctls de nível de nó não têm namespace e o administrador do cluster precisa defini-los manualmente. O administrador do cluster usa um conjunto demon com um contêiner privilegiado ou pode modificar a distribuição Linux do nó /etc/sysctls.conf. O Node Tuning Operator também pode ser usado para definir os sysctls no nível do nó.

Sistemas seguros vs inseguros:

Existem dois grupos de sysctls: seguros e inseguros. Os sysctls seguros têm namespaces adequados e são totalmente isolados dentro dos pods no mesmo nó. Os sysctls seguros são ativados por padrão e podem ser usados ​​em um pod modificando a especificação do pod. No entanto, os sysctls inseguros são desativados por padrão e precisam ser ativados manualmente pelo administrador do cluster. Os sysctls seguros não influenciam seus vizinhos, uma vez que eles têm namespaces adequados. Enquanto os sysctls inseguros podem impactar inesperadamente seus vizinhos, como sobrecarregar um sistema. O conjunto seguro de sysctls é o seguinte:

    • net.ipv4.ping_group_range
    • net.ipv4.ip_local_port_range
    • kernel.shm_rmid_forced
    • net.ipv4.tcp_syncookies

O ponto aqui a ser observado é que apenas ter namespace não é suficiente para que o sysctl seja considerado seguro.

Agora que entendemos as duas categorias de sysctls, vamos aprender como usar esses sysctls no Kubernetes. Aqui, vamos orientá-lo sobre como usar sysctls seguros e inseguros e como habilitar manualmente sysctls inseguros no Kubernetes.

Passo # 1: Inicie o Minikube Cluster

A plataforma Kubernetes pode ser usada por meio de alguns clusters e estamos usando o cluster minikube aqui. Para iniciar o cluster minikube, você pode usar o comando abaixo:

> iniciar minikube


Isso iniciará o cluster minikube onde você pode executar os comandos kubectl e usar os sysctls do Linux na plataforma Kubernetes. Ao executar este comando, você obterá uma saída semelhante à fornecida abaixo:

Etapa # 2: verifique os parâmetros de sysctls

A interface sysctls é usada para modificar os parâmetros do kernel que são encontrados no arquivo de processo virtual /proc/sys/. Para listar todos os parâmetros, o comando abaixo pode ser usado:

> sudo sysctl -uma


Este comando listará todos os parâmetros do kernel do arquivo de processo virtual /proc/sys/. Veja o exemplo de saída fornecido no instantâneo abaixo:

Passo # 3: Habilitar sysctls inseguros

Os sysctls inseguros precisam ser ativados manualmente porque são desativados por padrão. O administrador do cluster ativa manualmente os sysctls inseguros por nó. Os pods que desativaram sysctls inseguros não podem ser iniciados, mas apenas agendados. Existem algumas condições específicas (como ajuste de aplicativo de tempo de execução, alto desempenho etc.) quando o administrador do cluster pode permitir sysctls inseguros. Para habilitar os sysctls inseguros nó a nó, você pode usar o comando kubectl fornecido abaixo:

> kubectl –allowed-unsafe-sysctls \


Esta é uma maneira muito básica e simples de habilitar sysctls inseguros usando o comando kubectl.


Além disso, sysctls inseguros podem ser ativados usando o sinalizador extra-config do minikube. Isso pode ser feito usando o comando dado abaixo:

> minikube start –extra-config=”kubectl.allowed-unsafe-sysctls=kernel.msg * ,net.core.somaxconn”...


Este comando permite habilitar os sysctls inseguros por meio do cluster minikube. No entanto, ele só pode habilitar os sysctls com namespace. Veja o exemplo de saída fornecido no instantâneo abaixo:

Conclusão

Este artigo nos forneceu uma visão geral da interface sysctls do Linux. Discutimos o que é um sysctl Linux e como ele pode ser usado no ambiente Kubernetes. Existem dois grupos de sysctls: é seguro e inseguro. O grupo seguro de sysctls é habilitado por padrão, enquanto o grupo de sysctls inseguros é desabilitado por padrão. Com a ajuda de um exemplo simples e fácil, aprendemos como habilitar os sysctls inseguros usando o comando kubectl e o sinalizador minikube –extra-config.