다음을 통해 공유


클러스터 템플릿

Azure CycleCloud는 템플릿을 사용하여 클러스터 구성을 정의합니다. 기본적으로 여러 템플릿이 CycleCloud에 포함되며 지원되는 템플릿의 전체 목록은 GitHub에서 사용할 수 있습니다. 새 템플릿을 만들거나 기존 템플릿을 사용자 지정할 수 있습니다. 예를 들어 스폿 VM을 활용하도록 기존 템플릿을 사용자 지정하거나 VPC를 추가하여 자체 네트워크를 확장할 수 있습니다.

구성 표기법

Azure CycleCloud 클러스터 템플릿에는 모두 노드 또는 nodearray에 속하는 하나 이상의 [[[구성]] 섹션이 있는 옵션이 있습니다. 이 섹션에서는 CycleCloud에서 시작하는 노드에 대한 소프트웨어 구성 옵션을 지정합니다. 점선 표기법은 구성하려는 특성을 지정하는 데 사용됩니다.

[[node scheduler]]
  [[[configuration]]]
  cycle_server.admin.name = poweruser
  cycle_server.admin.pass = super_secret
  cycle_server.http_port = 8080
  cycle_server.https_port = 8443

표기법을 사용하여 prefix 구성 섹션을 지정하여 입력을 저장할 수도 있습니다. 동일한 구성을 다음과 같이 작성할 수도 있습니다.

[[node scheduler]]
  [[[configuration cycle_server]]]
  admin.name = poweruser
  admin.pass = super_secret
  http_port = 8080
  https_port = 8443

노드/nodearray는 필요한 경우 여러 구성 섹션을 포함할 수도 있습니다.

[[node scheduler]]
  [[[configuration]]]
  run_list = role[sge_scheduler_node]

  [[[configuration cycle_server.admin]]]
  name = poweruser
  pass = super_secret

클러스터 템플릿 매개 변수

클러스터 템플릿에는 템플릿 자체를 수정하지 않고도 클러스터의 특정 부분 값을 변경하는 매개 변수가 포함될 수 있습니다. 이는 개발 및 프로덕션 환경 배포와 같이 약간의 차이가 있는 유사한 클러스터가 많이 필요한 경우에 특히 유용합니다. 클러스터 템플릿 내에서 매개 변수를 지정하는 구문은 변수 접두사에 '$'를 접두사로 지정하는 것입니다. 일부 매개 변수가 있는 기본 템플릿 예제(비기능적)는 다음과 같습니다.

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

이 템플릿은 두 개의 매개 변수 $machine_type$slots를 정의합니다. 이 템플릿을 사용하여 개발 환경과 prod 환경 모두에서 매개 변수 값을 포함하는 텍스트 파일을 정의할 수 있습니다. 매개 변수 파일은 JSON 형식 또는 Java 속성 파일 형식일 수 있습니다.

# dev-params.json
{
  "machine_type": "H16r",
  "slots": 2
}

# prod-params.properties
machine_type = Standard_D4v3
slots = 8

그러면 개발용 매개 변수가 포함된 JSON 파일과 프로덕션에 대한 값이 포함된 .properties 파일이 생성됩니다.

참고

매개 변수 파일의 파일 이름 접미사가 중요합니다. JSON을 사용하는 경우 파일의 이름을 지정 foo.json해야 합니다. Java 속성을 사용하는 경우 파일은 .로 .properties끝나야 합니다. 잘못 명명된 매개 변수 파일이 제대로 가져오지 않습니다.

이제 매개 변수 파일을 사용하여 템플릿을 가져와 누락된 부분을 채울 수 있습니다.

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

클러스터 템플릿 자체 내에서 매개 변수의 일부 또는 전부를 정의할 수도 있습니다.

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

[parameters]
  [[parameter machine_type]]
  DefaultValue = Standard_D4v3

  [[parameter slots]]
  DefaultValue = 2

각 매개 변수의 기본값은 템플릿 내에서 정의됩니다(기본값으로 'dev' 값을 사용).

이제 매개 변수 파일 없이 템플릿을 가져올 수 있으며 'dev' 값이 자동으로 사용됩니다. 'prod' 클러스터를 만들 때 prod-params.properties 파일을 사용하여 템플릿 파일 자체 내에 지정된 값을 덮어쓸 수 있습니다.

참고

매개 변수 이름에는 문자, 숫자 및 밑줄이 포함될 수 있습니다.

템플릿의 매개 변수 참조는 다음 두 가지 형식 중 하나를 사용할 수 있습니다.

$param: 명명된 단일 매개 변수의 값을 사용합니다. param

${expr} expr: 동적 값을 계산할 수 있는 모든 매개 변수의 컨텍스트에서 평가됩니다. 예:

Attribute = ${(a > b ? a : b) * 100}

이렇게 하면 두 매개 변수 중 더 큰 매개 변수 ab를 사용하고 100을 곱합니다. 식은 ClassAd 언어 사양에 따라 해석되고 평가됩니다.

매개 변수 참조 자체가 있는 경우 매개 변수 값이 사용되며, 이 매개 변수 값은 부울, 정수 및 목록과 같은 중첩된 구조체와 같은 비 문자열 형식을 지원합니다. 그러나 참조가 다른 텍스트에 포함된 경우 해당 값이 변환되어 문자열에 포함됩니다. 예를 들어 다음 두 위치에서 정의 456 되고 참조되는 경우를 가정해 보겠습니다param.

  • Attribute1 = $param
  • Attribute2 = 123$param

Attribute1 은 숫자 456이지만 값 Attribute2 은 문자열 "123456"입니다. ${param} 보다 복잡한 상황에서 매개 변수 참조를 포함할 수 있는 것과 동일합니다$param.

  • Attribute3 = 123$param789
  • Attribute4 = 123${param}789

Attribute3 라는 param789매개 변수를 찾지만 Attribute4는 값을 param 사용하여 가져옵니다 "123456789".

컴퓨터 유형

Azure CycleCloud는 특성을 통해 MachineType 여러 컴퓨터 유형을 지원합니다. 나열된 순서대로 용량을 획득하려고 시도합니다.

Cluster Init 사양

Azure CycleCloud 웹 애플리케이션을 사용하면 사용자가 새 클러스터를 만들 때 cluster-init 프로젝트 사양을 선택할 수 있습니다. 프로젝트 사양은 클러스터 템플릿 내에서 설정됩니다.

[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]]]

이 매개 변수가 클러스터 템플릿에 추가되면 사용자는 파일 선택기를 사용하여 새 클러스터를 만들 때 적절한 프로젝트 사양을 선택할 수 있습니다.

스폿 가상 머신

워크로드 비용을 줄이기 위해 설정할 Interruptible = true수 있습니다. 그러면 인스턴스가 스폿으로 플래그가 지정되고, 사용 가능한 경우 잉여 용량을 사용합니다. 이러한 인스턴스를 항상 사용할 수 있는 것은 아니며 언제든지 선점할 수 있다는 점에 유의해야 합니다. 즉, 워크로드에 항상 적합한 것은 아닙니다.

기본적으로 true로 설정 Interruptible 하면 최대 가격이 -1로 설정된 스폿 인스턴스가 사용됩니다. 즉, 가격에 따라 인스턴스가 제거되지 않습니다. 인스턴스 가격은 사용 가능한 용량과 할당량이 있는 한 스폿의 현재 가격과 표준 인스턴스의 가격 중 더 낮은 가격이 됩니다. 사용자 지정 최대 가격을 설정하려면 원하는 노드 또는 nodearray의 특성을 사용합니다 MaxPrice .

[cluster demo]

  [[nodearray execute]]
  Interruptible = true
  MaxPrice = 0.2

조회 테이블

한 매개 변수가 다른 매개 변수를 참조하게 하고 조회 테이블을 사용하여 특정 값을 계산할 수 있습니다. 예를 들어 이미지에 사용할 매개 변수가 있으며 이 경우 두 가지 선택 항목이 있다고 가정합니다.

[[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

선택한 이미지의 OS 버전을 가져와서 값의 조회 테이블인 e 매개 변수를 만들어 다른 구성에 사용할 수도 있습니다.

[[parameter AmiLookup]]
  ParameterType = hidden
  [[[record DefaultValue]]]
      image-1000 = Ubuntu 20.04
      image-2000 = Ubuntu 22.04

UI에 표시되지 않도록 숨겨집니다.

클러스터 정의의 다른 위치에서 선택한 이미지에 사용되는 OS 버전을 가져올 수 있습니다.

[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}

GUI 통합

클러스터 템플릿 내에서 매개 변수를 정의하면 Azure CycleCloud GUI를 활용할 수 있습니다. 예를 들어 매개 변수를 정의할 때 다음 특성을 사용하여 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

"Label" 및 "Description" 특성은 선택적 "ParameterType" 특성뿐만 아니라 GUI에 표시됩니다. "ParameterType"을 사용하면 사용자 지정 UI 요소를 표시할 수 있습니다. 위의 예제에서 "Cloud.MachineType" 값은 사용 가능한 모든 컴퓨터 유형을 포함하는 드롭다운을 표시합니다. 다른 ParameterType 값은 다음과 같습니다.

매개 변수 유형 설명
Cloud.MachineType 사용 가능한 모든 컴퓨터 유형이 포함된 드롭다운을 표시합니다.
Cloud.Credentials 사용 가능한 모든 자격 증명이 포함된 드롭다운을 표시합니다.
Cloud.Region 사용 가능한 모든 지역이 포함된 드롭다운을 표시합니다.

Chef 서버 지원

Azure CycleCloud는 ChefServer를 지원합니다.

파일을 chefserver.json 만들고 자격 증명을 추가합니다. ValidationKey 는 chef 서버의 validation.pem 파일에 해당합니다. 또한 "chef-validator"의 기본값에서 변경한 경우를 증명 validation_client_name 해야 합니다.

{
"AdType" : "Cloud.Locker",
"ValidationKey" : "YOURVALIDATION.PEMHERE",
"ValidationClientName" : "chef-validator",
"Credentials" : "default",
"Location" : "https://mychefserver",
"ChefRepoType" : "chefserver",
"LockerType" : "chefrepo",
"Name" : "chefrepo",
"AccountId" : "default",
"Shared" : false
}

그런 다음 파일을 디렉터리에 배치합니다 /opt/cycle_server/config/data. 자동으로 가져옵니다.

템플릿의 사용자 지정 사용자 이미지

Azure CycleCloud는 템플릿에서 사용자 지정 이미지를 지원합니다. 이미지 ID(리소스 ID)를 ImageId직접 지정하거나 이미지 레지스트리에 이미지를 추가합니다. 이미지가 레지스트리에 있는 경우 노드 또는 ImageImageName 노드에서 참조합니다. 클러스터 만들기 페이지의 이미지 드롭다운 에 표시됩니다.

이미지 레지스트리의 이미지는 논리 이미지의 Package 내용을 식별하는 레코드와 적절한 클라우드 공급자에서 실제 이미지 ID를 지정하는 하나 이상의 해당 Artifact 레코드로 구성됩니다. 예를 들어 R이 설치된 사용자 지정 이미지는 다음 패키지 레코드로 구성될 수 있습니다.

AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"

해당 레코드를 추가한 후에는 클러스터 템플릿을 Image = R 포함하거나 ImageName = r_execute 해당 이미지를 지정할 수 있습니다.

이 이미지가 ID /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage와 함께 사용 중인 단일 Virtual Machine으로 존재하는 경우 다음 아티팩트를 저장해야 합니다.

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"

아티팩트에서 지정 Provider 해야 합니다.

지정된 이미지 패키지에 원하는 만큼 아티팩트를 추가할 수 있지만 원하는 모든 "위치"(클라우드 공급자 계정, 지역, 프로젝트 등)에 해당 이미지를 사용하는 데 필요한 모든 아티팩트를 포함해야 합니다. 아티팩트 이름은 지정된 패키지 및 버전의 모든 아티팩트에서 고유해야 한다는 점을 제외하고는 중요하지 않습니다. 공급자 및 공급자별 세부 정보(예: 지역)의 조합을 사용하는 것이 좋습니다. CycleCloud는 공급자 및 공급자별 세부 정보와 일치하도록 올바른 아티팩트가 자동으로 선택되지만 이름을 구문 분석하는 대신 공급자 특성(및 지역 등)을 사용합니다.

이름이 같은 이미지 패키지를 둘 이상 추가하는 경우 버전 번호가 달라야 합니다. 인스턴스를 시작할 때 CycleCloud는 버전 번호를 점선 문자열로 처리하고 각 부분을 숫자로 비교하여 버전 번호가 가장 높은 이미지를 자동으로 선택합니다. 이를 재정의하려면 노드에서 리터럴(예1.2: 와일드카드1.x)로 지정 ImageVersion 합니다.