As tecnologias nativas da cloud, como os contentores ou a computação sem servidor, são essenciais para criar aplicações altamente portáteis na cloud. Pode conceber aplicações mais resilientes, escaláveis e adaptáveis a ambientes em mudança, tirando partido destas tecnologias. Podemos explicar esses três benefícios em uma palavra: portátil.
Ao contrário dos modelos monolíticos que se tornam pesados e quase impossíveis de gerir, as arquitecturas de microsserviços nativos da nuvem são modulares. Esta abordagem dá-lhe a liberdade de escolher a ferramenta certa para o trabalho, um serviço que faz uma função específica e fá-la bem. É aqui que uma abordagem nativa da nuvem brilha, pois fornece um processo eficiente de atualização e substituição de componentes individuais sem afetar toda a carga de trabalho. O desenvolvimento com uma mentalidade nativa da nuvem leva a uma abordagem declarativa da implantação: o aplicativo, as pilhas de software de suporte e as configurações do sistema.
Porquê contentores?
Pense nos contentores como máquinas virtuais super leves concebidas para uma tarefa específica. Os contentores também são efémeros - estão aqui num minuto, desaparecem no minuto seguinte. Não há persistência. Em vez disso, a persistência é vinculada ao armazenamento em bloco ou a outras montagens no sistema de arquivos do host, mas não no próprio contêiner.
A contentorização de aplicações torna-as portáteis! Posso fornecer uma imagem de contêiner, e você pode implantá-la e executá-la em diferentes sistemas operacionais e arquiteturas de CPU. Como os aplicativos em contêineres são unidades independentes que são empacotadas com todas as dependências, bibliotecas e arquivos de configuração necessários, o código não precisa ser alterado entre diferentes ambientes de nuvem. Assim, veja como os contêineres levam à portabilidade em um design nativo da nuvem.
- Virtualização leve: Os contentores fornecem um ambiente isolado para executar aplicações, partilhando o kernel do SO anfitrião, mas isolando processos, sistemas de ficheiros e recursos de rede.
- Portátil e consistente: Os contentores empacotam aplicações e as suas dependências em conjunto, garantindo que são executadas de forma consistente em diferentes ambientes, desde o desenvolvimento à produção.
- Eficiência de recursos: Os contentores consomem menos recursos do que as máquinas virtuais, uma vez que isolam os processos e partilham o kernel do SO anfitrião; não requerem a sobrecarga de executar um SO "convidado" separado sobre o SO anfitrião.
- Arranque e implementação rápidos: Os contentores arrancam rapidamente, uma vez que não precisam de arrancar um sistema operativo completo, o que os torna ideais para cenários de implementação, escalonamento e recuperação rápidos.
- Infraestrutura imutável: Os contentores são concebidos para serem imutáveis, o que significa que não são alterados depois de criados, o que simplifica os processos de implementação, controlo de versões e reversão e ajuda a garantir um comportamento consistente entre ambientes.
Quando é que deve considerar os contentores?
Os contentores permitem-lhe manter a consistência. Certos aspectos do desenvolvimento serão omitidos na preparação e na produção; por exemplo, saídas de depuração detalhadas. Mas o código que sai do desenvolvimento permanecerá intacto durante os ciclos de teste e implantação.
Os contentores são muito eficientes em termos de recursos e super leves. Embora tenhamos mencionado que os contentores são semelhantes a máquinas virtuais, podem ter dezenas de megabytes, em vez dos gigas a que estamos habituados em VMs gigantes (ou mesmo mais pequenas, mas utilizadas de forma desnecessária). Quanto mais leves forem, mais rapidamente arrancam, o que é importante para obter elasticidade e uma escala horizontal eficaz em ambientes dinâmicos de computação em nuvem. Os contêineres também são projetados para serem imutáveis. Se algo mudar, não é necessário incorporar as novas alterações no contentor; basta destruí-lo e criar um novo contentor. Com isso em mente, aqui estão outras considerações ao decidir se os contêineres devem fazer parte do seu modelo nativo da nuvem.
- Consistência de implantação aprimorada: Os contentores empacotam as aplicações e as suas dependências em conjunto, garantindo um comportamento consistente em diferentes ambientes, simplificando a implementação e reduzindo o risco de problemas relacionados com a configuração.
- Escalabilidade aprimorada: Os contentores permitem um escalonamento rápido das aplicações, criando rapidamente novas instâncias para lidar com o aumento da procura, optimizando a utilização de recursos e melhorando o desempenho geral do sistema.
- Utilização económica de recursos: Os contentores consomem menos recursos do que as máquinas virtuais tradicionais, permitindo que as empresas executem mais instâncias no mesmo hardware, o que leva a uma poupança de custos na infraestrutura da nuvem.
- Ciclos de desenvolvimento e teste mais rápidos: Os contentores facilitam uma transição perfeita entre ambientes de desenvolvimento, teste e produção, simplificando o processo de desenvolvimento e acelerando o lançamento de novas funcionalidades e correcções de erros.
- Gerenciamento simplificado de aplicativos: As plataformas de orquestração de contentores gerem a implementação, o dimensionamento e a manutenção de aplicações contentorizadas, automatizando muitas tarefas operacionais e reduzindo a carga das equipas de TI.
Melhores práticas de contentores
Há muitas maneiras de executar seus contêineres, e todas elas são interoperáveis. Por exemplo, ao migrar de AWS, basta reimplantar suas imagens de contêiner para o novo ambiente, e você e sua carga de trabalho vão embora. Existem diferentes ferramentas e mecanismos que podem ser utilizados para executar contentores. Todos eles têm diferentes utilizações de recursos e preços. Se você estiver hospedando com o Linode (serviços de computação em nuvem da Akamai), poderá executar seus contêineres usando nosso Linode Kubernetes Engine (LKE). Também é possível ativar o Podman, o HashiCorp Nomad, o Docker Swarm ou o Compose em uma máquina virtual.
Essas ferramentas de padrão aberto permitem que você passe rapidamente pelo desenvolvimento e teste com o valor agregado do gerenciamento simplificado ao usar um serviço como o LKE. O Kubernetes torna-se o seu plano de controlo com todos os botões e mostradores para orquestrar os seus contentores com ferramentas criadas com base em normas abertas. Além disso, se decidir utilizar uma oferta nativa da plataforma, como o AWS Elastic Container Service (ECS), pagará por um tipo diferente de utilização.
Outra parte importante dos contentores é compreender os registos, que são utilizados para armazenar e aceder às imagens dos contentores. Nós geralmente recomendamos o uso do Harbor. Um projeto CNCF, Harbor permite que você execute seu registro de contêiner privado, permitindo que você controle a segurança em torno dele.
Faça sempre testes e tenha um conjunto de testes de regressão muito aprofundado para garantir que o seu código é da mais alta qualidade em termos de desempenho e segurança. Os contentores também devem ter um plano para falhas. Se um contentor falhar, qual é o mecanismo de repetição? Como é que ele é reiniciado? Que tipo de impacto é que isso vai ter? Como é que a minha aplicação vai recuperar? Os dados com estado persistem no volume mapeado ou na montagem de ligação?
Aqui estão algumas práticas recomendadas adicionais para usar contêineres como parte de seu modelo de desenvolvimento nativo da nuvem.
- Use imagens de base leves: Comece com uma imagem de base leve, como Alpine Linux ou BusyBox, para reduzir o tamanho geral do contentor e minimizar a superfície de ataque.
- Utilizar a orquestração de contentores: Utilize ferramentas de orquestração de contentores, como Kubernetes, HashiCorp Nomad, Docker Swarm ou Apache Mesos, para gerir e escalar contentores em vários anfitriões.
- Utilizar registos de contentores: Utilize registos de contentores, como o Docker Hub, o registo de pacotes do GitHub, o registo de contentores do GitLab, o Harbor, etc., para armazenar e aceder a imagens de contentores. Isso facilita o compartilhamento e a implantação de imagens de contêineres em vários hosts e ambientes de computação.
- Limitar os privilégios dos contentores: Limitar os privilégios dos contentores apenas aos necessários para o fim a que se destinam. Implantar contêineres sem raiz sempre que possível para reduzir o risco de exploração se um contêiner for comprometido.
- Implementar restrições de recursos: Defina restrições de recursos, como limites de CPU e memória, para evitar que os contentores utilizem demasiados recursos e afectem o desempenho geral do sistema.
- Mantenha os contentores actualizados: mantenha as imagens de contentores actualizadas com os patches e actualizações de segurança mais recentes para minimizar o risco de vulnerabilidades.
- Teste minuciosamente os contentores: Antes de os implementar na produção, certifique-se de que funcionam como esperado e estão livres de vulnerabilidades. Automatize os testes em todas as fases com pipelines de CI para reduzir o erro humano.
- Implementar backup e recuperação de contêineres: Implementar uma estratégia de cópia de segurança e recuperação para dados persistentes com os quais os contentores interagem para garantir que as cargas de trabalho podem recuperar rapidamente em caso de falha ou desastre.
Comentários