Compartilhar via


Projetos

Um projeto é uma coleção de recursos que definem configurações de nó. Os projetos contêm especificações. Quando um nó é iniciado, ele processa e executa uma sequência de especificações para configurar o nó.

O Azure CycleCloud usa projetos para gerenciar aplicativos clusterizados, como agendadores em lote. No cluster HPCPack do CycleCloud, o projeto usa as especificações hn e cn para definir as configurações e as receitas do nó de controle e do nó de computação do HPCPack.

Na seguinte definição de nó parcial, o nó docker-registry executa três especificações: a especificação bind do projeto Okta versão 1.3.0, e as especificações core e registry do projeto Docker versão 2.0.0.

[[node docker-registry]]
    Locker = base-storage
    [[[cluster-init okta:bind:1.3.0]]]
    [[[cluster-init docker:core:2.0.0]]]
    [[[cluster-init docker:registry:2.0.0]]]

A etiqueta final é o número da versão do projeto.

[[[cluster-init <project>:<spec>:<project version>]]]

Um locker é uma referência a um contêiner de conta de armazenamento e uma credencial. Os nós possuem um bloqueio padrão, então nem sempre é necessário especificar este atributo.

O Azure CycleCloud usa uma abreviação para contas de armazenamento. Por exemplo, você pode escrever https://mystorage.blob.core.windows.net/mycontainer como az://mystorage/mycontainer.

Se você definir um projeto em um nó, mas ele não existir no local de armazenamento esperado, o nó relatará um Software Installation Failure ao CycleCloud.

O CycleCloud tem projetos internos que são executados por padrão em todos os nós para realizar manipulações especiais de volumes e de rede e configurar a comunicação com o CycleCloud. O sistema espelha automaticamente esses projetos internos no cofre.

Você é responsável por espelhar projetos extras no locker. A CLI do CycleCloud oferece métodos para compor projetos:

cyclecloud project init myproject

E espelhar projetos em lockers:

cyclecloud project init mylocker

As especificações consistem em scripts python, shell ou PowerShell.

Criar um novo projeto

Para criar um novo projeto, use o comando cyclecloud project init myproject da CLI onde myproject está o nome do projeto que você deseja criar. myproject tem uma default especificação que você pode alterar. O comando cria a árvore de diretório com arquivos esqueleto que você atualiza com suas próprias informações.

Estrutura do diretório

O comando do projeto cria os seguintes diretórios:

      myproject
          ├── project.ini
          ├── blobs
          ├── templates
          ├── specs
          │   ├── default
          │     └── cluster-init
          │        ├── scripts
          │        ├── files
          │        └── tests

O diretório de modelos contém seus modelos de cluster, enquanto as especificações contêm as especificações que definem seu projeto. O diretório de especificações tem um subdiretório chamado cluster-init (mas consulte também Orquestração de Chef). O diretório cluster-init contém diretórios com significados especiais, incluindo o diretório de scripts (que contém scripts executados em ordem lexicográfica no nó), arquivos (que contém arquivos de dados brutos que vão no nó) e testes (que contém testes executados quando você inicia um cluster no modo de teste).

project.ini

project.ini é o arquivo que contém todos os metadados do projeto. Ele pode conter:

Parâmetro Descrição
nome Nome do projeto. Use traços para separar palavras, como order-66-2018.
etiqueta Nome do projeto. Use um nome de cluster longo com espaços para fins de exibição.
tipo Três opções: scheduler, applicationou <blank>. Esse parâmetro determina o tipo de projeto e gera o modelo apropriado. Padrão: application.
versão Formato: x.x.

Armários

O conteúdo do projeto é armazenado em um armário. Você pode carregar o conteúdo do seu projeto em qualquer armário definido na instalação do CycleCloud executando o comando cyclecloud project upload (locker), onde (locker) está o nome de um cofre de armazenamento em nuvem em sua instalação do CycleCloud. Esse armário é o alvo padrão. Como alternativa, você pode executar o comando cyclecloud locker list para ver quais armários estão disponíveis para você. Você pode exibir detalhes sobre um armário específico com cyclecloud locker show (locker).

Se você adicionar mais de um armário, poderá definir seu armário padrão com cyclecloud project default_target (locker)e, em seguida, executar cyclecloud project upload. Você também pode definir um cofre padrão global para projetos compartilharem executando o comando cyclecloud project default locker (locker) -global.

Observação

Os armários padrão são armazenados no arquivo de configuração do CycleCloud, localizado em ~/.cycle/config.ini e não no arquivo project.ini . Essa configuração permite o controle de versão para project.ini.

Quando você carrega o conteúdo do projeto, o CycleCloud sincroniza o conteúdo de inicialização do cluster com o cofre de destino, em projects/(project)/(version)/(spec_name)/cluster-init.

Download de blob

Use project download para baixar todos os blobs referenciados em project.ini para o diretório de blobs local. O comando usa o [locker] parâmetro e tenta baixar blobs listados em project.ini do cofre para o armazenamento local. Se o comando não conseguir localizar os arquivos, ele retornará um erro.

Instalação do projeto

Especificações

Ao criar um novo projeto, você define uma default especificação. Use o cyclecloud project add_spec comando para adicionar mais especificações ao seu projeto.

Controle de versão

Por padrão, todos os projetos usam a versão 1.0.0. Defina uma versão personalizada à medida que você desenvolve e implanta projetos definindo version=x.y.z no arquivo project.ini .

Por exemplo, se o locker_url for az://my-account/my-container/projects, o nome do projeto for "Order66", a versão for 1.6.9 e a especificação for default, a URL será:

az://my-account/my-container/projects/Order66/1.6.9/default

Blobs

Há dois tipos de blobs: blobs de projeto e blobs de usuário.

Projeto Blobs

Os autores do projeto fornecem blobs de projeto, que são arquivos binários que podem ser distribuídos (por exemplo, arquivos binários para um projeto de software livre que alguém pode redistribuir legalmente). Os blobs do projeto entram no diretório blobs e são localizados em /project/blobs quando você os carrega para um local de armazenamento.

Para adicionar blobs a projetos, adicione os arquivos ao seu project.ini:

[[blobs optionalname]]
  Files = projectblob1.tgz, projectblob2.tgz, projectblob3.tgz

Separe vários blobs com uma vírgula. Você também pode especificar o caminho relativo para o diretório de blob do projeto.

Blobs de usuário

Os blobs de usuário são arquivos binários, como binários do Univa Grid Engine, que o autor do projeto não pode redistribuir legalmente. Esses arquivos não são empacotados com o projeto. Os usuários devem preparar manualmente para o cofre. Os arquivos estão localizados em /blobs/my-project/ no armário (por exemplo, /blobs/my-project/my-blob.tgz). Você não precisa definir blobs de usuário no project.ini.

Para baixar qualquer blob, use o jetpack download comando. O CycleCloud procura o blob do usuário primeiro e usa o blob no nível do projeto se ele não consegue localizar o arquivo.

Observação

Um blob de usuário pode substituir um blob de projeto se tiver o mesmo nome.

Especificar projetos em um modelo de cluster

As especificações são definidas no modelo de cluster, usando a [[[cluster-init]]]seção em um nó:

[[node defaults]]
[[[cluster-init my-project:common:1.0.0]]]

[[node scheduler]]
[[[cluster-init my-project:scheduler:1.0.0]]]

[[nodearray execute]]
[[[cluster-init my-project:execute:1.0.0]]]

Este exemplo aproveita a definição do nó defaults da qual todos os nós herdam. O nó do agendador obtém as especificações common e scheduler, e os nós na matriz de nós de execução obtêm as especificações common e execute.

Locais de arquivos

O nó baixa os arquivos de cluster-init para /mnt/cluster-init/(project)/(spec)/. Para my-project e my-spec, seus scripts, arquivos e testes estão em /mnt/cluster-init/my-project/my-spec.

Sincronizar projetos

Você pode sincronizar projetos do CycleCloud de espelhos no armazenamento em nuvem local do cluster. Defina um SourceLocker atributo em uma [cluster-init] seção dentro do modelo. O nome do compartimento especificado é a origem do projeto, e o conteúdo é sincronizado ao seu compartimento quando o cluster é iniciado. Você também pode usar o nome do locker como a primeira parte do nome cluster-init. Por exemplo, se o cofre de origem for cyclecloud, as duas definições a seguir serão as mesmas:

[cluster-init my-project:my-spect:1.2.3]
  SourceLocker=cyclecloud

[cluster-init cyclecloud/my-proect:my-spec:1.2.3]

Armazenamento de arquivos grande

Os projetos dão suporte a arquivos grandes. No nível superior de um projeto recém-criado, você verá um blobs diretório para seus arquivos grandes (blobs). Os blobs que você coloca neste diretório servem a uma finalidade específica e agem de forma diferente dos itens dentro do files diretório.

Os itens dentro do blobs diretório agem independentemente de especificações e versões. Você pode compartilhar qualquer coisa em blobs entre especificações ou versões de projeto. Por exemplo, você pode armazenar um instalador para um programa que é alterado com pouca frequência em blobs e referenciá-lo em seu project.ini. À medida que você realiza iterações em diferentes versões do seu projeto, esse único arquivo permanece o mesmo e é copiado para o armazenamento em nuvem uma vez, o que economiza em custos de transferência e armazenamento.

Para adicionar um blob, coloque um arquivo no blobs diretório e edite seu project.ini para fazer referência a esse arquivo:

[blobs]
  Files=big_file1.tgz

Quando você usa o comando, ele transfere todos os blobs referenciados em project upload para o armazenamento em nuvem.

Arquivos de log

Os arquivos de log gerados ao executar cluster-init estão localizados em $JETPACK_HOME/logs/cluster-init/(project)/(spec).

Executar arquivos

Quando um script cluster-init é executado com êxito, ele coloca um arquivo em /mnt/cluster-init/.run/(project)/(spec) para garantir que o script não seja executado novamente em uma convergência subsequente. Para executar o script novamente, exclua o arquivo apropriado neste diretório.

Diretórios de script

Quando o CycleCloud executa scripts no diretório scripts, ele adiciona variáveis de ambiente ao caminho e ao nome dos diretórios spec e project.

CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH

No Linux, um projeto chamado test-project com uma especificação default tem os seguintes caminhos:

CYCLECLOUD_PROJECT_NAME = test-project
CYCLECLOUD_PROJECT_PATH = /mnt/cluster-init/test-project
CYCLECLOUD_SPEC_NAME = default
CYCLECLOUD_SPEC_PATH = /mnt/cluster-init/test-project/default

Executar somente scripts

Para executar somente scripts de cluster-init, use o seguinte comando:

jetpack converge --cluster-init

O comando envia sua saída para STDOUT e para jetpack.log. A saída de cada script também é registrada em:

      $JETPACK_HOME/logs/cluster-init/(project)/(spec)/scripts/(script.sh).out

baixar o jetpack

Para baixar um blob dentro de um script cluster-init, use o comando jetpack download (filename) para retirá-lo do blobs diretório. Executar esse comando de um script de cluster-init permite determinar o projeto e a URL base para você. Para usá-lo em um contexto não cluster-init, você precisa especificar o projeto. Para obter mais informações, use a opção --help .