Geral

O que é o Bottlerocket?

O Bottlerocket é um novo SO baseado em Linux de código aberto criado especificamente para executar contêineres. Com o Bottlerocket, você pode melhorar a disponibilidade das suas implantações em contêineres e reduzir os custos operacionais, automatizando atualizações na sua infraestrutura de contêineres. O Bottlerocket inclui apenas os softwares essenciais para executar contêineres, o que melhora o uso de recursos, reduz a superfície de ataques de segurança e reduz a sobrecarga de gerenciamento. Ele também se integra a orquestradores de contêineres (como o Amazon EKS e o Amazon ECS) para reduzir ainda mais a sobrecarga operacional e de gerenciamento e, ao mesmo tempo, atualizar hosts de contêiner dentro de um cluster. 

Quais são os benefícios de usar o Bottlerocket?

a) Maior tempo de atividade com menos custos operacionais e menor complexidade de gerenciamento: por incluir apenas os componentes necessários para executar contêineres, o Bottlerocket tem uma menor pegada de recursos, tempos de inicialização mais rápidos e uma superfície de ataques de segurança reduzida em comparação aos sistemas operacionais de uso geral. Uma pegada menor ajuda a reduzir custos devido ao uso reduzido de recursos de armazenamento, computação e rede. O uso de primitivas de contêiner (em vez de gerenciadores de pacotes) para executar softwares reduz a sobrecarga de gerenciamento.

b) Segurança aprimorada em atualizações automáticas do sistema operacional: as atualizações do Bottlerocket são aplicadas como uma única unidade que pode ser revertida, se necessário, o que elimina o risco de atualizações “mal feitas” que podem deixar o sistema em um estado inutilizável. Falhas de atualização são comuns com sistemas operacionais de uso geral devido a falhas irrecuperáveis durante atualizações feitas pacote por pacote. No Bottlerocket, as atualizações de segurança podem ser aplicadas automaticamente e com o mínimo de interrupção assim que são disponibilizadas e podem ser revertidas se ocorrerem falhas.

c) Disponibilidade universal e código aberto: um modelo de desenvolvimento aberto permite que clientes, parceiros e todas as partes interessadas façam alterações de código e design no Bottlerocket.

d) Premium Support: o uso de compilações do Bottlerocket fornecidas pela AWS no Amazon EC2 é coberto pelos mesmos planos de suporte da AWS que também cobrem serviços da AWS como o Amazon EC2, o Amazon EKS e o Amazon ECR, entre outros.

Como o Bottlerocket é diferente do Amazon Linux?

O Amazon Linux é um SO de uso geral para executar uma ampla variedade de aplicações que estão incluídas no RPM Package Manager ou em contêineres. O Amazon Linux é otimizado para fornecer a capacidade de configurar cada instância conforme necessário para sua workload, usando ferramentas tradicionais como yum, ssh, tcpdump, netconf, etc. Por outro lado, o Bottlerocket foi feito sob medida para executar contêineres e permite que você gerencie com automação um grande número de hosts de contêineres. Especificamente, o Bottlerocket difere do Amazon Linux nos seguintes aspectos:

  • O Bottlerocket não tem um gerenciador de pacotes, e os softwares só podem ser executados como contêineres. As atualizações do Bottlerocket são aplicadas e podem ser revertidas em uma única etapa atômica, o que reduz os erros de atualização.
  • O principal mecanismo para gerenciar hosts Bottlerocket é com um orquestrador de contêineres como o Amazon EKS. Ao contrário do Amazon Linux, o objetivo é que o login em instâncias individuais do Bottlerocket seja uma operação pouco frequente para depuração avançada e solução de problemas.

As AMIs otimizadas para o EKS e o ECS e baseadas no Amazon Linux 2 continuarão a receber suporte?

As AMIs atuais otimizadas para o EKS e baseadas no Amazon Linux terão suporte e continuarão recebendo atualizações de segurança. Consulte Amazon Linux 2 AMI otimizada para EKS e AMI otimizada para ECSpara obter detalhes sobre a vida útil do suporte.  

Quais são os principais componentes do Bottlerocket?

Os principais componentes do Bottlerocket incluem:

  • Sistema operacional mínimo que inclui o kernel Linux, softwares do sistema e o containerd como o tempo de execução de contêineres.
  • Mecanismo de atualização atômica para aplicar e reverter atualizações do sistema operacional em uma única etapa. 
  • Integrações com orquestradores de contêineres, como o Amazon EKS, para gerenciar e orquestrar atualizações.
  • “Contêiner de administração”, que pode ser executado opcionalmente para solução de problemas e depuração avançadas.

Como posso aplicar atualizações ao Bottlerocket?

As atualizações do Bottlerocket são automaticamente transferidas por download de repositórios pré-configurados da AWS quando são disponibilizadas. É necessária uma reinicialização do Bottlerocket para aplicar essas atualizações, e o processo pode ser iniciado manualmente ou gerenciado por um orquestrador, como o Amazon EKS. Você precisa selecionar o mecanismo apropriado para lidar com reinicializações de acordo com as suas necessidades operacionais e com a tolerância das suas aplicações a reinicializações. Se você tiver aplicações sem estado e resilientes a reinicializações, estas poderão ser executadas imediatamente após o download das atualizações. Se você estiver executando workloads tradicionais com estado (por exemplo, bancos de dados, aplicações de linha de negócios de longa execução, etc.) em contêineres que não são resilientes a reinicializações, será necessário garantir que o estado seja preservado antes dessas reinicializações.

As reinicializações do Bottlerocket podem ser gerenciadas por orquestradores, como o Amazon EKS. Isso é feito por meio da drenagem e da reinicialização de contêineres entre hosts para permitir atualizações contínuas em um cluster a fim de reduzir a interrupção. As atualizações do Bottlerocket também podem ser revertidas com segurança em caso de falhas por meio de ações manuais ou orquestradores compatíveis.

Quais são as etapas para implantar e operar o Bottlerocket usando o Kubernetes?

É possível implantar e fazer a manutenção do Bottlerocket utilizando as seguintes etapas:

Etapa 1: você pode implantar o Bottlerocket da mesma forma que qualquer outro SO em uma máquina virtual. Na AWS, o Bottlerocket pode ser implantado em instâncias do EC2 a partir do console, da API e da CLI. Você precisa fornecer detalhes de configuração por meio de dados do usuário para cada instância do Bottlerocket para se inscrever em um cluster do Amazon EKS.

Etapa 2: para operar o Bottlerocket com o seu orquestrador, você precisará implantar um componente de integração no seu cluster. Esse componente de integração permite que o orquestrador inicie reinicializações, reverta atualizações e substitua contêineres com o mínimo de interrupção para atualizações contínuas.

Consulte a documentação do Bottlerocket, para conhecer as etapas de implantação e uso do “operador de atualizações do Bottlerocket” em clusters do Amazon EKS.

Posso usar o Bottlerocket sem usar um orquestrador de contêineres?

Sim, você pode executar o Bottlerocket como um SO autônomo sem um orquestrador no seu laptop ou servidor para casos de uso de desenvolvimento e teste. Você pode usar os utilitários no “contêiner de administração” para administrar e atualizar o Bottlerocket.  

Para quais plataformas de computação e tipos de instância do EC2 o Bottlerocket oferece suporte?

As compilações do Bottlerocket da AWS têm suporte em famílias de instâncias Bare Metal do EC2 e HVM, com exceção dos tipos de instância P, G, F e INF. O Bottlerocket precisa de pelo menos 1 vCPU e 512 MB de RAM. O Bottlerocket não oferece suporte a tipos de instância PV.

Como posso começar a usar o Bottlerocket na AWS?

A AWS fornece uma imagem de máquina da Amazon (AMI) para o Bottlerocket que você pode usar para execução em tipos de instância do EC2 compatíveis a partir do console, da CLI e do SDK da AWS. A AWS fornecerá compilações do Bottlerocket que vêm pré-configuradas para uso com o EKS e o ECS. Você pode usar o EKS para atualizar e gerenciar o SO com o mínimo de interrupções, sem precisar fazer login em cada instância do SO. O operador do Bottlerocket para Kubernetes permite que você execute operações de gerenciamento de SO, como atividades como iniciar reinicializações e reversão de atualizações com o mínimo de interrupções.

Como faço para executar softwares no Bottlerocket?

Você pode executar suas aplicações em contêineres, incluindo softwares de ISVs terceiros em uma instância do Bottlerocket em execução usando seu orquestrador de contêineres. Você também pode incluir scripts de software e inicialização no Bottlerocket durante a personalização da imagem. Consulte a documentação do Bottlerocket para obter detalhes.

Qual é o preço do Bottlerocket?

As compilações do Bottlerocket fornecidas pela AWS estão disponíveis gratuitamente em todas as plataformas com suporte. Cobranças padrão do Amazon EC2 são aplicáveis pela execução de instâncias do Amazon EC2.

Você tem um roteiro público?

Nós temos!

Versionamento

Como os lançamentos do Bottlerocket são versionados?

As compilações fornecidas pela AWS de compilações do Bottlerocket seguem um esquema de versionamento semântico “principal.secundário.patch”. Versões secundárias do Bottlerocket serão lançadas várias vezes no ano, com alterações como suporte para novas plataformas do EC2, suporte para novos agentes orquestradores e atualizações em componentes de código aberto. O esquema de versão indicará se as atualizações contêm alterações importantes.

Suporte

Que tipo de suporte a AWS oferece ao Bottlerocket?

As compilações do Bottlerocket fornecidas pela AWS receberão atualizações de segurança e correções de bugs e serão cobertas em planos de suporte da AWS. O período de suporte de uma determinada compilação dependerá da versão do orquestrador de contêineres que está sendo usado. As compilações do Bottlerocket se tornarão obsoletas quando a respectiva versão do orquestrador ficar obsoleta. Por exemplo, não oferecemos mais suporte para aws-k8s-1.15, que é a compilação do Bottlerocket para o Kubernetes 1.15. Isso está alinhado à interrupção do suporte para o Kubernetes 1.15. Recomendamos que os clientes substituam os nós aws-k8s-1.15 por uma compilação mais recente com suporte pelos seus clusters.

Além disso, o suporte da comunidade para o Bottlerocket está disponível no GitHub, onde você pode publicar perguntas, solicitar recursos e informar bugs. Detalhes sobre lançamentos e correções em CVEs serão publicados no changelog do Bottlerocket.

Atualizações

Que tipos de atualizações estão disponíveis para o Bottlerocket?

A AWS fornece atualizações pré-testadas para o Bottlerocket, que são aplicadas em uma única etapa. Essas atualizações também podem ser revertidas em uma única etapa para um estado funcional conhecido. Como resultado, atualizações “mal feitas” que podem deixar o sistema inutilizável devido a estados inconsistentes que exigem reparo manual não ocorrem com o Bottlerocket. Com atualizações atômicas em uma única etapa, a complexidade é bem menor, reduzindo assim possíveis falhas de atualização.

Como posso aplicar atualizações ao Bottlerocket?

As atualizações em compilações do Bottlerocket fornecidas pela AWS são baixadas automaticamente de repositórios pré-configurados da AWS assim que se tornam disponíveis. É necessária uma reinicialização do Bottlerocket para aplicar essas atualizações, e o processo pode ser iniciado manualmente ou gerenciado por um orquestrador, como o Amazon EKS. Você precisa selecionar o mecanismo apropriado para lidar com reinicializações de acordo com as suas necessidades operacionais e com a tolerância das suas aplicações a reinicializações. Se você tiver aplicações sem estado e resilientes a reinicializações, estas poderão ser executadas imediatamente após o download das atualizações. Se você estiver executando workloads tradicionais com estado (por exemplo, bancos de dados, aplicações de linha de negócios de longa execução, etc.) em contêineres que não são resilientes a reinicializações, será necessário garantir que o estado seja preservado antes dessas reinicializações.

As reinicializações do Bottlerocket podem ser gerenciadas por orquestradores, como o Amazon EKS, que drenam e reiniciam contêineres entre hosts para permitir atualizações contínuas em um cluster a fim de reduzir a interrupção. Por padrão, o Bottlerocket será atualizado automaticamente para a versão segura mais recente após a inicialização. As atualizações do Bottlerocket também podem ser revertidas com segurança em caso de falhas por meio de ações manuais ou orquestradores compatíveis.

Como o Bottlerocket ajuda a garantir que as atualizações causem o mínimo de interrupção?

As integrações com orquestradores, como o Amazon EKS, ajudam a fazer com que as atualizações do Bottlerocket causem o mínimo de interrupções. Durante o processo de atualização, o orquestrador drena contêineres em hosts que estão sendo atualizados e os coloca em outros hosts vagos no cluster. O orquestrador também reverterá os hosts para a versão anterior do Bottlerocket se as atualizações falharem.

Compatibilidade e migração

Que imagens de contêiner posso executar em contêineres no Bottlerocket?

O Bottlerocket pode executar todas as imagens de contêiner que atendem à especificação de formato de imagem OCI e a imagens do Docker.

Posso migrar meus contêineres em execução no Amazon Linux 2 para o Bottlerocket?

Sim, você pode mover seus contêineres entre o Amazon Linux 2 e o Bottlerocket sem modificações.

Quando não devo usar Bottlerocket?

Se os seus fluxos de trabalho operacionais para executar contêineres envolvem a instalação de softwares no SO host com p yum, conectar-se diretamente via ssh a instâncias, personalizar cada instância individualmente ou executar softwares de ISVs terceiros que não estão em contêineres (por exemplo, agentes para registro em log e monitoramento), o Amazon Linux 2 pode ser mais apropriado. O Bottlerocket é otimizado para executar e gerenciar grandes implantações em contêiner e não permite facilmente muitas dessas atividades.

Solução de problemas e segurança

Como faço para depurar problemas com o Bottlerocket?

Você pode executar um “contêiner de administração” usando a API do Bottlerocket (chamada por dados de usuários ou pelo AWS Systems Manager) e, em seguida, fazer login com SSH para depuração avançada e solução de problemas com privilégios elevados. A AWS fornece o contêiner de administração, que permite instalar e usar ferramentas de depuração como sosreport, traceroute, strace, tcpdump. O objetivo é que o login em uma instância individual do Bottlerocket seja uma operação pouco frequente para depuração avançada e solução de problemas.

O que é o contêiner de administração?

Um contêiner de administração é uma imagem de contêiner do Amazon Linux que contém utilitários para solução de problemas e depuração do Bottlerocket e que é executada com privilégios elevados. A execução do contêiner de ferramentas pode ser iniciada por meio de dados de usuários ou de APIs do Bottlerocket.

Quais recursos de isolamento e segurança de contêineres o Bottlerocket fornece?

O Bottlerocket possibilita atualizações de segurança automáticas e reduz a exposição a ataques de segurança, incluindo apenas os softwares essenciais para hospedar contêineres. O Bottlerocket usa grupos de controle de contêineres (cgroups) e namespaces de kernel para isolamento entre contêineres. Ele também vem com o Security-Enhanced Linux (SELinux) no modo de imposição e seccomp. O eBPF no kernel reduz a necessidade de módulos de kernel para muitas operações de sistema de baixo nível, fornecendo uma estrutura de rastreamento com baixa sobrecarga para rastreamento de E/S, operações de sistema de arquivos, uso de CPU, detecção de intrusão e solução de problemas. O Bottlerocket inclui o device-mapper-verity (dm-verity), um recurso de kernel do Linux que fornece verificação de integridade para ajudar a evitar rootkits que podem conter privilégios de root.

Código aberto e marcas registradas

Qual é a licença de código aberto do Bottlerocket?

O código do Bottlerocket está licenciado sob a Apache 2.0 OU MIT. A Amazon escreveu seu Bottlerocket no Rust, então escolhemos uma licença que se adapta facilmente a essa comunidade. O código de terceiros subjacente, como o kernel do Linux, permanece sujeito à sua licença original.

Como posso visualizar e contribuir com alterações no código-fonte no Bottlerocket?

O Bottlerocket foi lançado como um projeto de código aberto hospedado no GitHub. Documentos de design, código, ferramentas de compilação, testes e documentação serão hospedados no GitHub. Usaremos os sistemas de rastreamento de bugs e recursos do GitHub para gerenciamento de projetos. Você pode visualizar e contribuir com o código-fonte do Bottlerocket usando fluxos de trabalho padrão do GitHub.

Como posso produzir compilações personalizadas do Bottlerocket que incluem minhas próprias alterações?

Você pode bifurcar o repositório do GitHub, fazer suas alterações e seguir nosso guia de compilação.

Posso criar e redistribuir minhas próprias compilações do Bottlerocket?

Sim. Se você compilar o Bottlerocket a partir de uma origem não modificada e redistribuir os resultados, poderá usar o nome “Bottlerocket” somente se estiver claro no nome da sua distribuição e no conteúdo associado que essa distribuição representa sua compilação do Bottlerocket da Amazon, e não a compilação oficial. Além disso, será necessário identificar o commit do qual ela foi compilada, incluindo a data de commit.

Como posso usar as marcas registradas Bottlerocket para fazer referência à minha própria versão do Bottlerocket da Amazon que adaptei para um orquestrador de contêineres diferente?

Se você modificar o Bottlerocket da Amazon para operar com um orquestrador de contêineres diferente, você pode usar “Bottlerocket Remix” para fazer referência à sua versão de acordo com as diretrizes de políticas. Se você tiver os direitos de usar as marcas registradas desse orquestrador de contêineres dessa maneira, poderá anexar o nome desse orquestrador de contêineres a “Bottlerocket Remix”.

Que alterações no SO preciso fazer em uma versão modificada do Bottlerocket para manter a compatibilidade com essa política?

Você deve modificar o arquivo os-release para usar seu nome “Bottlerocket Remix” ou para remover as marcas registradas do Bottlerocket. Para fazer isso, modifique packages/release/release.spec e tools/rpm2img. Nomes da raiz do sistema (/x86_64-bottlerocket-linux-gnu/sys-root), rótulos de partição, caminhos de diretório e descrições de arquivos de serviços não precisam ser alterados para manter a compatibilidade com essa política.