Ouvimos o tempo todo sobre o quanto os desenvolvedores amam os contêineres - mas os contêineres também são para administradores de TI? Em um post anterior, discutimos a história diferenças estruturais entre contêineres e VMs, mas o que os administradores de TI precisam saber sobre contêineres para suportá-los adequadamente?
Para esta postagem do blog, presumo que você já tenha um conhecimento sólido do que é uma máquina virtual (VM), portanto, podemos nos concentrar na definição dos componentes do contêiner. Além disso, a maioria das postagens de contêiner que encontrei são escritas para desenvolvedores, portanto, esta postagem foi projetada para administradores de TI que precisam oferecer suporte a ambientes de contêiner. Por fim, devo lembrar que trabalho para VMware (para total transparência).
Revisão da definição do contêiner
Primeiro, vamos revisar o que é um contêiner. Aqui está como RedHat define um contêiner:
… Um conjunto de um ou mais processos que são isolados do resto do sistema. Todos os arquivos necessários para executar [contêineres] são fornecidos a partir de uma imagem distinta, o que significa que os contêineres do Linux são portáteis e consistentes à medida que vão do desenvolvimento ao teste e, finalmente, à produção.
Essa é uma ótima definição técnica. Mas eu também gosto esta definição do Docker Captain:
Os contêineres podem ser identificados como um método para empacotar nosso software para que possam ser executados isoladamente, sem depender de qual é o sistema operacional do host e quais bibliotecas e estruturas foram instaladas no sistema operacional do host.
Os desenvolvedores gostam de usar contêineres porque são leves e portáteis. Os contêineres podem ser movidos para hosts diferentes, desde que os sistemas operacionais sejam compatíveis.
Isso define o que é um contêiner, mas os conceitos de tempo de execução e empacotamento também são importantes.
Embalagem do recipiente
Um contêiner normalmente contém o aplicativo, quaisquer dependências, bibliotecas, binários e arquivos de configuração necessários. Pode haver muitos contêineres no sistema operacional de um host, e todos os contêineres compartilharão o kernel do sistema operacional, rede, armazenamento e outros recursos.
Esses componentes do contêiner são empacotados em uma imagem. A ideia de imagens de contêiner foi iniciada por Docker. Esta postagem da OpenSource.com tem ótimas informações detalhadas sobre contêineres para administradores de sistemas. Eles explicaram o empacotamento do contêiner com base nas imagens do Docker:
- Rootfs (sistema de arquivos raiz do contêiner): Um diretório no sistema que se parece com a raiz padrão (/) do sistema operacional. Por exemplo, um diretório com / usr, / var, / Home, Etc.
- Arquivo JSON (configuração do contêiner): Especifica como executar o rootfs; por exemplo, qual comando ou ponto de entrada executar no rootfs quando o contêiner é iniciado; variáveis de ambiente a serem definidas para o contêiner; o diretório de trabalho do contêiner; e algumas outras configurações.
Docker pega esses elementos e TARs eles. Se você tem Linux ou qualquer experiência em UNIX, tudo isso deve parecer muito familiar para você (especialmente se você já construiu um servidor kickstart ou jumpstart). A imagem do contêiner tem seu próprio sistema de arquivos raiz e todos os subsistemas necessários para executar o contêiner. Você pode obter imagens de contêiner predefinidas em Docker Hub. Por exemplo, esta é a aparência da página do servidor da web Apache:
Quando essa imagem é chamada (por linha de comando ou sistema de orquestração), todos os seus componentes são iniciados e o contêiner está em execução. As instruções sobre como configurar e executar esta imagem de contêiner Apache estão nesta página, ou você pode usar uma plataforma como o Kubernetes para fazer isso.
Tempo de execução do contêiner
O Container Runtime é um tópico enorme e o termo pode significar várias coisas diferentes. Eu recomendaria esta postagem do blog por Ian Lewis para compreender todos os diferentes significados. eu acho que esta definição VMware é provavelmente o mais sucinto para administradores de TI (e esta postagem):
Um contêiner possui um ciclo de vida que normalmente está vinculado ao ciclo de vida do processo para o qual foi projetado para ser executado. Se você iniciar um contêiner, ele inicia seu processo principal e, quando esse processo termina, o contêiner para.
Por que as pessoas estão usando contêineres?
Vamos ser honestos, você provavelmente está olhando para contêineres porque seus desenvolvedores querem usar contêineres. Uma grande semelhança entre VMs e contêineres é seu propósito: ambos são elementos arquitetônicos nos quais os aplicativos são implantados. A diferença é como dois são arquitetados.
Enquanto as VMs virtualizam todo o servidor, os contêineres são leves, abstraindo os aplicativos do sistema operacional. Devido à maneira como os contêineres são empacotados e executados, eles são perfeitos para executar aplicativos baseados em microsserviços. Aqui está o Definição da Wikipedia para microsserviços:
Microsserviços são uma técnica de desenvolvimento de software ... que estrutura um aplicativo como uma coleção de serviços fracamente acoplados.
Os aplicativos construídos com a metodologia de microsserviços desconstroem todos os serviços necessários para executar esse aplicativo. Se forem construídos em contêineres, podem ser construídos de forma que um contêiner hospede um único serviço. Portanto, em vez de um grande aplicativo monolítico, onde você precisa atualizar o produto inteiro para atualizar uma parte do aplicativo, você pode atualizar cada serviço conforme necessário.
Por que os contêineres são para administradores de TI
Os contêineres são um espaço importante para os administradores de TI. Se seus aplicativos forem refatorados para uma arquitetura de microsserviços, todos os tipos de complexidades operacionais serão introduzidos. As diferentes partes do aplicativo - os serviços - podem ser simplificadas, mas o próprio sistema pode ser mais complexo. E no final do dia, ainda são aplicativos. Como a integridade e conformidade dos dados são gerenciadas? Quais são as expectativas em relação ao tempo de atividade e quais são as técnicas arquitetônicas necessárias para atender a essas expectativas?
E quanto à segurança? Como você protegerá esses sistemas e os dados?
Nossa responsabilidade como administradores de TI é fornecer o ambiente de que nossos desenvolvedores precisam para criar os aplicativos que impulsionam nossos negócios. A tecnologia de contêineres está amadurecendo e é hora de colocá-la em prática.
Qual é a sua experiência? Seus administradores estão pedindo para usar a arquitetura de contêiner na produção? O que você fez para aprimorar suas habilidades?
Informação bônus
Estes são alguns dos outros sites que usei para esta postagem do blog.
Diferenças entre contêineres e VMs
Contêineres integrados VMware [github]
Linux Journal - tudo que você precisa saber sobre Linux Containers
Guia do administrador do sistema para contêineres