Provavelmente, essa é uma pergunta simples para aqueles que já executam ferramentas de gerenciamento de configuração. As ferramentas de gerenciamento de configuração, como Puppet ou Chef, são a abordagem correta para manter os pacotes instalados atualizados?
Suponha que eu execute vários servidores, principalmente baseados no Debian e Ubuntu. As ferramentas de gerenciamento de configuração facilitam a atualização dos pacotes instalados nos repositórios quando ocorrem atualizações de segurança ou correções de bugs?
Atualmente, eu executo "atualizações autônomas" para permitir que os sistemas instalem automaticamente as atualizações de segurança, mas ainda preciso conectar-me aos servidores e executar de aptitude update && aptitude safe-upgrade
vez em quando. Naturalmente, isso fica entediante, tedioso e propenso a erros, quanto mais servidores houver.
Ferramentas como Puppet ou Chef são a abordagem correta para manter os pacotes instalados atualizados? Algum de vocês usa essas ferramentas para evitar a execução manual aptitude
ou equivalente em 15 servidores? Tenho certeza de que a resposta para essas perguntas é "Sim, é claro!"
Mas onde posso encontrar mais informações sobre esse caso de uso específico? Ainda não tive tempo de estudar o Puppet ou o Chef em profundidade, e os exemplos de livros de receitas ou aulas mostram apenas exemplos mais ou menos triviais de instalação de um pacote específico, como o ssh. Você tem outros recursos para recomendar, além da documentação oficial (é claro, vou estudar os documentos depois que souber quais ferramentas, se houver alguma, são adequadas para mim).
Respostas:
O Puppet (eu tenho certeza que o chef também o faz) se vincula aos seus repositórios de software apt-get / yum . Como eles fazem o trabalho pesado de descobrir quais pacotes estão disponíveis, isso significa que
ensure => latest
apenas funciona para o Ubuntu / CentOS / Debian. Contanto que você configure os arquivos apropriados corretamente (/etc/apt/sources.list
, etc).fonte
unattended-upgrades
ouyum-cron
para automatizar as atualizações é muito menos trabalhoso - basta usar o Puppet / Chef / Ansible para configurar essas ferramentas.Você pode fazer isso com fantoches, ou:
ou
para especificar a versão mais recente / necessária. ie
Isso significa pelo menos que você pode especificar a mesma versão em todos os sistemas, além de impedir que os servidores se atualizem (potencialmente perigosamente) automaticamente. Eu usei esse método na produção em vários sites e funciona muito bem.
A execução de atualizações autônomas me assusta um pouco, especialmente se eles estão atualizando pacotes de missão crítica, kernels, bibliotecas mysql, apache, etc. Especialmente se o script de instalação desejar reiniciar o serviço!
fonte
ensure => latest
sempre garantirá que tudo esteja atualizado com o que o seu conjunto de repositórios fornecer.Eu acho que essa é provavelmente a pergunta errada. Certamente, usar ferramentas de gerenciamento de configuração como Puppet e Chef para manter sua infraestrutura é um grande passo à frente ao tentar fazer tudo manualmente. A questão de manter as versões do seu pacote atualizadas e sincronizadas não é uma solução que nenhuma dessas ferramentas resolva diretamente. Para automatizar isso corretamente, você precisa colocar os repositórios de pacotes sob seu controle.
A maneira como faço isso é manter um repositório Yum dedicado (para Redhat / Fedora / CentOS; um repositório APT para Debian / Ubuntu) que contém os pacotes de que me preocupo em um site específico. Geralmente, são as dependências do próprio aplicativo (Ruby, PHP, Apache, Nginx, bibliotecas e assim por diante) e pacotes críticos de segurança.
Depois de configurá-lo (geralmente você pode espelhar os pacotes necessários do repositório upstream para começar), você pode usar a sintaxe "garantir => mais recente" do Puppet para garantir que todas as suas máquinas estejam atualizadas com o repositório.
Seria bom usar um repositório de 'teste' para permitir que você testasse versões atualizadas dos pacotes antes de lançá-los alegremente para a produção. Isso é feito facilmente com o Puppet sem nenhuma duplicação de código usando modelos de repositório.
A automação da versão do pacote incentiva você a sincronizar todos os seus sistemas de produção, pois a manutenção de vários repositórios e pacotes para diferentes distribuições de SO, versões e arquiteturas de máquinas consome muito tempo e pode levar a todos os tipos de problemas e incompatibilidades obscuros.
Todo esse conselho se aplica igualmente a gemas Ruby, ovos Python e outros sistemas de pacotes que você pode usar.
Eu escrevi um pequeno tutorial do Puppet, que deve ajudá-lo a começar a usar o Puppet rapidamente. Você pode implantar uma definição de repo personalizada em suas máquinas usando o Puppet como a primeira etapa para controlar as versões dos pacotes.
fonte
Enquanto Puppet / Chef são possíveis candidatos para essa funcionalidade, para fazê-los manter tudo no sistema up-to-date requer ou tipos personalizados ou lista de cada pacote (incluindo bibliotecas de sistema subjacentes como libc6) como recursos com
ensure => latest
. Para o caso específico de atualizações automáticas de pacotes, você pode procurar nocron-apt
pacote, que faz o que você deseja também.fonte
Esta pergunta é antiga, mas pensei em responder de maneira atualizada, pois uma resposta existente no momento não estava disponível na época.
Se você estiver usando fantoches ou chef, consulte o mcollective. É uma ferramenta muito bacana do pessoal do puppetlabs que permite enviar comandos para grupos de servidores.http://docs.puppetlabs.com/mcollective/
Ele também possui um plugin apt, que pode ser usado para fazer uma atualização do apt em qualquer número de servidores: http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/AgentApt
fonte
Sei que isso é um pouco tarde para sua pergunta original, mas aqui está no espírito de "antes tarde do que nunca".
Eu uso o Cfengine 3 para fazer isso em vários servidores. Eu especifico uma lista explícita de pacotes para atualização automática, evitando a atualização de todos os pacotes sem ter um pouco de cuidado com isso. Funciona muito bem e o cfengine 3 é muito leve.
Aqui está um trecho de promessa da minha configuração cfengine:
Espero que isto ajude.
fonte
Eu concordo com o Jonathan. A abordagem do Cfengine 3 é boa porque você pode controlar todos os aspectos do gerenciamento de pacotes sem precisar recodificar em um nível baixo.
fonte
Usamos fantoche + apt-datador.
fonte
Você também pode usar ferramentas de gerenciamento de pacotes, como o Canonicals Landscape, projetado para gerenciar e monitorar sistemas Ubuntu / Debian. Ele gerencia vários sistemas, permite que você os atualize simultaneamente e fornece alguns recursos básicos de monitoramento.
fonte
Atualizações de segurança
Geralmente acho que é mais simples usar o Ansible ou semelhante para configurar o pacote robusto de atualizações autônomas para Ubuntu / Debian (ou
yum-cron
para RHEL / CentOS). Você pode usar o Puppet, Chef ou outras ferramentas, mas discutirei o Ansible aqui.unattended-upgrades
pode ser usado para fazer atualizações que não são de segurança ao mesmo tempo, se você preferir, o que é muito mais fácil do que executar um comando via Ansible todos os dias.unattended-upgrades
cuida das atualizações automáticas todos os dias e normalmente é restrito apenas às atualizações de segurança (para aumentar a estabilidade). Se o servidor precisar de uma reinicialização após a atualização, essa ferramenta poderá ser reinicializada automaticamente em um determinado momento.Se suas reinicializações forem mais complexas,
unattended upgrades
você poderá enviar um e-mail para você, além de criar/var/run/reboot-required
criado, para que o Ansible (ou similar) possa gerenciar as reinicializações em um momento adequado (por exemplo, a reinicialização contínua de um cluster de servidores da Web ou de banco de dados para evitar tempo de inatividade, aguardando cada servidor para ficar disponível em uma determinada porta TCP antes de continuar).Você pode usar funções Ansible, como jnv.unattended-upgrades para sistemas Ubuntu / Debian, ou o simples mas eficaz geerlingguy.security , que também abrange RHEL / CentOS (e reforça a configuração SSH).
Se as atualizações rápidas de segurança forem menos importantes, você poderá submetê-las a um processo de teste em servidores menos importantes primeiro e executar o
unattended-upgrade
comando assim que os testes mostrarem que não há problemas - no entanto, é muito raro que as correções de segurança orientadas ao servidor causem problemas. experiência.Atualizações gerais
Atualizações diferentes da segurança devem passar por um processo contínuo normal de integração e teste, para garantir que as coisas não quebrem.
Eu já vi
aptitude safe-upgrade
problemas sérios nos servidores, então é melhor não executá-lo automaticamente, enquanto as atualizações de segurança geralmente são bastante seguras.fonte