Partilhar 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 linguagem específica de domínio (DSL) 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 inicialização de cluster pode fazer referência a uma ou mais funções do Chef e/ou receitas de livros de receitas que precisam ser executadas na VM de 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 specs em um projeto também pode conter um subdiretório chef . Este diretório contém três diretórios: site-cookbooks (para definições de livros de receitas), data_bags (definições de saco de dados) e funções (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 dentro do seu project.ini:

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

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

Você também pode sobrescrever run_list na especificação de nó. Esta substituição run_list remove todos os run_list incluídos no project.ini. Por exemplo, 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]

O uso dessa run_list faz com que o run_list definido no projeto seja ignorado. A run_list final no nó fica definido como 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 descomprime e extrai cada especificação para o chef-repo local, substituindo quaisquer livros de receitas, funções e pacotes de dados 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 dos 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 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ó. O nó baixa os arquivos para $JETPACK_HOME/system/chef/tarballs*, descompacta-os para $JETPACK_HOME/system/chef/chef-repo/e os usa para convergir o nó.

Observação

Para executar livros de receitas personalizados, você deve adicioná-los ao run_list do nó.

Provedor de recursos de download Jetpack

O exemplo a seguir mostra como criar um provedor de jetpack_download 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.