Azure CycleCloud는 템플릿을 사용하여 클러스터 구성을 정의합니다. CycleCloud에는 기본적으로 많은 템플릿이 포함되어 있습니다. 지원되는 템플릿의 전체 목록은 GitHub를 참조하세요. 새 템플릿을 만들거나 기존 템플릿을 사용자 지정할 수 있습니다. 예를 들어 스폿 VM을 활용하도록 기존 템플릿을 사용자 지정하거나 VPC를 추가하여 자체 네트워크를 확장할 수 있습니다.
구성 표기법
Azure CycleCloud 클러스터 템플릿을 사용하면 노드 또는 노드 배열에 하나 이상의 [[[구성]] 섹션을 추가할 수 있습니다. 이 섹션에서는 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
필요한 경우 노드 또는 노드 배열에 여러 구성 섹션이 포함될 수도 있습니다.
[[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
템플릿은 각 매개 변수에 대한 기본값을 정의합니다(개발 값을 기본값으로 사용).
이제 매개 변수 파일 없이 템플릿을 가져올 수 있으며 개발 값이 자동으로 사용됩니다. prod 클러스터를 만들 때 prod-params.properties 파일을 사용하여 템플릿 파일 자체 내에 지정된 값을 덮어씁니다.
비고
매개 변수 이름에는 문자, 숫자 및 밑줄이 포함될 수 있습니다.
템플릿의 매개 변수 참조는 다음 두 가지 형식 중 하나를 사용할 수 있습니다.
$param
: 라는 param
단일 매개 변수의 값을 사용합니다.
${expr}
expr
: 동적 값을 계산할 수 있는 모든 매개 변수의 컨텍스트에서 평가합니다. 다음은 그 예입니다.
Attribute = ${(a > b ? a : b) * 100}
이 식은 두 매개 변수 중 더 큰 매개 변수 a
b
를 사용하고 100을 곱합니다.
식은 ClassAd 언어 사양에 따라 해석되고 평가됩니다.
매개 변수 참조 자체가 있는 경우 매개 변수 값이 사용되며, 이 값은 부울, 정수 및 목록과 같은 중첩된 구조체와 같은 문자열이 아닌 형식을 지원합니다.
그러나 참조가 다른 텍스트에 포함된 경우 해당 값이 변환되어 문자열에 포함됩니다.
예를 들어, param
이 456
로 정의되고 두 위치에서 참조되는 경우를 가정해 봅시다.
- 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
속성을 통해 여러 컴퓨터 유형을 지원합니다. 솔루션은 나열한 순서대로 용량을 가져오려고 시도합니다.
클러스터 초기화 사양
Azure CycleCloud 웹 애플리케이션을 사용하면 새 클러스터를 만들 때 클러스터 초기화 프로젝트 사양을 선택할 수 있습니다. 클러스터 템플릿 내에서 프로젝트 사양을 설정합니다.
[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로 설정된 스폿 가상 머신을 사용합니다. 이 설정은 인스턴스가 가격에 따라 제거되지 않음을 의미합니다. 인스턴스의 가격은 사용 가능한 용량과 할당량이 있는 한 현물 가상 머신의 현재 가격 또는 표준 인스턴스의 가격입니다. 사용자 지정 최대 가격을 설정하려면 원하는 노드 또는 노드 배열의 특성을 사용합니다 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 버전을 가져와서 값이 조회 테이블인 매개 변수로 만들어 다른 구성에 사용할 수도 있습니다.
[[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
GUI에는 GUI에 표시되는 레이블 및 설명 특성과 선택적 ParameterType 특성이 포함됩니다. ParameterType 특성을 사용하면 사용자 지정 UI 요소를 표시할 수 있습니다. 앞의 예제에서 값은 Cloud.MachineType
사용 가능한 모든 컴퓨터 유형을 포함하는 드롭다운을 표시합니다. 다른 ParameterType 값은 다음과 같습니다.
매개 변수 형식 | 설명 |
---|---|
Cloud.머신 유형 | 사용 가능한 모든 컴퓨터 유형을 포함하는 드롭다운을 표시합니다. |
Cloud.Credentials (클라우드 자격 증명) | 사용 가능한 모든 자격 증명이 포함된 드롭다운을 표시합니다. |
Cloud.Region | 사용 가능한 모든 지역이 포함된 드롭다운을 표시합니다. |
Chef Server 지원
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
직접 지정하거나 이미지 레지스트리에 이미지를 추가할 수 있습니다. 레지스트리에 이미지를 추가할 때, 노드에서 Image
또는 ImageName
으로 참조할 수 있습니다. 이미지가 클러스터 만들기 페이지의 이미지 드롭다운 에 나타납니다.
이미지 레지스트리의 이미지는 논리 이미지의 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
가 있는 미국 동부에 단일 가상 머신으로 존재하는 경우 다음 아티팩트를 저장해야 합니다.
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는 버전 번호가 가장 높은 이미지를 자동으로 선택합니다. 버전 번호를 점선 문자열로 처리하고 각 부분을 숫자로 비교합니다. 이 동작을 재정의하려면 노드에서 ImageVersion
을 리터럴 버전 번호(예: 1.2
) 또는 와일드카드 버전 번호(예: 1.x
)로 지정하십시오.