Os 10 principais truques e dicas do Kubernetes

Os 10 principais truques e dicas do Kubernetes

Há muita literatura de referência na Internet, mas às vezes o conselho mais simples é o mais valioso. Equipe Kubernetes aaS de Mail.ru traduzido uma seleção de dez truques e dicas, que o autor do artigo coletou após um ano trabalhando com Kubernetes. As dicas não são ordenadas por importância, mas achamos que cada um encontrará algo útil para si.

O comando mais simples para trabalhar com Kubernetes

Para começar, talvez a ação mais simples e útil no trabalho com Kubernetes. O comando a seguir permite a conclusão do comando kubectl no shell bash:

echo "source <(kubectl completion bash)" >> ~/.bashrc

Preenchimento automático kubectl será gravado no arquivo .bashrc e será ativado automaticamente sempre que o shell for iniciado. Isso acelera a digitação de comandos e parâmetros longos, como all-namespaces. Leia mais em Ajuda do bash do Kubernetes.

Memória padrão e limites de CPU em um namespace

Se o aplicativo for escrito incorretamente, por exemplo, ele abre uma nova conexão com o banco de dados a cada segundo, mas nunca a fecha, então o cluster tem um vazamento de memória. E se o aplicativo não tiver um limite de memória definido durante a implantação, isso poderá levar à falha do nó.

Para evitar isso, o Kubernetes permite que você defina restrições padrão por namespace. Eles são escritos no arquivo yaml para um namespace específico. Aqui está um exemplo de tal arquivo:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

Crie esse yaml e aplique a qualquer namespace. Por exemplo, para o namespace limit-example. Agora, qualquer contêiner implantado neste namespace terá um limite de 512 Mi, a menos que outro limite individual seja definido adicionalmente para este contêiner.

Coleta de lixo em versões mais antigas do Kubernetes

Por padrão, o Kubelet inicia a coleta de lixo quando var/lib/docker ocupa 90% do espaço disponível em disco. Isso é ótimo, no entanto, até o Kubernetes 1.7 não havia limite padrão para o número de inodes usados, que correspondem ao número de arquivos no sistema de arquivos.

Potencialmente seu contêiner var/lib/docker pode usar apenas 50% do espaço em disco, mas pode ficar sem inodes, o que causará problemas aos trabalhadores.

Nas versões mais antigas do kubelet de 1.4 a 1.6 você terá que adicionar este sinalizador:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

Nas versões 1.7 e posteriores, esse sinalizador é definido por padrão. No entanto, as versões anteriores não monitoram o limite de inodes.

Minikube... Kubernetes locais pequenos, mas poderosos

Minikube é a maneira mais fácil de executar um cluster Kubernetes local. É iniciado com um comando simples:

minikube start

A execução deste comando resulta em um cluster Kubernetes real em execução em sua máquina.

Os 10 principais truques e dicas do Kubernetes
Fonte de ilustração

O truque é como construir o aplicativo e executá-lo localmente nesse cluster. A menos que seja especificamente instruído, a imagem do Docker será criada no seu computador e não no cluster.

Para forçar o Docker a enviar a imagem para o cluster Kubernetes local, a máquina docker recebe o seguinte comando:

eval $(minikube docker-env)

Agora podemos construir aplicativos em um cluster Kubernetes local.

Não dê acesso ao kubectl para todos

Isso parece óbvio, mas se várias equipes estiverem usando o mesmo cluster para seus aplicativos (que é para isso que o Kubernetes foi criado), você não deve simplesmente dar a todos kubectl. É melhor separar os comandos, atribuindo a cada um deles seu próprio namespace e limitando o acesso usando políticas RBAC.

Você pode ficar confuso ao atribuir direitos de acesso, leitura, criação, exclusão e outras operações para cada pod. Mas o principal é limitar o acesso aos segredos, permitindo-o apenas aos administradores. Desta forma iremos diferenciar entre aqueles que podem administrar o cluster e aqueles que podem simplesmente implantar nele.

Gerenciar orçamentos de pod

Como garantir que não haja tempo de inatividade para um aplicativo em um cluster Kubernetes? PodDisruptionBudget e novamente PodDisruptionBudget.

Os clusters são atualizados periodicamente e os nós são esvaziados. Nada fica parado, essa é a realidade. Cada implantação com mais de uma instância deve incluir um PDB (PodDisruptionBudget). Ele é criado em um arquivo yaml simples que é aplicado ao cluster. A área de cobertura de um PDB específico é determinada por seletores de rótulos.

Nota: O orçamento do APO só é tido em conta quando a violação orçamental é reversível (interrupção voluntária). Em situações como falhas de hardware, o PDB não funcionará.

Exemplo de PDB:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

Os dois parâmetros principais são matchLabels и minAvailable. O primeiro parâmetro especifica a quais aplicações o orçamento se aplica. Por exemplo, se eu tiver implantações com rótulos app: app-a и app: app-b, então este PDB se aplicará apenas ao primeiro.

Parâmetro minAvailable levado em consideração ao esvaziar (limpar) o nó. Por exemplo, em nosso exemplo, durante o esvaziamento, todas as instâncias são despejadas app: app-a, exceto dois.

Isso permite controlar quantas instâncias do aplicativo devem estar em execução a qualquer momento.

Monitoramento da integridade do aplicativo

Esse monitoramento é possível de duas maneiras: por meio de testes de Prontidão ou de Vivência.

A primeira investigação (prontidão) determina a prontidão do contêiner para receber tráfego.

O segundo (atividade) mostra se o contêiner está íntegro ou precisa ser reiniciado.

As configurações relevantes são simplesmente adicionadas ao yaml para implantação. Lá você pode especificar tempos limite, tempos de atraso e o número de novas tentativas. Veja mais detalhes sobre eles Documentação do Kubernetes.

As tags estão por toda parte

Os rótulos são um dos conceitos fundamentais do Kubernetes. Eles permitem que os objetos se comuniquem livremente entre si, bem como criem consultas baseadas em rótulos. No Kubernetes, você pode até ir até o cliente e observar eventos para tags específicas.

Você pode fazer quase tudo com tags, mas um bom exemplo seria criar vários ambientes para executar programas no mesmo cluster.

Digamos que você use o mesmo cluster para dev и qa. Isso significa que você pode ter um aplicativo app-a, trabalhando simultaneamente em ambos os ambientes qa и dev. Neste caso, podemos acessar separadamente a instância do aplicativo em um ambiente específico, especificando o parâmetro apropriado environment. Por exemplo, app: app-a и environment: dev para um ambiente e app: app-a и environment: qa para o segundo.

Isso permite acessar ambas as instâncias do aplicativo, por exemplo, para realizar testes simultaneamente.

Coloque as coisas em ordem

Kubernetes é um sistema muito poderoso, mas qualquer sistema pode eventualmente ficar atolado em muitos processos. O Kubelet executa todos os processos e verificações que você especifica, bem como os seus próprios.

É claro que um serviço órfão não deixará o sistema lento, e o Kubernetes foi projetado para ser escalonado desde o início. Mas se em vez de um serviço aparecer um milhão, o kubelet começa a sufocar.

Se por algum motivo você excluir uma implantação (contêiner, imagem, qualquer que seja), certifique-se de fazer uma limpeza completa.

Conheça o Go

Deixamos o conselho principal para o final. Aprenda a linguagem de programação Go.

Kubernetes é desenvolvido em Go, todas as extensões são escritas em Go e a biblioteca cliente client-go também é oficialmente suportada.

Pode ser usado para coisas diferentes e interessantes. Por exemplo, para expandir o sistema Kubernetes ao seu gosto. Assim, você pode usar seus próprios programas para coletar dados, implantar aplicativos ou simplesmente limpar contêineres.

Aprender a linguagem de programação Go e dominar o client-go é talvez o conselho mais importante que você pode dar aos novos usuários do Kubernetes.

Traduzido com o suporte de Mail.ru Cloud Solutions

O que mais ler:

  1. Três níveis de escalonamento automático no Kubernetes e como usá-los de maneira eficaz.
  2. Nós de trabalho do Kubernetes: muitos pequenos ou poucos grandes?
  3. 25 ferramentas úteis para implantar e gerenciar Kubernetes.

Fonte: habr.com

Adicionar um comentário