Imagine que você gerenciará vários servidores com vários serviços diferentes usados por várias pessoas. Agora diga que deseja reconfigurar ou substituir algum software em um desses servidores. Obviamente, você não deseja trabalhar em servidores que estão em produção.
Se fosse uma alteração de código, como desenvolvedor, eu faria a alteração em minha máquina de desenvolvimento local, testaria localmente e confirmaria a alteração em um sistema de controle de versão. As mudanças poderiam ser implementadas em um ambiente de teste, testadas posteriormente e finalmente implantadas em um ambiente de produção. Também seria fácil reverter, se necessário.
Geralmente, ou especificamente, como você consegue isso na administração do sistema?
(A primeira coisa que vem à mente é usar máquinas virtuais e colocar imagens de máquinas virtuais no controle de versão, mas tenho certeza de que há muita literatura e soluções inteligentes das quais atualmente não estou ciente.)
Respostas:
A resposta curta é "Gerenciamento de implantação de SO", "Gerenciamento de configuração" e "Empacotamento de software". A resposta longa segue.
Eu gostaria de acrescentar à resposta de Daniel Pittman com uma análise do que forma um "sistema" na administração de sistemas.
Um sistema ou ambiente será composto por:
Envolver estes serão processos como:
E você gostaria que eles se combinassem para ajudá-lo a alcançar objetivos não funcionais, como:
Este é um despejo rápido do cérebro. Estou certo de que mais poderia ser adicionado a todas as listas.
Sua pergunta aborda várias delas sem usar as palavras específicas. Por exemplo, você deseja poder implantar facilmente e reverter, ou seja, deseja manutenção; você deseja fazer isso em um ambiente de teste e testar até que ele passe, ou seja, repetibilidade, testabilidade e mensurabilidade; você está pensando em colocar imagens vm no controle de versão, porque gostaria de repetir as implantações de sistema operacional e configuração.
Existem muitas ferramentas para ajudá-lo com isso, algumas delas mencionadas por Daniel. Alguns outros são:
Novamente, essa não é uma lista abrangente, mas algo que guardo na minha cabeça para me guiar e espero que também o ajude.
fonte
Disclaimer: Eu sou um dos desenvolvedores do Puppet.
A maneira óbvia é apenas aplicar os conceitos: definir um ciclo de desenvolvimento / teste / produção e promover mudanças através deles. Use o controle de versão para rastrear sistemas.
Em pouco tempo, iniciar esse caminho leva a descobrir que você realmente deseja ferramentas que automatizem essas coisas - essencialmente, que você deseja automatizar a administração de sistemas, para que você não use essas técnicas em máquinas, use-as no sistema que gerencia as máquinas.
Ferramentas como Chef , Puppet , Salt e CFEngine são ferramentas populares para atender a essa segunda necessidade. Eles trabalham na direção geral de transformar a administração de sistemas em uma solução central que você pode controlar e testar a versão.
O movimento DevOps é outra fonte de boas informações sobre como fazer isso. Embora o preceito seja uma melhor cooperação entre os desenvolvedores e a equipe de operações, ele também segue a mesma direção.
fonte
No mundo Windows, esses problemas relacionados ao gerenciamento do ciclo de vida dos aplicativos estão sendo tratados com o System Center 2012.
No System Center Virtual Machine Manager (SCVMM), os serviços são definidos usando 'Modelos de Serviço' (por exemplo, um serviço clássico de três camadas) e os ambientes de execução são definidos como 'Nuvens' (por exemplo, desenvolvimento, preparação, produção). Os modelos de serviço podem ser versionados e implementados (de maneira automatizada) para diferentes nuvens. Nos bastidores, o SCVMM faz o trabalho para provisionar, implantar e configurar o hardware virtualizado (VMs etc.) e software (SO, componentes de aplicativos etc.).
O System Center Service Manager é a peça que une isso do ponto de vista do processo. Por exemplo, o gerenciamento de problemas e o controle de alterações.
fonte