7 práticas recomendadas para uso de contêineres de acordo com o Google

Observação. trad.: O autor do artigo original é Théo Chamley, arquiteto de soluções do Google Cloud. Nesta postagem do blog do Google Cloud, ele traz um resumo do guia mais detalhado de sua empresa, chamado "Melhores práticas para operação de contêineres" Nele, especialistas do Google coletaram práticas recomendadas para operar contêineres no contexto do uso do Google Kubernetes Engine e muito mais, abordando uma ampla gama de tópicos: desde segurança até monitoramento e registro. Então, quais são as práticas de contêineres mais importantes de acordo com o Google?

7 práticas recomendadas para uso de contêineres de acordo com o Google

Motor Kubernetes (Serviço baseado em Kubernetes para execução de aplicativos em contêineres no Google Cloud - Aproximadamente. tradução) é uma das melhores maneiras de executar cargas de trabalho que precisam ser escalonadas. Kubernetes garantirá o bom funcionamento da maioria dos aplicativos se eles estiverem em contêineres. Mas se você deseja que seu aplicativo seja fácil de gerenciar e aproveitar ao máximo o Kubernetes, você precisa seguir as práticas recomendadas. Eles simplificarão o funcionamento da aplicação, seu monitoramento e depuração, além de aumentar a segurança.

Neste artigo, veremos uma lista de coisas que você deve saber e fazer para executar contêineres de maneira eficaz no Kubernetes. Aqueles que desejam se aprofundar nos detalhes devem ler o material Melhores práticas para operação de contêineres, e também preste atenção ao nosso postagem anterior sobre a montagem de contêineres.

1. Use mecanismos nativos de registro de contêineres

Se o aplicativo estiver sendo executado em um cluster Kubernetes, não será necessário muito para os logs. Um sistema de registro centralizado provavelmente já está integrado ao cluster que você está usando. No caso de utilização do Kubernetes Engine, este é responsável Registro do Stackdriver. (Observação. trad.: E se você usa sua própria instalação do Kubernetes, recomendamos dar uma olhada mais de perto em nossa solução Open Source - casa de toras.) Mantenha sua vida simples e use mecanismos nativos de registro de contêineres. Grave logs em stdout e stderr - eles serão recebidos, salvos e indexados automaticamente.

Se desejar, você também pode gravar logs em Formato JSON. Essa abordagem facilitará a adição de metadados a eles. E com eles, o Stackdriver Logging poderá pesquisar registros usando esses metadados.

2. Certifique-se de que os contêineres sejam sem estado e imutáveis

Para que os contêineres funcionem corretamente em um cluster Kubernetes, eles devem ser sem estado e imutáveis. Uma vez atendidas essas condições, o Kubernetes pode fazer seu trabalho, criando e destruindo entidades de aplicativos quando e onde necessário.

Sem estado significa que qualquer estado (dados persistentes de qualquer tipo) é armazenado fora do contêiner. Para isso, dependendo das necessidades, podem ser utilizados diferentes tipos de armazenamento externo: cloud Storage, Discos permanentes, Redis, Cloud SQL ou outros bancos de dados gerenciados. (Observação. trad.: Leia mais sobre isso em nosso artigo “Operadores para Kubernetes: como executar aplicativos com estado".)

Imutável significa que o contêiner não será modificado durante sua vida útil: sem atualizações, patches, alterações de configuração. Se precisar atualizar o código do seu aplicativo ou aplicar um patch, crie uma nova imagem e implante-a. Recomenda-se mover a configuração do contêiner (porta de escuta, opções de ambiente de tempo de execução, etc.) externamente - para Segredos и ConfigMaps. Eles podem ser atualizados sem a necessidade de criar uma nova imagem de contêiner. Para criar pipelines facilmente com montagem de imagens, você pode usar Criação de nuvem. (Observação. trad.: Usamos uma ferramenta de código aberto para esses fins dapp.)

7 práticas recomendadas para uso de contêineres de acordo com o Google
Um exemplo de atualização da configuração de implantação no Kubernetes usando ConfigMap montado em pods como configuração

3. Evite contêineres privilegiados

Você não executa aplicativos como root em seus servidores, certo? Se um invasor entrar no aplicativo, ele obterá acesso root. As mesmas considerações se aplicam à não execução de contêineres privilegiados. Se precisar alterar as configurações no host, você pode fornecer informações específicas ao contêiner capacidades usando a opção securityContext em Kubernetes. Se você precisar mudar sysctls, Kubernetes tem resumo separado por esta. Em geral, tente aproveitar ao máximo iniciar- e contêineres sidecar para realizar operações privilegiadas semelhantes. Eles não precisam ser acessíveis ao tráfego interno ou externo.

Se você administrar um cluster, poderá usar Política de segurança de pod para restrições ao uso de contêineres privilegiados.

4. Evite executar como root

Containers privilegiados já foram discutidos, mas será ainda melhor se, além disso, você não executar aplicativos dentro do container como root. Se um invasor encontrar uma vulnerabilidade remota em um aplicativo com direitos de root que permite a execução de código, após o qual ele conseguir sair do contêiner por meio de uma vulnerabilidade ainda desconhecida, ele ganhará root no host.

A melhor maneira de evitar isso é não executar nada como root em primeiro lugar. Para fazer isso, você pode usar a diretiva USER в Dockerfile ou runAsUser em Kubernetes. O administrador do cluster também pode configurar o comportamento de imposição usando Política de segurança de pod.

5. Torne o aplicativo fácil de monitorar

Assim como o registro em log, o monitoramento é parte integrante do gerenciamento de aplicativos. Uma solução de monitoramento popular na comunidade Kubernetes é Prometeu - um sistema que detecta automaticamente pods e serviços que requerem monitoramento. (Observação. trad.: Veja também nosso relatório detalhado sobre o tópico de monitoramento usando Prometheus e Kubernetes.) Stackdriver é capaz de monitorar clusters Kubernetes e inclui sua própria versão do Prometheus para monitoramento de aplicativos.

7 práticas recomendadas para uso de contêineres de acordo com o Google
Painel do Kubernetes no Stackdriver

O Prometheus espera que o aplicativo encaminhe métricas para o endpoint HTTP. Disponível para isso Bibliotecas cliente Prometheus. O mesmo formato é usado por outras ferramentas como OpenCensus и Istio.

6. Disponibilize o estado de saúde do aplicativo

O gerenciamento de aplicativos em produção é auxiliado pela capacidade de comunicar seu estado a todo o sistema. O aplicativo está em execução? Está tudo bem? Você está pronto para receber tráfego? Como ele está se comportando? A maneira mais comum de resolver esse problema é implementar verificações de saúde (exames de saúde). Kubernetes tem dois tipos: sondagens de vivacidade e prontidão.

Para sondagem de vivacidade (verificações de vitalidade) o aplicativo deve ter um endpoint HTTP que retorne uma resposta "200 OK" se estiver funcional e suas dependências básicas forem satisfeitas. Para sonda de prontidão (verificações de prontidão do serviço) o aplicativo deve ter outro endpoint HTTP que retorne uma resposta "200 OK" se o aplicativo estiver em um estado íntegro, as etapas de inicialização tiverem sido concluídas e qualquer solicitação válida não resultar em erro. O Kubernetes só encaminhará o tráfego para o contêiner se o aplicativo estiver pronto de acordo com essas verificações. Dois pontos finais podem ser mesclados se não houver diferença entre os estados de atividade e prontidão.

Você pode ler mais sobre isso no artigo relacionado de Sandeep Dinesh, Developer Advocate do Google: “Práticas recomendadas do Kubernetes: configuração de verificações de integridade com sondagens de prontidão e atividade".

7. Escolha a versão da sua imagem com cuidado

A maioria das imagens públicas e privadas usa um sistema de marcação semelhante ao descrito em Melhores práticas para construção de contêineres. Se a imagem usar um sistema próximo versionamento semântico, é necessário levar em consideração as especificidades da marcação. Por exemplo, etiqueta latest pode passar frequentemente de imagem para imagem - não pode ser confiável se você precisar de compilações e instalações previsíveis e repetíveis.

Você pode usar a etiqueta X.Y.Z (quase sempre permanecem inalterados), mas, neste caso, acompanhe todos os patches e atualizações da imagem. Se a imagem que você está usando tiver uma tag X.Y, esta é uma boa opção para o meio-termo. Ao escolhê-lo, você recebe patches automaticamente e ao mesmo tempo conta com a versão estável do aplicativo.

PS do tradutor

Leia também em nosso blog:

Fonte: habr.com

Adicionar um comentário