Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Azure CycleCloud usa modelos para definir configurações de cluster. O CycleCloud inclui muitos modelos por padrão. Para obter uma lista completa de modelos com suporte, consulte o GitHub. Você pode criar novos modelos ou personalizar os existentes. Por exemplo, você pode personalizar um modelo existente para aproveitar as VMs Spot ou adicionar uma VPC para estender sua própria rede.
Notação de configuração
Os modelos de cluster do Azure CycleCloud permitem que você adicione uma ou mais seções de [[[configuração]]] a um nó ou conjunto de nós. Essas seções especificam opções de configuração de software para os nós iniciados pelo CycleCloud. Use a notação pontilhada para especificar os atributos que você deseja configurar:
[[node scheduler]]
[[[configuration]]]
cycle_server.admin.name = poweruser
cycle_server.admin.pass = super_secret
cycle_server.http_port = 8080
cycle_server.https_port = 8443
Você também pode usar prefix a notação para especificar uma seção de configuração e salvar a digitação.
A mesma configuração também pode ser gravada como:
[[node scheduler]]
[[[configuration cycle_server]]]
admin.name = poweruser
admin.pass = super_secret
http_port = 8080
https_port = 8443
Um nó ou matriz de nós também pode conter várias seções de configuração, se necessário.
[[node scheduler]]
[[[configuration]]]
run_list = role[sge_scheduler_node]
[[[configuration cycle_server.admin]]]
name = poweruser
pass = super_secret
Parâmetros de modelo de cluster
Os modelos de cluster podem conter parâmetros que você usa para alterar os valores de determinadas partes de um cluster. Você não precisa modificar o modelo em si. Esse recurso é especialmente útil quando você deseja criar muitos clusters semelhantes com pequenas diferenças, como implantar ambientes de desenvolvimento e produção. Para especificar um parâmetro dentro de um modelo de cluster, prefixe uma variável com um '$'. Um exemplo de modelo básico (não funcional) com alguns parâmetros pode ser semelhante a:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
Este modelo define dois parâmetros: $machine_type e $slots. Com esse modelo, você pode criar arquivos de texto que contêm os valores para esses parâmetros nos ambientes de desenvolvimento e prod. Você pode usar o formato JSON ou o formato de arquivo de propriedades Java para o arquivo de parâmetros:
# dev-params.json
{
"machine_type": "H16r",
"slots": 2
}
# prod-params.properties
machine_type = Standard_D4v3
slots = 8
Este exemplo cria um arquivo JSON que contém os parâmetros para desenvolvimento e um arquivo .properties que contém os valores para produção.
Observação
O sufixo de nome de arquivo para o arquivo de parâmetros é importante! Se você usar JSON, nomeie seu arquivo foo.json. Se você usar propriedades Java, encerre o nome do arquivo com .properties. Arquivos de parâmetro nomeados incorretamente não serão importados corretamente.
Agora você pode importar o modelo usando o arquivo de parâmetros para preencher as partes ausentes:
cyclecloud import_cluster gridengine-dev -f template.txt -p dev-params.json -c gridengine
cyclecloud import_cluster gridengine-prod -f template.txt -p prod-params.properties -c gridengine
Você também pode definir alguns ou todos os parâmetros dentro do próprio modelo de cluster:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
[parameters]
[[parameter machine_type]]
DefaultValue = Standard_D4v3
[[parameter slots]]
DefaultValue = 2
O modelo define valores padrão para cada parâmetro (usamos os valores de desenvolvimento como padrão).
Agora você pode importar o modelo sem um arquivo de parâmetros e os valores de desenvolvimento são usados automaticamente. Quando for hora de criar um cluster prod, use o arquivo prod-params.properties para substituir os valores especificados dentro do próprio arquivo de modelo.
Observação
Os nomes de parâmetro podem incluir letras, números e sublinhados.
As referências de parâmetro no modelo podem usar uma das duas formas:
$param: usa o valor de um único parâmetro chamado param.
${expr}: avalia expr no contexto de todos os parâmetros, o que permite calcular valores dinâmicos. Por exemplo:
Attribute = ${(a > b ? a : b) * 100}
Essa expressão toma o maior de dois parâmetros, a e b, e o multiplica por 100.
A expressão é interpretada e avaliada de acordo com a especificação da linguagem ClassAd.
Se existir uma referência de parâmetro isolada, o valor do parâmetro será usado, o que oferece suporte a tipos não-string, como booleanos, inteiros e estruturas aninhadas, como listas.
No entanto, se a referência estiver inserida em outro texto, seu valor será convertido e incluído em uma cadeia de caracteres.
Por exemplo, suponha que param seja definido como 456 e referenciado em dois locais:
- Attribute1 = $param
- Attribute2 = 123$param
O valor de Attribute1 é o número 456, mas o valor de Attribute2 é a cadeia "123456".
${param} funciona da mesma $paramforma, para que você possa usá-lo para incluir referências de parâmetro em situações mais complexas:
- Attribute3 = 123$param789
- Attribute4 = 123${param}789
Attribute3 procura o parâmetro nomeado param789, mas Attribute4 usa o valor de param obter "123456789".
Tipos de computador
O Azure CycleCloud dá suporte a vários tipos de computador por meio do MachineType atributo. A solução tenta obter a capacidade na ordem em que você lista.
Especificações de inicialização de cluster
O aplicativo Web do Azure CycleCloud permite selecionar especificações de projeto de inicialização de cluster ao criar um novo cluster. Configure as especificações de projeto dentro do modelo de cluster:
[parameter ClusterInitSpecs]
Label = Cluster-Init
Description = Cluster init specs to apply to nodes
ParameterType = Cloud.ClusterInitSpecs
[cluster demo]
[[node defaults]]
AdditionalClusterInitSpecs = $ClusterInitSpecs
[[[cluster-init myproject:myspec:1.0.0]]]
Depois de adicionar esse parâmetro ao modelo de cluster, você pode usar o seletor de arquivos para selecionar as especificações de projeto corretas ao criar um cluster.
Detectar máquinas virtuais
Para reduzir o custo de suas cargas de trabalho, defina Interruptible como true. Essa configuração sinaliza sua instância como uma máquina virtual spot e permite que ela use a capacidade excedente quando disponível. Tenha em mente que essas instâncias nem sempre estão disponíveis e podem ser interrompidas a qualquer momento, portanto, elas podem não ser apropriadas para sua carga de trabalho.
Por padrão, quando você define Interruptible como true, a instância usa máquinas virtuais spot com um preço máximo definido como -1. Essa configuração significa que a instância não é removida com base no preço. O preço da instância é o preço atual para as máquinas virtuais de spot ou o preço de uma instância padrão, o que for menor, desde que haja capacidade e cota disponíveis. Para definir um preço máximo personalizado, use o atributo MaxPrice no nó ou matriz de nó desejado.
[cluster demo]
[[nodearray execute]]
Interruptible = true
MaxPrice = 0.2
Tabelas de pesquisa
Você pode fazer um parâmetro referenciar outro e calcular um determinado valor com uma tabela de consulta. Por exemplo, suponha que você tenha um parâmetro para usar a imagem, com duas opções neste caso:
[[parameter MachineImage]]
Label = Image
DefaultValue = image-1000
Description = Ubuntu 22.04
Config.Plugin = pico.control.AutoCompleteDropdown
[[[list Config.Entries]]]
Name = image-1000
Label = Ubuntu 20.04
[[[list Config.Entries]]]
Name = image-2000
Label = Ubuntu 22.04
Você também pode obter a versão do sistema operacional da imagem escolhida e usá-la para outra configuração fazendo um parâmetro cujo valor é uma tabela de pesquisa de valores:
[[parameter AmiLookup]]
ParameterType = hidden
[[[record DefaultValue]]]
image-1000 = Ubuntu 20.04
image-2000 = Ubuntu 22.04
Esse parâmetro está oculto, portanto, ele não aparece na interface do usuário.
Você pode obter a versão do sistema operacional usada para a imagem escolhida em qualquer outro lugar na definição do cluster:
[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}
Integração de GUI
Definir parâmetros dentro do modelo de cluster permite que você aproveite a GUI do Azure CycleCloud. Por exemplo, ao definir parâmetros, use os seguintes atributos para auxiliar na criação da GUI:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
[parameters]
[[parameter machine_type]]
DefaultValue = Standard_D4v3
Label = Machine Type
Description = MachineType to use for the Grid Engine scheduler node
ParameterType = Cloud.MachineType
[[parameter slots]]
DefaultValue = 2
Description = The number of slots for Grid Engine to report for the node
A GUI inclui os atributos Rótulo e Descrição , que aparecem na GUI, bem como o atributo ParameterType opcional. O atributo ParameterType permite que elementos de interface do usuário personalizados sejam exibidos. No exemplo anterior, o valor Cloud.MachineType exibe uma lista suspensa que contém todos os tipos de computador disponíveis. Os outros valores ParameterType são:
| Tipo de parâmetro | Descrição |
|---|---|
| Cloud.MachineType | Exibe uma lista suspensa que contém todos os tipos de computador disponíveis. |
| Cloud.Credentials | Exibe um menu suspenso com todas as credenciais disponíveis. |
| Região da Nuvem | Exibe uma lista suspensa que contém todas as regiões disponíveis. |
Imagens de usuário personalizadas em modelos
O Azure CycleCloud dá suporte a imagens personalizadas em modelos. Você pode especificar a ID da imagem (ID do recurso) diretamente com ImageId, ou pode adicionar a imagem ao registro de imagem. Ao adicionar a imagem ao registro, você poderá referenciá-la com Image ou ImageName em seu nó. A imagem aparece no menu de seleção de imagem na página de criação do cluster.
As imagens no registro de imagem consistem em um Package registro que identifica o conteúdo da imagem lógica e um ou mais registros correspondentes Artifact que especificam a ID da imagem real no provedor de nuvem apropriado. Por exemplo, uma imagem personalizada com R instalada nela pode consistir neste registro de pacote:
AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"
Ao adicionar esse registro, você pode especificar a imagem incluindo ou Image = R ou ImageName = r_execute no modelo de cluster.
Se essa imagem existisse como uma única máquina virtual no Leste dos EUA com ID /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage, você precisará armazenar o seguinte artefato:
AdType = "Artifact"
Package = "r_execute"
Version = "2.1.1"
Name = "az/useast"
Provider = "az"
ImageId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage"
Você deve especificar Provider no artefato.
Você pode adicionar quantos artefatos desejar para um determinado pacote de imagem, mas deve incluir todos os artefatos necessários para usar essa imagem em todos os locais desejados (uma por conta de provedor de nuvem, regiões, projetos e assim por diante). O nome do artefato não é importante, exceto que ele deve ser exclusivo para todos os artefatos para um determinado pacote e versão. Geralmente, é recomendável usar uma combinação de detalhes específicos do provedor e do provedor, como a região. O CycleCloud escolhe automaticamente o artefato certo para corresponder ao provedor e a todos os detalhes específicos do provedor, mas ele usa o atributo Provider (e Região e assim por diante) em vez de analisar o Nome.
Se você adicionar mais de um pacote de imagem com o mesmo nome, cada pacote deverá ter um número de versão diferente. Quando você inicia uma instância, o CycleCloud seleciona automaticamente a imagem com o número de versão mais alto. Ele trata o número de versão como uma cadeia de caracteres pontilhada e compara cada parte como um número. Para substituir esse comportamento, especifique ImageVersion no nó como um número de versão literal (por exemplo, 1.2) ou um número de versão curinga (por exemplo, 1.x).