Como instalar um Chef Server, estação de trabalho e cliente em instâncias Ubuntu VPS
Este guia é direcionado ao Chef 11. A plataforma Chef 12 apresenta algumas diferenças de configuração significativas. Você pode encontrar um guia sobre como configurar um servidor Chef 12, estação de trabalho e nó aqui.
Introdução
À medida que sua estrutura organizacional cresce e os componentes separados necessários para gerenciar seu ambiente se expandem, a administração de cada servidor e serviço pode se tornar incontrolável.
As soluções de gerenciamento de configuração são projetadas para simplificar o gerenciamento de sistemas e infraestrutura. O objetivo das ferramentas de gerenciamento de configuração é permitir que você gerencie sua infraestrutura como uma base de código. O Chef é uma solução de gerenciamento de configuração que permite gerenciar facilmente um grande número de servidores.
Em um guia anterior, discutimos a estrutura geral dos componentes do Chef e a maneira como o sistema opera em um nível conceitual. Examinamos algumas terminologias importantes e o relacionamento entre muitos componentes diferentes.
Neste guia, trabalharemos para instalar uma pequena configuração do Chef 11. Este será um servidor Chef usado para armazenar dados de configuração e administrar direitos de acesso. Isso servirá como um hub para nossas outras máquinas.
Também instalaremos uma estação de trabalho que nos permitirá interagir com nosso servidor e construir nossas políticas de configuração. É aqui que faremos o trabalho para gerenciar nosso ambiente de infraestrutura.
Por fim, vamos inicializar um nó, que representará um dos servidores da nossa organização que será gerenciado pelo Chef. Faremos isso usando o servidor e a estação de trabalho que configuramos.
Todas essas três máquinas usarão instâncias VPS Ubuntu 12.04 x86_64 para simplificar. Estaremos visando o lançamento do Chef 11, pois é estável e bem testado.
Instalação do Servidor
O primeiro componente que precisamos para ficar online é o servidor Chef. Como isso é fundamental para a comunicação de nossos outros componentes, ele precisa estar disponível para que nossas outras máquinas concluam sua configuração.
Antes de fazer isso, é importante configurar um nome de domínio para o seu servidor Chef para resolver as solicitações corretamente. Você pode ver nosso guia sobre como obter um nome de domínio configurado com a DigitalOcean aqui.
Se você não tiver um nome de domínio, será necessário editar o arquivo /etc/hosts
em cada uma das instâncias VPS que você usará, para que todas possam resolver o servidor Chef por nome . Se você tem um nome de domínio, isso só deve ser necessário no VPS que você usará como servidor do Chef. Você pode fazer isso digitando isso no VPS que você usará como servidor do Chef:
Dentro, adicione o endereço IP deste computador e, em seguida, o nome que você gostaria de usar para se conectar ao servidor. Você pode adicionar um nome curto depois disso. Algo assim:
Altere o 111.222.333.444
para o endereço IP do seu servidor Chef e altere os outros dois valores para o que você gostaria de usar para se referir ao seu servidor. Adicione esta linha para apontar para o servidor Chef para este arquivo em cada uma das máquinas que planeja usar se não estiver usando um nome de domínio.
Você pode verificar se está configurado corretamente digitando:
Isso deve fornecer o nome usado para acessar esse servidor.
Você pode obter o pacote do servidor chef visitando esta página em seu navegador da web.
Clique na guia \Chef Server e selecione os menus que correspondem ao seu sistema operacional:
Selecione a versão mais recente do servidor Chef 11 disponível para você no lado direito:
Você será presenteado com um link para um arquivo deb. Clique com o botão direito do mouse e selecione a opção semelhante a copiar local do link.
Na instância VPS que você usará como servidor, mude para o diretório inicial do usuário e use o utilitário wget
para baixar o arquivo deb. No momento da redação deste artigo, o link mais recente é este:
cd ~
wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chef-server_11.0.10-1.ubuntu.12.04_amd64.deb
Isso fará o download do pacote de instalação que você pode instalar assim:
sudo dpkg -i chef-server*
Isso instalará o componente do servidor nesta máquina.
Ele imprime na tela depois que você deve executar este próximo comando para realmente configurar o serviço em torno de sua máquina específica. Isso configurará tudo automaticamente:
sudo chef-server-ctl reconfigure
Depois que essa etapa for concluída, o servidor deverá estar funcionando. Você pode acessar a interface da web imediatamente digitando https://
seguido do nome de domínio ou endereço IP do seu servidor.
Como os certificados SSL foram assinados por uma autoridade que seu navegador não reconhece por padrão, você verá uma mensagem de aviso:
Clique no botão \Prosseguir mesmo assim para ignorar esta tela e acessar a tela de login. Será mais ou menos assim:
As credenciais de login padrão são as seguintes:
Ao fazer login pela primeira vez, você será imediatamente solicitado a alterar sua senha. Selecione uma nova senha e clique no botão \Salvar usuário na parte inferior:
Agora você configurou o servidor para um ponto onde podemos deixá-lo e começar a configuração da nossa estação de trabalho.
Instalação da estação de trabalho
Nosso computador de estação de trabalho é o VPS que usaremos para criar e editar as políticas reais que ditam nossos ambientes de infraestrutura. Esta máquina tem uma cópia do repositório Chef que descreve nossas máquinas e serviços e os carrega no servidor Chef para implementação.
Começaremos simplesmente instalando git
para controle de versão:
sudo apt-get update
sudo apt-get install git
Na verdade, isso tem dois propósitos. O uso óbvio é que manteremos nossa configuração sob controle de versão para rastrear alterações. O segundo objetivo é armazenar temporariamente nossa senha com sudo para que o comando a seguir funcione.
Agora vamos baixar e executar o script de instalação do cliente no site do Chef. Digite este comando para concluir todas estas etapas:
curl -L https://www.opscode.com/chef/install.sh | sudo bash
Nosso componente da estação de trabalho Chef agora está instalado. No entanto, está muito longe de ser configurado.
A próxima etapa é adquirir a estrutura de diretório \chef-repo para um repositório do Chef formatado corretamente no GitHub. Podemos clonar a estrutura em nosso diretório inicial digitando:
cd ~
git clone https://github.com/opscode/chef-repo.git
Isso criará um diretório chamado chef-repo
em seu diretório pessoal. É aqui que toda a configuração da sua configuração estará contida.
Criaremos um diretório de configuração para as próprias ferramentas do Chef dentro deste diretório:
mkdir -p ~/chef-repo/.chef
Dentro deste diretório, precisaremos colocar alguns dos arquivos de autenticação do nosso servidor Chef. Especificamente, precisamos de duas chaves privadas.
Gerando e copiando chaves do servidor
Volte para o servidor do Chef em seu navegador:
Faça login usando as credenciais do usuário admin
que você alterou anteriormente.
Clique na guia \Clientes na barra de navegação superior. Você verá dois clientes chamados chef-validator e chef-webui:
Clique no botão \Editar associado ao cliente chef-validator
. Gere novamente a chave privada selecionando essa caixa e clicando em \Salvar cliente:
Você verá uma tela com os valores recém-gerados para o arquivo de chave.
Nota: Esta chave estará disponível apenas uma vez, então não clique fora desta página! Se o fizer, você precisará regenerar a chave novamente.
Copie o valor do campo de chave privada (o da parte inferior).
Na máquina da estação de trabalho, mude para o diretório de configuração do Chef que criamos no repositório:
cd ~/chef-repo/.chef
Abra um novo arquivo para a chave do validador que acabamos de criar:
nano chef-validator.pem
Neste arquivo, cole o conteúdo da chave que você copiou da interface web do servidor (algumas linhas foram removidas para brevidade aqui):
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA6Np8f3J3M4NkA4J+r144P4z27B7O0htfXmPOjvQa2avkzWwx
oP28SjUkU/pZD5jTWxsIlRjXgDNdtLwtHYABT+9Q5xiTQ37s+eeJgykQIifED23C
aDi1cFXOp/ysBXaGwjvl5ZBCZkQGRG4NIuL7taPMsVTqM41MRgbAcLCdl5g7Vkri
. . .
. . .
xGjoTVH1vBAJ7BG1RHJZlx+T9QnrK+fQu5R9mikkLHayxi13mD0C
-----END RSA PRIVATE KEY-----
Certifique-se de que não haja linhas em branco extras acima ou abaixo da chave. Salve e feche o arquivo.
Seguiremos o mesmo procedimento para gerar novamente e salvar o arquivo de chave do usuário administrador. Desta vez, a chave é para um usuário, então clique na guia \Usuários na parte superior.
Novamente, clique no botão \Editar associado ao usuário administrador, marque a caixa \Regenerar chave privada e clique no botão \Salvar usuário:
Copie o valor da chave privada na próxima tela. Mais uma vez, isso não será mostrado novamente, então copie-o corretamente na primeira vez.
De volta ao computador da estação de trabalho, você precisará criar outro arquivo para o usuário administrador no mesmo diretório:
nano admin.pem
Cole o conteúdo da chave que você copiou da interface do servidor (novamente, isso é abreviado):
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA/apu0+F5bkVtX6qGYcfoA6sIW/aLFUEc3Bw7ltb50GoZnUPj
0Ms1N1Rv/pdVZXeBa8KsqICAhAzvwSr0H9j+AoURidbkLv4urVC9VS4dZyIRfwvq
PGvAKop9bbY2WJMs23SiEkurEDyfKaqXKW687taJ9AKbH2yVx0ArPI2RwS3Sze3g
. . .
. . .
VTkNpg3lLRSGbQkvRUP6Kt20erS2bfETTtH6ok/zW4db8B/vnBlcZg==
-----END RSA PRIVATE KEY-----
Verifique se não há linhas extras acima ou abaixo das linhas-chave coladas. Salve e feche o arquivo.
Configurar o Comando Faca
Agora temos que configurar o comando knife
. Este comando é a forma central de comunicação com nosso servidor e os nós que iremos configurar. Precisamos dizer a ele como autenticar e, em seguida, gerar um usuário para acessar o servidor Chef.
Felizmente, estamos preparando o terreno para esta etapa adquirindo os arquivos de credenciais apropriados. Podemos iniciar a configuração digitando:
knife configure --initial
Isso fará uma série de perguntas. Vamos passar por eles um por um:
Os valores entre colchetes ([]) são os valores padrão que a faca usará se não selecionarmos um valor.
Queremos colocar nosso arquivo de configuração de faca no diretório oculto que estamos usando:
Na próxima pergunta, digite o nome de domínio ou endereço IP que você usa para acessar o servidor Chef. Isso deve começar com https://
e terminar com :443
:
Ser-lhe-á pedido um nome para o novo utilizador que irá criar. Escolha algo descritivo:
Em seguida, ele solicitará o nome do administrador. Você pode simplesmente pressionar enter para aceitar o valor padrão (não alteramos o nome do administrador).
Em seguida, ele solicitará a localização da chave de administrador existente. Isso deve ser:
Ele fará um conjunto semelhante de perguntas sobre o validador. Também não alteramos o nome do validador, então podemos mantê-lo como chef-validator
. Pressione enter para aceitar este valor.
Em seguida, ele solicitará a localização da chave de validação. Deve ser algo assim:
Em seguida, ele solicitará o caminho para o repositório. Esta é a pasta chef-repo
em que operamos:
Por fim, ele solicitará que você selecione uma senha para seu novo usuário. Selecione qualquer coisa que você gostaria.
Isso deve completar nossa configuração de faca. Se olharmos em nosso diretório chef-repo/.chef
, veremos um arquivo de configuração de faca e as credenciais de nosso novo usuário:
ls ~/chef-repo/.chef
admin.pem chef-validator.pem knife.rb station1.pem
Limpando e testando a estação de trabalho
Nossa configuração para nossa estação de trabalho está quase completa. Precisamos fazer algumas coisas para limpar e verificar se nossas conexões funcionam.
Primeiro, devemos colocar nosso repositório do Chef sob controle de versão. Como a configuração do Chef funciona como código-fonte, podemos tratá-la da mesma forma que faríamos com os arquivos de qualquer programa.
Primeiro, precisamos inicializar nosso nome git e e-mail. Tipo:
Como nossa estrutura de diretório \chef-repo foi extraída diretamente do GitHub, ela já está sob controle de versão do git.
No entanto, não queremos incluir o diretório chef-repo/.chef neste controle de versão. Ele contém nossas chaves privadas e o arquivo de configuração da faca. Eles não têm nada a ver com nossa infraestrutura que queremos projetar.
Adicione este diretório à lista de ignorados abrindo o arquivo .gitignore
:
nano ~/chef-repo/.gitignore
No final do arquivo, digite .chef
para incluir o diretório inteiro:
.chef/*.pem
Salve e feche o arquivo.
Agora, podemos confirmar nosso estado atual (que provavelmente não terá nenhuma alteração além do arquivo .gitignore
que acabamos de modificar) digitando:
git add .
git commit -m 'Finish configuring station1'
Também queremos garantir que nosso usuário use a versão do Ruby empacotada com nossa instalação do Chef. Caso contrário, as chamadas feitas pelo Chef podem ser interpretadas pela instalação do Ruby do sistema, que pode ser incompatível com o restante de nossas ferramentas.
Podemos apenas modificar nosso caminho adicionando uma linha ao final de nosso arquivo .bash_profile
.
Digite isso para adicionar a linha:
echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bash_profile
Agora, podemos implementar essas alterações em nosso ambiente atual digitando:
source ~/.bash_profile
Podemos testar se podemos nos conectar com sucesso ao servidor Chef solicitando algumas informações do servidor usando o comando knife.
Isso retornará uma lista de todos os nossos usuários:
knife user list
admin
station1
Se isso for bem-sucedido, nossa estação de trabalho poderá se comunicar com sucesso com nosso servidor.
Inicializando um nó cliente
Agora que temos o servidor Chef e uma estação de trabalho online, podemos tentar inicializar um cliente Chef em um nó de amostra. Usaremos outra instância do Ubuntu.
O processo de inicialização envolve a configuração do cliente Chef em um nó. Chef client é um software que se comunica com o servidor para receber instruções para sua própria configuração. O cliente então traz o nó no qual está instalado em linha com a política dada a ele pelo servidor.
Este processo simplesmente configurará nossa nova instância VPS para estar sob a égide de nosso sistema de gerenciamento Chef. Podemos então configurá-lo como quisermos, criando políticas em nossa estação de trabalho e enviando-as para nosso servidor.
Para completar este processo, só precisamos saber três informações sobre o VPS no qual queremos instalar o software cliente:
- Endereço IP ou nome de domínio
- Nome de usuário (acessível por SSH e com privilégios sudo)
- Senha
Com essas informações, podemos instalar os pacotes apropriados usando nossa ferramenta de faca em nossa estação de trabalho.
Você deseja digitar um comando parecido com este:
Vamos decompor isso um pouco. O nome de domínio/endereço IP informa a faca a qual servidor se conectar. O nome de usuário e a senha fornecem as credenciais de login.
Se o usuário que você está usando não for root, a opção --sudo
será necessária para que o processo de inicialização instale o software com êxito no computador remoto. Ele solicitará a senha assim que você fizer login para usar o comando sudo.
O nome do nó é um nome que você seleciona e é usado internamente pelo Chef. É assim que você se referirá a esta máquina ao elaborar políticas e usar faca.
Após a execução do comando, o software cliente será instalado no nó remoto. Ele será configurado para se comunicar com o servidor Chef para receber instruções.
Podemos consultar nossa lista de clientes digitando:
knife client list
chef-validator
chef-webui
client1
Podemos ver os dois clientes que são configurados por padrão durante a instalação do servidor Chef (chef-validator e chef-webui), bem como o cliente que acabamos de criar.
Você pode facilmente configurar outros nós para colocá-los sob o controle de configuração do seu sistema Chef.
Conclusão
Agora você deve ter um servidor Chef, uma estação de trabalho separada para criar suas configurações e um nó de exemplo.
Não fizemos nenhuma configuração real do nó por meio do Chef neste momento, mas estamos configurados para iniciar esse processo. Em tutoriais futuros, discutiremos como implementar políticas e criar receitas e livros de receitas para gerenciar seus nós.