Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um projeto é um conjunto de recursos que define configurações de nós. 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 CycleCloud HPCPack, o projeto usa hn
e cn
especificações para definir as configurações e receitas para o nó cabeça e o 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 tag à direita é o número da versão do projeto:
[[[cluster-init <project>:<spec>:<project version>]]]
Um cofre é uma referência a um contêiner e credencial de uma conta de armazenamento. Os nós têm um bloqueio padrão, portanto, 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.
O nó usa a ferramenta pogo
para descarregar cada projeto ao qual faz referência a partir do repositório.
pogo get az://mystorage/mycontainer/projects/okta/1.3.0/bind
Se você definir um projeto em um nó, mas ele não existir no local de armazenamento esperado, o nó reportará um Software Installation Failure
para o CycleCloud.
O CycleCloud tem projetos internos que são executados por padrão em todos os nós para realizar o tratamento especial de volumes, configuração de rede e estabelecer comunicação com o CycleCloud. O sistema espelha automaticamente esses projetos internos no armário.
Você é responsável por espelhar quaisquer projetos extras no armário. A CLI do CycleCloud oferece métodos para compor projetos:
cyclecloud project init myproject
E, espelhar projetos para armários:
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
CLI onde myproject
é 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órios com arquivos esqueleto que você atualiza com suas próprias informações.
Estrutura do diretório
O comando project cria os seguintes diretórios:
\myproject
├── project.ini
├── blobs
├── templates
├── specs
│ ├── default
│ └── cluster-init
│ ├── scripts
│ ├── files
│ └── tests
│ └── chef
│ ├── site-cookbooks
│ ├── data_bag
│ └── roles
O diretório templates contém seus modelos de cluster, enquanto specs contém as especificações que definem seu projeto. O diretório de especificações tem dois subdiretórios: cluster-init e custom chef. O diretório cluster-init contém diretórios com significados especiais, incluindo o diretório scripts (contém scripts que são executados em ordem lexicográfica no nó), arquivos (contém arquivos de dados brutos que vão para o nó) e testes (contém testes que são executados quando você inicia um cluster no modo de teste).
O subdiretório personalizado do chef tem 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).
project.ini
_project.ini_
é o arquivo que contém todos os metadados para o seu projeto. 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 , application , ou <blank> . Este parâmetro determina o tipo de projeto e gera o modelo apropriado. Padrão: application . |
versão | Formato: x.x.x |
Cacifos
O conteúdo do projeto é armazenado dentro de um armário. Você pode carregar o conteúdo do seu projeto para qualquer armário definido em sua instalação do CycleCloud executando o comando cyclecloud project upload (locker)
, onde (locker)
é o nome de um armário de armazenamento em nuvem em sua instalação do CycleCloud. Este armário é o destino 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 visualizar detalhes sobre um armário específico com cyclecloud locker show (locker)
.
Se adicionar mais de um armário, pode definir o cofre predefinido com cyclecloud project default_target (locker)
, e em seguida, executar cyclecloud project upload
. Você também pode definir um armário padrão global para projetos a serem compartilhados 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, geralmente localizado em ~/.cycle/config.ini e não no arquivo project.ini . Esta configuração permite o controle de versão para project.ini.
Ao carregar o conteúdo do seu projeto, o CycleCloud compacta os três diretórios personalizados do Chef e sincroniza tanto o Chef personalizado quanto o cluster-init com o repositório de destino. Esses arquivos são armazenados em:
(locker)/projects/(project)/(version)/(spec_name)/cluster-init
(locker)/projects/(project)/(version)/(spec_name)/chef
Blob Baixar
Use project download
para baixar todos os blobs referenciados no 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 locker para o armazenamento local. Se o comando não conseguir localizar os ficheiros, devolve um erro.
Configuraçã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.
Gestão de Versões
Por padrão, todos os projetos usam a versão 1.0.0. Estabeleça uma versão personalizada enquanto 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 é "Order66", a versão é 1.6.9 e a especificação é default
, suas URLs são:
- az://my-account/my-container/projects/Order66/1.6.9/default/cluster-init
- az://my-account/my-container/projects/Order66/1.6.9/default/chef
Blocos
Existem dois tipos de blobs: blobs de projeto e blobs de usuário.
Blobs de Projeto
Os autores do projeto fornecem blobs de projeto, que são arquivos binários que eles podem distribuir (por exemplo, arquivos binários para um projeto de código aberto que alguém pode redistribuir legalmente). Os blobs de projeto vão para o blobs
diretório de um projeto e são localizados em /project/blobs
quando você os carrega para um repositório.
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 a pasta de blobs 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. Você não empacota esses arquivos com o projeto. Você deve colocá-los manualmente no armário. Os arquivos estão localizados em /blobs/my-project/my-blob.tgz. Não é necessário definir blobs de usuário no project.ini.
Para baixar qualquer blob, use o comando da CLI jetpack download
ou o recurso Chef jetpack_download
. O CycleCloud procura o blob do usuário primeiro e usa o blob no nível do projeto se não conseguir localizar o arquivo.
Observação
Um blob de usuário pode substituir um blob de projeto se eles tiverem o mesmo nome.
Especificar projeto dentro de um modelo de cluster
A sintaxe do projeto permite especificar várias especificações em seus nós. Para definir um projeto, use o seguinte código:
[[[cluster-init myspec]]]
Project = myproject # inferred from name
Version = x.y.z
Spec = default # (alternatively, you can name your own spec to be used here)
Locker = default # (optional; uses the default locker for node)
Observação
O nome especificado depois spec
pode ser qualquer coisa. Use-o como um atalho para definir algumas propriedades comuns.
O exemplo a seguir mostra como você pode aplicar várias especificações a um nó:
[[node scheduler]]
[[[cluster-init myspec]]]
Project = myproject
Version = x.y.z
Spec = default # (alternatively, you can name your own spec to be used here)
Locker = default # (optional; uses the default locker for node)
[[[cluster-init otherspec]]]
Project = otherproject
Version = a.b.c
Spec = otherspec # (optional)
O CycleCloud usa dois pontos para separar o nome do projeto, o nome da especificação e a versão. Ele converte automaticamente esses valores para as Project/Version/Spec
configurações.
[[node scheduler]]
AdditionalClusterInitSpecs = $ClusterInitSpecs
[[[cluster-init myproject:myspec:x.y.z]]]
[[[cluster-init otherproject:otherspec:a.b.c]]]
As especificações também podem ser herdadas entre nós. Por exemplo, você pode compartilhar uma especificação comum entre todos os nós e executar uma especificação personalizada no nó do agendador:
[[node defaults]]
[[[cluster-init my-project:common:1.0.0]]]
Order = 2 # optional
[[node scheduler]]
[[[cluster-init my-project:scheduler:1.0.0]]]
Order = 1 # optional
[[nodearray execute]]
[[[cluster-init my-project:execute:1.0.0]]]
Order = 1 # optional
Esse processo aplica tanto as especificações common
como scheduler
ao nó de agendamento e aplica apenas as especificações common
e execute
ao array de nós execute
.
Por padrão, as especificações são executadas na ordem em que são mostradas no modelo e as especificações herdadas são executadas primeiro.
Order
é um inteiro opcional com um padrão de 1.000 que você pode usar para definir a ordem das especificações.
Se você especificar apenas um nome na [[[cluster-init]]]
definição, o processo assumirá que é o nome da especificação. A seguinte configuração de especificação é válida e usa o nome Spec=myspec
:
[[[cluster-init myspec]]]
Project = myproject
Version = 1.0.0
lista_de_execução
Pode especificar uma lista de execução 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 especificação scheduler
, o run_list que definir é automaticamente anexado a qualquer run_list definida anteriormente. Por exemplo, se o run_list sob [configuration]
for 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 substituir run_list
ao nível de especificação em um nó. Esta substituição run_list
remove todos os run_list
incluídos no project.ini. Por exemplo, pode alterar a definição de um nó para a definição seguinte:
[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ó passa a ser run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init]
.
Observação
As listas de execução aplicam-se apenas ao Chef.
Locais dos arquivos
O nó baixa os arquivos compactados do Chef durante a fase de inicialização do nó. O nó baixa os ficheiros para $JETPACK_HOME/system/chef/tarballs*
, descompacta-os em $JETPACK_HOME/system/chef/chef-repo/
, e os usa para convergir o nó.
Observação
Para executar livros de receitas personalizados, é necessário adicioná-los ao run_list do nó.
O nó baixa os arquivos 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 a partir de espelhos para o armazenamento em nuvem local do cluster. Defina um SourceLocker
atributo em uma [cluster-init]
seção dentro do seu modelo. O nome do repositório que você especificar é a fonte do projeto, e os conteúdos são sincronizados com o seu repositório quando o cluster é iniciado. Você também pode usar o nome do armário como a primeira parte do cluster-init
nome. Por exemplo, se o cofre de origem for cyclecloud
, as duas definições a seguir sã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 suportam arquivos grandes. No nível superior de um projeto recém-criado, você vê 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 das especificações e versões. Você pode compartilhar qualquer coisa em blobs entre especificações ou versões do projeto. Por exemplo, você pode armazenar um instalador para um programa que muda com pouca frequência dentro de blobs e fazer referência a ele em seu project.ini. À medida que realizas iterações nas versões do teu projeto, esse único ficheiro permanece o mesmo e é copiado para o armazenamento na nuvem apenas uma vez, o que reduz os custos de transferência e armazenamento.
Para adicionar um blob, coloque um arquivo no diretório e edite o blobs
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 no project.ini para o project upload
armazenamento em nuvem.
Ficheiros de registo
Os arquivos de log gerados ao executar cluster-init estão localizados em $JETPACK_HOME/logs/cluster-init/(project)/(spec)
.
Executar ficheiros
Quando um script de inicialização de cluster é executado com êxito, ele coloca um ficheiro em /mnt/cluster-init/.run/(project)/(spec)
para garantir que o script não seja executado novamente numa convergência subsequente. Para executar o script novamente, exclua o arquivo apropriado neste diretório.
Diretórios de script
Quando 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 de 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 apenas scripts
Para executar apenas scripts 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
Chef personalizado e especificações componíveis
Cada especificação contém um diretório de chef. Antes de convergir um nó, o processo descompacta e extrai cada especificação para o chef-repo local, substituindo quaisquer cookbooks, roles 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.
baixar jetpack
Para baixar um blob dentro de um script cluster-init, use o comando jetpack download (filename)
para retirá-lo do blobs
diretório. A execução deste comando a partir de um script 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 (consulte --help para obter mais informações).
O exemplo a seguir mostra como criar um fornecedor de jetpack_download
recursos leve para utilizadores 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 dentro do chef, você deve especificar o projeto.