Compartilhar via


Orquestração Chef

O Chef é uma ferramenta de gerenciamento de configuração que automatiza a implantação e o gerenciamento de aplicativos e infraestrutura. Ele usa uma DSL (linguagem específica do domínio) para escrever "receitas" de configuração do sistema. Essas receitas são armazenadas em "livros de receitas" que podem ser compartilhados e reutilizados em diferentes sistemas.

Cada especificação de cluster-init pode referenciar uma ou mais funções do Chef e/ou receitas de cookbook que precisam ser executadas na VM em inicialização.

Observação

O CycleCloud usa o Chef em um modo autônomo que não depende de um servidor Chef centralizado. O conjunto de livros de receitas do Chef necessários para preparar cada VM é baixado da Conta de Armazenamento do Azure junto com o restante dos arquivos no projeto.

Estrutura do Projeto

O diretório de especificações em um projeto também pode conter um subdiretório chef . Esse diretório contém três diretórios: site-cookbooks (para definições de guia), data_bags (definições de recipiente de dados) e roles (arquivos de definição de função do Chef):

      myproject
          ├── specs
          │   ├── default
          │     └── chef
          │         ├── site-cookbooks
          │         ├── data_bags
          │         └── roles

Listas de Execução do Chef

Você pode especificar um run_list no nível do projeto ou da especificação em seu project.ini:

[spec scheduler]
run_list = role[a], recipe[b]

Quando um nó inclui a especificação scheduler, o run_list que você define acrescenta automaticamente a qualquer run_list definido anteriormente. Por exemplo, se a run_list sob [configuration] for run_list = recipe[test], a run_list final será run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init].

Você também pode substituir run_list no nível de especificação em um nó. Essa substituição run_list remove qualquer run_list incluído no project.ini. Por exemplo, você pode alterar a definição do nó para a seguinte definição:

[cluster-init test-project:scheduler:1.0.0]
run_list = recipe[different-test]

Usar esse run_list faz com que o run_list definido no projeto seja ignorado. A run_list final no nó se torna run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init].

Chef personalizado e especificações componíveis

Cada especificação pode conter um diretório chef . Antes de convergir um nó, o processo cancela e extrai cada especificação no chef-reppo local, substituindo todos os guias, funções e data bags existentes por nomes correspondentes. O processo segue a ordem na qual você define as especificações, portanto, a última especificação definida vence se houver um conflito de nomenclatura.

Locais de arquivos

Quando você carrega o conteúdo do projeto, o CycleCloud compacta os três diretórios personalizados do Chef e os sincroniza com o seu armário de destino, em (locker)/projects/(project)/(version)/(spec_name)/chef.

O nó baixa os arquivos compactados do Chef durante a fase de inicialização da inicialização do nó de inicialização. O nó baixa os arquivos para $JETPACK_HOME/system/chef/tarballs*, descompactá-los para$JETPACK_HOME/system/chef/chef-repo/ e os usa para convergir o nó.

Observação

Para executar guias personalizados, você deve especificá-los no run_list do nó.

Provedor de recursos de download do Jetpack

O exemplo a seguir mostra como criar um jetpack_download provedor de recursos leve para usuários do Chef:

jetpack_download "big-file1.tgz" do
  project "my-project"
  end

No Chef, o local de download padrão é #{node[:jetpack][:downloads]}. Para alterar o destino do arquivo, use o seguinte código:

jetpack_download "foo.tgz" do
  project "my-project"
  dest "/tmp/download.tgz"
end

Ao usar o comando no Chef, você deve especificar o projeto.