프로젝트는 노드 구성을 정의하는 리소스의 컬렉션입니다. 프로젝트에는 specs이 포함되어 있습니다. 노드가 시작되면 일련의 사양을 처리하고 실행하여 노드를 구성합니다.
Azure CycleCloud는 프로젝트를 사용하여 일괄 처리 스케줄러와 같은 클러스터형 애플리케이션을 관리합니다. CycleCloud HPCPack 클러스터에서 프로젝트는 hn 및 cn 사양을 활용하여 HPCPack 헤드 노드 및 컴퓨팅 노드의 구성 및 레시피를 정의합니다.
다음 부분 노드 정의에서 docker-registry 노드는 Okta 프로젝트 버전 1.3.0의 bind 사양과 docker 프로젝트 버전 2.0.0의 core 사양 및 registry 사양의 세 가지 사양을 실행합니다.
[[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]]]
후행 태그는 프로젝트 버전 번호입니다.
[[[cluster-init <project>:<spec>:<project version>]]]
locker는 스토리지 계정 컨테이너와 자격 증명을 참조하세요. 노드에는 기본 잠금 장치가 있으므로 이 속성을 반드시 지정할 필요는 없습니다.
Azure CycleCloud는 스토리지 계정을 간략하게 표시하는 방법을 사용합니다. 예를 들어 https://mystorage.blob.core.windows.net/mycontainer를 az://mystorage/mycontainer로 작성할 수 있습니다.
노드에서 프로젝트를 정의하지만 예상 스토리지 위치에 없는 경우 노드는 CycleCloud에 Software Installation Failure 보고합니다.
CycleCloud에는 모든 노드에서 기본적으로 실행되는 내부 프로젝트가 있어 특수 볼륨 및 네트워크 처리를 수행하고 CycleCloud와의 통신을 설정합니다. 시스템은 이러한 내부 프로젝트를 사물함에 자동으로 미러링합니다.
사물함에 추가 프로젝트를 미러링할 책임이 있습니다. CycleCloud CLI는 프로젝트를 작성하는 메서드를 제공합니다.
cyclecloud project init myproject
그리고 사물함에 프로젝트를 미러링합니다.
cyclecloud project init mylocker
사양은 Python, 셸 또는 PowerShell 스크립트로 구성됩니다.
새 프로젝트 만들기
새 프로젝트를 만들려면 만들려는 프로젝트의 이름이 있는 cyclecloud project init myproject CLI 명령을 myproject 사용합니다.
myproject 에는 변경할 수 있는 하나의 default 사양이 있습니다. 이 명령은 사용자 고유의 정보로 업데이트하는 기본 파일을 사용하여 디렉터리 트리를 만듭니다.
디렉터리 구조
프로젝트 명령은 다음 디렉터리를 만듭니다.
myproject
├── project.ini
├── blobs
├── templates
├── specs
│ ├── default
│ └── cluster-init
│ ├── scripts
│ ├── files
│ └── tests
템플릿 디렉터리에는 클러스터 템플릿이 포함되어 있으며, 사양에는 프로젝트를 정의하는 사양이 포함되어 있습니다. 사양 디렉터리에 cluster-init라는 하위 디렉터리가 있습니다(Chef Orchestration도 참조). cluster-init 디렉터리에는 스크립트 디렉터리(노드에서 어휘 순서로 실행되는 스크립트 포함), 파일(노드에서 이동하는 원시 데이터 파일이 포함됨) 및 테스트(테스트 모드에서 클러스터를 시작할 때 실행되는 테스트 포함)를 포함하여 특별한 의미가 있는 디렉터리가 포함됩니다.
project.ini
project.ini 프로젝트에 대한 모든 메타데이터를 포함하는 파일입니다. 다음이 포함될 수 있습니다.
| 매개 변수 | 설명 |
|---|---|
| 이름 | 프로젝트의 이름입니다. 대시를 사용하여 단어(예: order-66-2018.)를 구분합니다. |
| 라벨 | 프로젝트의 이름입니다. 표시를 위해 긴 클러스터 이름에 공백을 사용합니다. |
| 유형 | 세 가지 옵션: scheduler, application또는 <blank>. 이 매개 변수는 프로젝트 형식을 결정하고 적절한 템플릿을 생성합니다. 기본값: application. |
| 버전 | 형식: x.x. |
Locker
프로젝트 콘텐츠는 locker에 저장됩니다. CycleCloud 설치에서 클라우드 스토리지 사물함의 이름인 명령을 cyclecloud project upload (locker)(locker) 실행하여 CycleCloud 설치에 정의된 모든 사물함에 프로젝트의 콘텐츠를 업로드할 수 있습니다. 이 락커는 기본 대상입니다. 또는 명령을 cyclecloud locker list 실행하여 사용할 수 있는 사물함을 확인할 수 있습니다.
cyclecloud locker show (locker)을(를) 사용하여 특정 사물함의 세부 정보를 볼 수 있습니다.
사물함을 두 개 이상 추가하는 경우 cyclecloud project default_target (locker)로 기본 사물함을 설정한 다음 cyclecloud project upload을 실행할 수 있습니다. 명령을 cyclecloud project default locker (locker) -global실행하여 공유할 프로젝트에 대한 전역 기본 사물함을 설정할 수도 있습니다.
비고
기본 로커는 ~/.cycle/config.ini 파일에 CycleCloud의 구성 파일로 저장되며, 이는 project.ini 파일이 아닙니다. 이 설정을 사용하면 project.ini버전 제어가 가능합니다.
프로젝트 콘텐츠를 업로드하면 CycleCloud에서 cluster-init 콘텐츠를 설정된 대상 저장소 projects/(project)/(version)/(spec_name)/cluster-init에 동기화합니다.
Blob 다운로드
project download를 사용하여 project.ini에서 참조된 모든 Blob을 로컬 Blob 디렉터리에 다운로드하세요. 이 명령은 매개 변수를 [locker] 사용하고 project.ini 나열된 Blob을 사물함에서 로컬 스토리지로 다운로드하려고 합니다. 명령에서 파일을 찾을 수 없으면 오류가 반환됩니다.
프로젝트 설정
사양
새 프로젝트를 만들 때 하나의 default 사양을 정의합니다. 명령을 사용하여 cyclecloud project add_spec 프로젝트에 사양을 더 추가합니다.
버전 관리
기본적으로 모든 프로젝트는 버전 1.0.0을 사용합니다. 프로젝트를 개발하고 배포할 때 version=x.y.z 파일에서 을 설정하여 사용자 지정 버전을 설정합니다.
예를 들어 locker_url az://my-account/my-container/projects경우 프로젝트 이름은 "Order66"이고, 버전은 1.6.9이고, 사양은 default다음과 같습니다. URL은 다음과 같습니다.
az://my-account/my-container/projects/Order66/1.6.9/default
블롭들
Blob에는 프로젝트 Blob 과 사용자 Blob의 두 가지 유형이 있습니다.
프로젝트 Blob
프로젝트 작성자는 배포할 수 있는 이진 파일인 프로젝트 Blob을 제공합니다(예: 누군가가 합법적으로 재배포할 수 있는 오픈 소스 프로젝트의 이진 파일). 프로젝트 Blob은 프로젝트의 blobs 디렉터리로 이동하며, 사물함에 업로드하면 /project/blobs에 위치하게 됩니다.
프로젝트에 Blob을 추가하려면 project.ini파일을 추가합니다.
[[blobs optionalname]]
Files = projectblob1.tgz, projectblob2.tgz, projectblob3.tgz
여러 Blob을 쉼표로 구분합니다. 프로젝트의 Blob 디렉터리에 대한 상대 경로를 지정할 수도 있습니다.
사용자 Blob
사용자 Blob 파일은 프로젝트 작성자가 법적으로 재배포할 수 없는 Univa 그리드 엔진의 실행 파일과 같은 이진 파일입니다. 이러한 파일은 프로젝트와 함께 패키지되지 않습니다. 사용자는 수동으로 락커에 넣어야 합니다. 파일은 사물함의 /blob/my-project/ 에 있습니다(예: /blobs/my-project/my-blob.tgz). project.ini에서는 사용자 Blob을 정의할 필요가 없습니다.
Blob을 다운로드하려면 jetpack download 명령을 사용합니다. CycleCloud는 먼저 사용자 Blob을 찾고 파일을 찾을 수 없는 경우 프로젝트 수준 Blob을 사용합니다.
비고
사용자 Blob은 이름이 같은 경우 프로젝트 Blob을 덮어쓸 수 있습니다.
클러스터 템플릿 내에서 프로젝트 지정
사양은 클러스터 템플릿의 노드 섹션을
[[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]]]
이 예제는 모든 노드가 상속받는 defaults 노드 정의를 활용합니다.
스케줄러 노드는 common 사양과 scheduler 사양을 모두 가져오고, 실행 노드 배열의 노드는 common 사양과 execute 사양을 모두 가져옵니다.
파일 위치
노드는 /mnt/cluster-init/(project)/(spec)/에 cluster-init 파일을 다운로드합니다.
my-project 및 my-spec 스크립트, 파일 및 테스트는 /mnt/cluster-init/my-project/my-spec에 있습니다.
프로젝트 동기화
CycleCloud 프로젝트를 미러에서 클러스터 로컬 클라우드 스토리지로 동기화할 수 있습니다. 템플릿의 SourceLocker 섹션 안에 [cluster-init] 특성을 설정합니다. 지정한 사물함의 이름은 프로젝트의 원본이며 클러스터가 시작될 때 내용이 사물함에 동기화됩니다.
cluster-init 이름의 첫 번째 부분으로 락커 이름을 사용할 수도 있습니다. 예를 들어 원본 보관함이 cyclecloud일 때, 다음 두 정의가 동일합니다.
[cluster-init my-project:my-spect:1.2.3]
SourceLocker=cyclecloud
[cluster-init cyclecloud/my-proect:my-spec:1.2.3]
대용량 파일 스토리지
프로젝트는 대용량 파일을 지원합니다. 새로 만든 프로젝트의 최상위 수준에는 Blob와 같은 큰 파일을 위한 blobs 디렉터리가 표시됩니다. 이 디렉터리에 배치하는 Blob은 특정 용도로 사용되며 디렉터리 내 files 의 항목과 다르게 작동합니다.
디렉터리 내의 항목은 blobs 사양 및 버전과 독립적으로 작동합니다. 사양 또는 프로젝트 버전 간에 Blob의 모든 항목을 공유할 수 있습니다. 예를 들어 Blob 내에서 자주 변경되지 않는 프로그램에 대한 설치 관리자를 저장하고 project.ini내에서 참조할 수 있습니다. 프로젝트 버전을 반복할 때 해당 단일 파일은 동일하게 유지되고 클라우드 스토리지에 한 번 복사되므로 전송 및 스토리지 비용이 절감됩니다.
Blob을 추가하려면 파일을 blobs 디렉터리에 배치하고 project.ini을 편집하여 파일을 참조하도록 설정합니다.
[blobs]
Files=big_file1.tgz
이 명령을 사용하면 project uploadproject.ini 참조된 모든 Blob을 클라우드 스토리지로 전송합니다.
로그 파일
cluster-init를 실행할 때 생성된 로그 파일은 에 있습니다 $JETPACK_HOME/logs/cluster-init/(project)/(spec).
파일 실행
cluster-init 스크립트가 성공적으로 실행되면 후속 수렴에서 스크립트가 다시 실행되지 않도록 /mnt/cluster-init/.run/(project)/(spec)에 파일을 배치합니다. 스크립트를 다시 실행하려면 이 디렉터리에서 적절한 파일을 삭제합니다.
스크립트 디렉터리
CycleCloud는 디렉터리에서 scripts 스크립트를 실행할 때 환경 변수를 경로 및 디렉터리의 이름에 specproject 추가합니다.
CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH
Linux에서 사양 이 있는 default라는 프로젝트에는 다음과 같은 경로가 있습니다.
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
스크립트만 실행
cluster-init 스크립트만 실행하려면 다음 명령을 사용합니다.
jetpack converge --cluster-init
이 명령은 출력을 STDOUT 및 jetpack.log 보냅니다. 각 스크립트의 출력도 다음과 같이 기록됩니다.
$JETPACK_HOME/logs/cluster-init/(project)/(spec)/scripts/(script.sh).out
jetpack 다운로드
cluster-init 스크립트 내에서 블롭을 다운로드하려면, jetpack download (filename) 명령어를 사용하여 blobs 디렉터리에서 가져옵니다. cluster-init 스크립트에서 이 명령을 실행하면 프로젝트 및 기본 URL을 결정할 수 있습니다. 비클러스터 init 컨텍스트에서 사용하려면 프로젝트를 지정해야 합니다. 자세한 정보를 얻으려면 --help 옵션을 사용하세요.