Como instalar Chef Server, Workstation e Chef Client no Ubuntu 18.04
Chef é uma ferramenta de gerenciamento de configuração baseada em Ruby usada para definir infraestrutura como código. Isso permite que os usuários automatizem o gerenciamento de muitos nós e mantenham a consistência entre esses nós. As receitas declaram o estado desejado para nós gerenciados e são criadas na estação de trabalho de um usuário usando o pacote Chef Workstation. Suas receitas são distribuídas entre nós por meio de um servidor Chef. Um cliente Chef, instalado em cada nó, é responsável por aplicar a receita ao nó correspondente. Este guia mostrará como instalar e configurar um Chef Server e Chef Workstation. Também inicializaremos um nó para gerenciar com o Chef.
Neste tutorial você aprenderá:
Instalar e configurar o Chef Server
Criar usuário e organização do Chef
Instalar e configurar a estação de trabalho Chef
-
Configurar o Knife e inicializar um nó cliente
Arquitetura do Chef.
Instalar e configurar o Chef Server
O servidor Chef é o centro de interação entre todas as estações de trabalho e nós sob gerenciamento do Chef. As alterações feitas no código de configuração nas estações de trabalho são enviadas para o servidor Chef e, em seguida, extraídas pelo chef-cliente de um nó para aplicar as configurações.
Baixe o servidor Chef mais recente executando o comando abaixo:
# wget https://packages.chef.io/files/stable/chef-server/12.18.14/ubuntu/18.04/chef-server-core_12.18.14-1_amd64.deb
Agora instale o pacote do servidor com o seguinte comando:
# dpkg -i chef-server-core_*.deb
O servidor Chef inclui um utilitário de linha de comando chamado chef-server-ctl. Execute chef-server-ctl para iniciar os serviços do servidor Chef.
# chef-server-ctl reconfigure
Após a configuração bem-sucedida do servidor chef, você verá a mensagem abaixo e também verificará o status de execução do servidor chef.
Chef Client finished, 493/1100 resources updated in 12 minutes 02 seconds
Chef Server Reconfigured!
root@ubuntubox1:~# chef-server-ctl status
run: bookshelf: (pid 1435) 6644s; run: log: (pid 1440) 6644s
run: nginx: (pid 1235) 6653s; run: log: (pid 1744) 6631s
run: oc_bifrost: (pid 1196) 6657s; run: log: (pid 1203) 6657s
run: oc_id: (pid 1220) 6655s; run: log: (pid 1227) 6655s
run: opscode-erchef: (pid 4376) 6432s; run: log: (pid 1508) 6644s
run: opscode-expander: (pid 1335) 6648s; run: log: (pid 1431) 6646s
run: opscode-solr4: (pid 1244) 6650s; run: log: (pid 1285) 6649s
run: postgresql: (pid 1176) 6659s; run: log: (pid 1180) 6659s
run: rabbitmq: (pid 4188) 6443s; run: log: (pid 1748) 6631s
run: redis_lb: (pid 27397) 6931s; run: log: (pid 1735) 6632s
root@ubuntubox1:~#
Criar usuário e organização do Chef
Para vincular estações de trabalho e nós ao servidor Chef, crie um administrador e uma organização com chaves privadas RSA associadas. No diretório inicial, crie um diretório .chef para armazenar as chaves.
# mkdir .chef
Use chef-server-ctl para criar um usuário. Neste exemplo, altere o seguinte para atender às suas necessidades: USER_NAME, FIRST_NAME, LAST_NAME, EMAIL e PASSWORD. Ajuste USER_NAME.pem e deixe a extensão .pem.
chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' --filename ~/.chef/USER_NAME.pem
root@ubuntubox1:~# chef-server-ctl user-create chefadmin Chef Administrator chefadmin@@ubuntubox1.com '*******' --filename ~/.chef/chefadmin.pem
Para visualizar a lista de todos os usuários em seu servidor Chef, emita o seguinte comando:
root@ubuntubox1:~# chef-server-ctl user-list
chefadmin
pivotal
Crie uma organização e adicione o usuário criado na etapa anterior. Substitua ORG_NAME por um identificador curto para a organização, ORG_FULL_NAME pelo nome completo da organização, USER_NAME pelo nome de usuário criado na etapa acima e ORG_NAME.pem pelo identificador curto da organização seguido de .pem.
chef-server-ctl org-create ORG_NAME "ORG_FULL_NAME" --association_user USER_NAME --filename ~/.chef/ORG_NAME.pem
root@ubuntubox1:~# chef-server-ctl org-create chef-on-ubuntu "Chef Infrastructure on Ubuntu 18.04" --association_user chefadmin --filename ~/.chef/chef-on-ubuntu.pem
Para visualizar a lista de todas as organizações em seu servidor Chef, use o seguinte comando:
root@ubuntubox1:~# chef-server-ctl org-list
chef-on-ubuntu
Com o servidor Chef instalado e as chaves RSA geradas, começaremos a configurar a estação de trabalho do Chef. A estação de trabalho é onde todas as configurações principais serão criadas para seus nós.
Instalar e configurar a estação de trabalho Chef
A estação de trabalho do Chef é onde você cria e configura quaisquer receitas, livros de receitas, atributos e outras alterações necessárias para gerenciar seus nós. Embora possa ser uma máquina local executando qualquer sistema operacional, há alguns benefícios em manter um servidor remoto como sua estação de trabalho para que você possa acessá-lo de qualquer lugar.
Nesta seção, você baixará e instalará o pacote Chef Workstation, que fornece todas as ferramentas também incluídas no ChefDK, kit de desenvolvimento do Chef.
Baixe a última estação de trabalho do Chef:
root@ubuntubox2:~# wget https://packages.chef.io/files/stable/chef-workstation/0.2.43/ubuntu/18.04/chef-workstation_0.2.43-1_amd64.deb
--2019-06-03 13:35:51-- https://packages.chef.io/files/stable/chef-workstation/0.2.43/ubuntu/18.04/chef-workstation_0.2.43-1_amd64.deb
Resolving packages.chef.io (packages.chef.io)... 151.101.142.110
Connecting to packages.chef.io (packages.chef.io)|151.101.142.110|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 129713682 (124M) [application/x-debian-package]
Saving to: ‘chef-workstation_0.2.43-1_amd64.deb’
chef-workstation_0.2.43-1_amd64.deb 100%[=====================================================================================>] 123.70M 1.51MB/s in 80s
2019-06-03 13:37:17 (1.55 MB/s) - ‘chef-workstation_0.2.43-1_amd64.deb’ saved [129713682/129713682]
Instale a estação de trabalho do Chef:
root@ubuntubox2:~# dpkg -i chef-workstation_*.deb
Selecting previously unselected package chef-workstation.
(Reading database ... 117468 files and directories currently installed.)
Preparing to unpack chef-workstation_0.2.43-1_amd64.deb ...
Unpacking chef-workstation (0.2.43-1) ...
Setting up chef-workstation (0.2.43-1) ...
To run the experimental Chef Workstation App, use your
platform's package manager to install these dependencies:
libgconf-2.so.4 => not found
You can then launch the App by running 'chef-workstation-app'.
The App will then be available in the system tray.
Thank you for installing Chef Workstation!
You can find some tips on getting started at https://chef.sh/
Agora precisamos criar o repositório Chef. O diretório chef-repo armazenará seus livros de receitas do Chef e outros arquivos relacionados.
# chef generate repo chef-repo
Crie um subdiretório .chef. O subdiretório .chef armazenará o arquivo de configuração do Knife e os arquivos .pem que são usados para autenticação de par de chaves RSA com o servidor Chef. Vá para o diretório chef-repo:
root@ubuntubox2:~# mkdir ~/chef-repo/.chef
root@ubuntubox2:~# cd chef-repo
root@ubuntubox2:~/chef-repo#
A autenticação entre o servidor Chef e a estação de trabalho e/ou nós é concluída com criptografia de chave pública. Isso garante que o servidor Chef se comunique apenas com máquinas confiáveis. Nesta seção, as chaves privadas RSA, geradas durante a configuração do servidor Chef, serão copiadas para a estação de trabalho para permitir a comunicação entre o servidor Chef e a estação de trabalho.
Geraremos um par de chaves RSA no servidor da estação de trabalho. Este par de chaves será usado para obter acesso ao servidor Chef e então transferir seus arquivos .pem:
root@ubuntubox2:~# ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:sR+Nloq6vsc7rX4ZmMInP3SKdk4fYEJH1iLoKNm1YMg root@ubuntubox2.com
The key's randomart image is:
+---[RSA 4096]----+
|.. . o. |
|.E+ oo. . |
| * o.o... |
|+ o... o + |
|. .. ooS = . |
| +o=oo+ . |
| Oo+oo. |
| ooO.+. |
| o=B=*. |
+----[SHA256]-----+
root@ubuntubox2:~#
Faça upload da chave pública do nó da estação de trabalho para o nó do servidor Chef.
root@ubuntubox2:~# ssh-copy-id root@ubuntubox1.com
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@ubuntubox1.com's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@ubuntubox1.com'"
and check to make sure that only the key(s) you wanted were added.
root@ubuntubox2:~#
Copie os arquivos .pem do servidor Chef para a estação de trabalho usando o comando scp.
root@ubuntubox2:~# scp root@ubuntubox1.com:~/.chef/*.pem ~/chef-repo/.chef/
chefadmin.pem 100% 1674 27.9KB/s 00:00
chef-on-ubuntu.pem 100% 1674 496.8KB/s 00:00
Confirme se os arquivos foram copiados com sucesso listando o conteúdo do diretório .chef. Os arquivos .pem devem estar listados.
root@ubuntubox2:~# ls ~/chef-repo/.chef
chefadmin.pem chef-on-ubuntu.pem
Gere um novo livro de receitas do Chef:
root@ubuntubox2:~# chef generate cookbook chef-first-cookbook
Hyphens are discouraged in cookbook names as they may cause problems with custom resources. See https://docs.chef.io/ctl_chef.html#chef-generate-cookbook for more information.
Generating cookbook chef-first-cookbook
- Ensuring correct cookbook file content
- Ensuring delivery configuration
- Ensuring correct delivery build cookbook content
Your cookbook is ready. Type `cd chef-first-cookbook` to enter it.
There are several commands you can run to get started locally developing and testing your cookbook.
Type `delivery local --help` to see a full list.
Why not start by writing a test? Tests for the default recipe are stored at:
test/integration/default/default_test.rb
If you'd prefer to dive right in, the default recipe can be found at:
recipes/default.rb
Gere o chef-repo e vá para o diretório recém-criado:
# chef generate app chef-repo
# cd chef-repo
Configurar o Knife e inicializar um nó cliente
Crie um arquivo de configuração do Knife navegando até o diretório ~/chef-repo/.chef e criando um arquivo chamado config.rb usando seu editor de texto preferido.
Copie a seguinte configuração no arquivo config.rb:
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
node_name 'node_name'
client_key "USER.pem"
validation_client_name 'ORG_NAME-validator'
validation_key "ORGANIZATION-validator.pem"
chef_server_url 'https://ubuntubox1.com/organizations/ORG_NAME'
cache_type 'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path ["#{current_dir}/../cookbooks"]
O valor para node_name deve ser o nome de usuário criado no servidor Chef. Altere USER.pem em client_key para refletir o arquivo .pem para o usuário chef. O validação_client_name deve ser o ORG_NAME da organização seguido por -validator. ORGANIZATION-validator.pem no caminho validação_key deve ser definido como ORG_NAME seguido por -validator.pem. Finalmente, chef_server_url deve ser o domínio do servidor Chef com /organizations/ORG_NAME anexado. Certifique-se de substituir ORG_NAME pelo nome da organização.
Vá para o diretório chef-repo e copie os certificados SSL necessários do servidor:
root@ubuntubox2:~/chef-repo/.chef# cd ..
root@ubuntubox2:~/chef-repo# knife ssl fetch
WARNING: Certificates from ubuntubox1.com will be fetched and placed in your trusted_cert
directory (/root/chef-repo/.chef/trusted_certs).
Knife has no means to verify these are the correct certificates. You should
verify the authenticity of these certificates after downloading.
Adding certificate for ubuntubox1_com in /root/chef-repo/.chef/trusted_certs/ubuntubox1_com.crt
Confirme se o config.rb está configurado corretamente executando a lista de clientes. Este comando deve gerar o nome do validador.
root@ubuntubox2:~/chef-repo# knife client list
chef-on-ubuntu-validator
A inicialização de um nó instala o cliente Chef no nó e valida o nó. Isso permite que o nó leia o servidor Chef e baixe e aplique quaisquer atualizações de configuração necessárias detectadas pelo chef-client. Na estação de trabalho, navegue até o diretório ~/chef-repo/.chef:
# cd ~/chef-repo/.chef
Inicialize o nó cliente usando o usuário root do nó cliente ou um usuário com privilégios elevados:
root@ubuntubox2:~/chef-repo/.chef# knife bootstrap ubuntubox3.com -x root -P ******* --node-name chef-client-node
Creating new client for chef-client-node
Creating new node for chef-client-node
Connecting to ubuntubox3.com
ubuntubox3.com -----> Installing Chef Omnibus (-v 14)
ubuntubox3.com downloading https://omnitruck-direct.chef.io/chef/install.sh
ubuntubox3.com to file /tmp/install.sh.2019/install.sh
ubuntubox3.com trying wget...
ubuntubox3.com ubuntu 18.04 x86_64
ubuntubox3.com Getting information for chef stable 14 for ubuntu...
ubuntubox3.com downloading https://omnitruck-direct.chef.io/stable/chef/metadata?v=14&p=ubuntu&pv=18.04&m=x86_64
ubuntubox3.com to file /tmp/install.sh.2023/metadata.txt
ubuntubox3.com trying wget...
ubuntubox3.com sha1 ed9b1fcdaf947d9a3d60e6d196308183a082bcff
ubuntubox3.com sha256 9ddcd5ceef19c95ecc1f34bef080c23d9cb42ae8ebc69fd41dcf1c768a6a708f
ubuntubox3.com url https://packages.chef.io/files/stable/chef/14.13.11/ubuntu/18.04/chef_14.13.11-1_amd64.deb
ubuntubox3.com version 14.13.11
ubuntubox3.com downloaded metadata file looks valid...
ubuntubox3.com downloading https://packages.chef.io/files/stable/chef/14.13.11/ubuntu/18.04/chef_14.13.11-1_amd64.deb
ubuntubox3.com to file /tmp/install.sh.2023/chef_14.13.11-1_amd64.deb
ubuntubox3.com trying wget...
ubuntubox3.com Comparing checksum with sha256sum...
ubuntubox3.com Installing chef 14
ubuntubox3.com installing with dpkg...
ubuntubox3.com Selecting previously unselected package chef.
(Reading database ... 117468 files and directories currently installed.)
ubuntubox3.com Preparing to unpack .../chef_14.13.11-1_amd64.deb ...
ubuntubox3.com Unpacking chef (14.13.11-1) ...
ubuntubox3.com Setting up chef (14.13.11-1) ...
ubuntubox3.com Thank you for installing Chef Infra Client! For help getting started visit https://learn.chef.io
ubuntubox3.com Starting the first Chef Client run...
ubuntubox3.com Starting Chef Client, version 14.13.11
ubuntubox3.com resolving cookbooks for run list: []
ubuntubox3.com Synchronizing Cookbooks:
ubuntubox3.com Installing Cookbook Gems:
ubuntubox3.com Compiling Cookbooks...
ubuntubox3.com [2019-06-03T14:01:44+04:00] WARN: Node chef-client-node has an empty run list.
ubuntubox3.com Converging 0 resources
ubuntubox3.com
ubuntubox3.com Running handlers:
ubuntubox3.com Running handlers complete
ubuntubox3.com Chef Client finished, 0/0 resources updated in 05 seconds
Confirm that the node has been bootstrapped by listing the client nodes:
root@ubuntubox2:~/chef-repo/.chef#
Confirme se o nó foi inicializado com sucesso listando os nós:
root@ubuntubox2:~/chef-repo/.chef# knife node list
chef-client-node
root@ubuntubox2:~/chef-repo/.chef# knife node show chef-client-node
Node Name: chef-client-node
Environment: _default
FQDN: ubuntubox3.com
IP: 192.168.1.107
Run List:
Roles:
Recipes:
Platform: ubuntu 18.04
Tags:
Conclusão
Neste artigo detalhado, aprendemos sobre a ferramenta Chef Configuration Management com seu entendimento básico e visão geral de seus componentes com definições de instalação e configuração. Você pode aprender mais sobre o Chef visitando o site do Chef, ou seja, https://www.chef.io/