프로젝트

프로젝트는 노드 구성을 정의하는 리소스의 컬렉션입니다. 프로젝트에 는 사양이 포함됩니다. 노드가 시작되면 사양 시퀀스를 처리하고 실행하여 구성됩니다.

Azure CycleCloud는 프로젝트를 사용하여 일괄 처리 스케줄러와 같은 클러스터된 애플리케이션을 관리합니다. CycleCloud HPCPack에서 프로젝트는 HPCPack 헤드 노드 및 cn 컴퓨팅 노드에 대한 구성 및 레시피를 정의하는 사양 및 사양입니다hn.

다음은 부분 노드 정의입니다. docker-registry 노드는 세 가지 사양, 즉 okta 프로젝트 버전 1.3.0의 바인딩 사양과 docker 프로젝트 버전 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]]]

후행 태그는 프로젝트 버전 번호입니다.

[[[cluster-init <project>:<spec>:<project version>]]]

사물함은 스토리지 계정 컨테이너 및 자격 증명에 대한 참조입니다. 노드에는 기본 보관이 있으므로 이 특성이 반드시 필요한 것은 아닙니다.

Azure CycleCloud는 스토리지 계정에 약식 기능을 사용하므로 https://mystorage.blob.core.windows.net/mycontaineraz://mystorage/mycontainer 작성할 수 있습니다.

노드는 pogo 도구를 사용하여 사물함에서 참조하는 각 프로젝트를 다운로드합니다.

pogo get az://mystorage/mycontainer/projects/okta/1.3.0/bind

프로젝트가 노드에 정의되어 있지만 예상 스토리지 위치에 없는 경우 노드는 CycleCloud에 Software Installation Failure 보고합니다.

CycleCloud에는 특수 볼륨 및 네트워크 처리를 수행하고 CycleCloud에 대한 통신을 설정하기 위해 모든 노드에서 기본적으로 실행되는 내부 프로젝트가 있습니다. 이러한 내부 프로젝트는 자동으로 사물함에 미러링됩니다.

사용자는 사물함에 추가 프로젝트를 미러링할 책임이 있습니다. CycleCloud CLI에는 프로젝트를 작성하는 메서드가 있습니다.

cyclecloud project init myproject

및 미러:

cyclecloud project init mylocker

는 사물함으로 프로젝트를 진행합니다.

사양은 Python, 셸 또는 PowerShell 스크립트로 구성됩니다.

새 프로젝트 만들기

새 프로젝트를 만들려면 만들려는 프로젝트의 이름이 있는 myproject CLI 명령을 cyclecloud project init myproject사용합니다. 이렇게 하면 변경할 수 있는 "default"라는 단일 사양을 사용하여 "myproject"라는 프로젝트가 생성됩니다. 사용자 고유의 정보를 포함하도록 수정할 기본 파일로 디렉터리 트리가 만들어집니다.

디렉터리 구조

프로젝트 명령으로 다음 디렉터리를 만듭니다.

      \myproject
          ├── project.ini
          ├── blobs
          ├── templates
          ├── specs
          │   ├── default
          │     └── cluster-init
          │        ├── scripts
          │        ├── files
          │        └── tests
          │     └── chef
          │         ├── site-cookbooks
          │         ├── data_bag
          │         └── roles

템플릿 디렉터리에는 클러스터 템플릿이 저장되지만 사양에는 프로젝트를 정의하는 사양이 포함됩니다. 사양 에는 cluster-init 및 사용자 지정 chef라는 두 개의 하위 디렉터리가 있습니다. cluster-init에는 스크립트 디렉터리(노드에서 어휘 순서로 실행되는 스크립트 포함), 파일 (노드에 배치될 원시 데이터 파일) 및 테스트(클러스터가 테스트 모드에서 시작될 때 실행할 테스트 포함)와 같은 특별한 의미가 있는 디렉터리가 포함되어 있습니다.

사용자 지정 Chef 하위 디렉터리에는 사이트 쿡북(쿡북 정의용), data_bags (데이터백 정의) 및 역할 (chef 역할 정의 파일)의 세 가지 디렉터리가 있습니다.

project.ini

project.ini 는 프로젝트에 대한 모든 메타데이터를 포함하는 파일입니다. 다음을 포함할 수 있습니다.

매개 변수 Description
name 프로젝트의 이름입니다. 단어는 대시(예: order-66-2018)로 구분해야 합니다.
label 프로젝트의 이름입니다. 표시를 위해 클러스터의 긴 이름(공백 포함)입니다.
형식 세 가지 옵션: 스케줄러, 애플리케이션, <비어 있음>. 프로젝트 형식을 결정하고 적절한 템플릿을 생성합니다. 기본값: 애플리케이션
버전 형식: x.x.x

사물함

프로젝트 콘텐츠는 사물함 내에 저장됩니다. 명령을 cyclecloud project upload (locker)통해 CycleCloud 설치에 정의된 모든 사물함에 프로젝트의 콘텐츠를 업로드할 수 있습니다. 여기서 (사물함)은 CycleCloud 설치에서 클라우드 스토리지 사물함의 이름입니다. 이 보관은 기본 대상으로 설정됩니다. 또는 명령을 cyclecloud locker list사용하여 사용할 수 있는 사물함을 확인할 수 있습니다. 특정 사물함에 cyclecloud locker show (locker)대한 세부 정보는 .

두 개 이상의 사물함을 추가하는 경우 기본값을 cyclecloud project default_target (locker)설정한 다음 실행하기만 cyclecloud project upload하면 됩니다. 명령을 cyclecloud project default locker (locker) -global사용하여 프로젝트에서 공유할 수 있는 전역 기본 사물함을 설정할 수도 있습니다.

참고

기본 사물함은 project.ini 아닌 cyclecloud 구성 파일(일반적으로 ~/.cycle/config.ini)에 저장됩니다. 이 작업은 project.ini 버전 제어를 허용하기 위해 수행됩니다.

프로젝트 콘텐츠를 업로드하면 Chef 디렉터리를 압축하고 chef와 cluster init를 모두 대상 사물함에 동기화합니다. 다음 위치에서 저장됩니다.

  • (locker)/projects/(project)/(version)/(spec_name)/cluster-init
  • (locker)/projects/(project)/(version)/(spec_name)/chef

Blob 다운로드

project.ini 참조된 모든 Blob을 로컬 Blob 디렉터리에 다운로드하는 데 사용합니다 project download . 이 명령은 매개 변수를 [locker] 사용하며 project.ini 나열된 Blob을 사물함에서 로컬 스토리지로 다운로드하려고 시도합니다. 파일을 배치할 수 없는 경우 오류가 반환됩니다.

프로젝트 설정

사양

새 프로젝트를 만들 때 단일 기본 사양이 정의됩니다. 명령을 통해 프로젝트에 추가 사양을 cyclecloud project add_spec 추가할 수 있습니다.

버전 관리

기본적으로 모든 프로젝트에는 1.0.0 버전 이 있습니다. project.ini 파일에서 설정 version=x.y.z 하여 프로젝트를 개발하고 배포할 때 사용자 지정 버전을 설정할 수 있습니다.

예를 들어 "locker_url"이 "az://my-account/my-container/projects"이고 프로젝트 이름이 "Order66"이고 버전이 "1.6.9"이고 사양이 "기본값"인 경우 URL은 다음과 같습니다.

  • 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

Blob

Blob에는 프로젝트 Blob사용자 Blob의 두 가지 유형이 있습니다.

프로젝트 Blob

프로젝트 Blob은 배포할 수 있다는 가정 하에 프로젝트 작성자가 제공하는 이진 파일입니다(즉, 합법적으로 재배포할 수 있는 오픈 소스 프로젝트의 이진 파일). 프로젝트 Blob은 프로젝트의 "Blob" 디렉터리로 이동하고, 사물함에 업로드하면 /project/Blob에 배치됩니다.

프로젝트에 Blob을 추가하려면 project.ini파일을 추가합니다.

[[blobs optionalname]]
  Files = projectblob1.tgz, projectblob2.tgz, projectblob3.tgz

여러 Blob을 쉼표로 구분할 수 있습니다. 프로젝트의 Blob 디렉터리에 대한 상대 경로를 지정할 수도 있습니다.

사용자 Blob

사용자 Blob은 프로젝트 작성자가 합법적으로 재배포할 수 없는 이진 파일(예: UGE 이진 파일)입니다. 이러한 파일은 프로젝트와 함께 패키지되지 않고 대신 사물함에 수동으로 스테이징되어야 합니다. 파일은 /blobs/my-project/my-blob.tgz에 있습니다. 사용자 Blob은 project.ini 정의할 필요가 없습니다.

Blob을 다운로드하려면 CLI 또는 Chef 리소스에서 jetpack_download 명령을 사용합니다jetpack download. CycleCloud는 먼저 사용자 Blob을 찾습니다. 해당 파일이 없으면 프로젝트 수준 Blob이 사용됩니다.

참고

동일한 이름의 사용자 Blob을 사용하여 프로젝트 Blob을 재정의할 수 있습니다.

클러스터 템플릿 내에서 프로젝트 지정

프로젝트 구문을 사용하면 노드에서 여러 사양을 지정할 수 있습니다. 프로젝트를 정의하려면 다음을 사용합니다.

[[[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, will use default locker for node)

참고

'spec' 다음에 지정된 이름은 무엇이든 될 수 있지만 몇 가지 > 공통 속성을 정의하는 바로 가기로 사용할 수 있고 사용해야 합니다.

지정된 노드에 다음과 같이 여러 사양을 적용할 수도 있습니다.

[[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, will use default locker for node)

[[[cluster-init otherspec]]]
Project = otherproject
Version = a.b.c
Spec = otherspec  # (optional)

프로젝트 이름, 사양 이름 및 버전을 콜론으로 구분하여 CycleCloud는 해당 값을 적절한 Project/Version/Spec 설정으로 자동으로 구문 분석할 수 있습니다.

[[node scheduler]]
  AdditionalClusterInitSpecs = $ClusterInitSpecs
  [[[cluster-init myproject:myspec:x.y.z]]]
  [[[cluster-init otherproject:otherspec:a.b.c]]]

사양은 노드 간에 상속될 수도 있습니다. 예를 들어 모든 노드 간에 공통 사양을 공유한 다음 스케줄러 노드에서 사용자 지정 사양을 실행할 수 있습니다.

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

이렇게 하면 실행 nodearray에 common 만 사양과 scheduler 사양을 적용하면서 common 스케줄러 노드에 사양과 execute 사양을 모두 적용합니다.

기본적으로 사양은 템플릿에 표시된 순서대로 실행되고 상속된 사양을 먼저 실행합니다. Order 는 기본값 1000으로 설정된 선택적 정수이며 사양의 순서를 정의하는 데 사용할 수 있습니다.

정의에 [[[cluster-init]]] 이름이 하나만 지정되면 사양 이름으로 간주됩니다. 예를 들면 다음과 같습니다.

[[[cluster-init myspec]]]
Project = myproject
Version = 1.0.0

는 이름에 암시된 Spec=myspec 유효한 사양 설정입니다.

run_list

project.ini 내의 프로젝트 또는 사양 수준에서 Runlist를 지정할 수 있습니다.

[spec scheduler]
run_list = role[a], recipe[b]

노드에 사양 "스케줄러"가 포함된 경우 정의된 run_list 이전에 정의된 모든 Runlist에 자동으로 추가됩니다. 예를 들어 내 run_list 정의된 [configuration]run_list = recipe[test]경우 최종 실행 목록이 됩니다 run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init].

노드의 사양 수준에서 Runlist를 덮어쓸 수도 있습니다. 이렇게 하면 project.ini 포함된 모든 run_list 대체됩니다. 예를 들어 노드 정의를 다음으로 변경한 경우입니다.

[cluster-init test-project:scheduler:1.0.0]
run_list = recipe[different-test]

프로젝트에 정의된 Runlist는 무시되고 위의 실행 목록이 대신 사용됩니다. 그러면 노드의 최종 실행 목록이 됩니다 run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init].

참고

runlist는 chef와 관련이 있으며, 그렇지 않으면 적용되지 않습니다.

파일 위치

압축된 Chef 파일은 노드 시작의 부트스트랩 단계에서 다운로드됩니다. $JETPACK_HOME/system/chef/tarballs에 다운로드되고 $JETPACK_HOME/system/chef/chef-repo/로 압축을 풀고 노드를 수렴할 때 사용됩니다.

참고

사용자 지정 쿡북을 실행하려면 노드의 run_list 지정해야 합니다.

cluster-init 파일은 /mnt/cluster-init/(project)/(spec)/에 다운로드됩니다. "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)에 대한 "Blob" 디렉터리가 표시됩니다. 이 디렉터리에 배치된 Blob은 특정 용도를 가지며 "files" 디렉터리 내의 항목과 다르게 작동합니다.

"Blob" 디렉터리 내의 항목은 사양 및 버전 독립적입니다. "Blob"의 모든 항목은 사양 또는 프로젝트 버전 간에 공유할 수 있습니다. 예를 들어 자주 변경되지 않는 프로그램의 설치 관리자는 "Blob" 내에 저장하고 project.ini내에서 참조할 수 있습니다. 프로젝트 버전을 반복할 때 해당 단일 파일은 동일하게 유지되며 클라우드 스토리지에 한 번만 복사되므로 전송 및 스토리지 비용이 절약됩니다.

Blob을 추가하려면 파일을 "Blobs" 디렉터리에 배치하고 project.ini 편집하여 해당 파일을 참조합니다.

[blobs]
  Files=big_file1.tgz

이 명령을 사용하면 project upload project.ini 참조된 모든 Blob이 클라우드 스토리지로 전송됩니다.

로그 파일

cluster-init를 실행할 때 생성된 로그 파일은 $JETPACK_HOME/logs/cluster-init/(project)/(spec)에 있습니다.

파일 실행

cluster-init 스크립트가 성공적으로 실행되면 파일이 /mnt/cluster-init/.run/(project)/(spec) 에 배치되어 후속 수렴에서 다시 실행되지 않도록 합니다. 스크립트를 다시 실행하려면 이 디렉터리에서 적절한 파일을 삭제합니다.

스크립트 디렉터리

CycleCloud는 스크립트 디렉터리에서 스크립트를 실행할 때 사양 및 프로젝트 디렉터리의 경로 및 이름에 환경 변수를 추가합니다.

CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH

Linux에서 "default" 사양을 가진 "test-project"라는 프로젝트에는 다음과 같은 경로가 있습니다.

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

명령의 출력은 jetpack.log뿐만 아니라 STDOUT으로 이동합니다. 또한 각 스크립트에는 다음과 같은 출력이 기록됩니다.

      $JETPACK_HOME/logs/cluster-init/(project)/(spec)/scripts/(script.sh).out

사용자 지정 Chef 및 Composable 사양

각 사양에는 Chef 디렉터리가 있습니다. 수렴하기 전에 각 사양이 대상 해제되고 로컬 chef-repo로 추출되어 기존 요리책, 역할 및 데이터 모음을 동일한 이름으로 바꿔집니다. 이 작업은 사양이 정의된 순서대로 수행되므로 명명 충돌의 경우 마지막으로 정의된 사양이 항상 승리합니다.

jetpack 다운로드

cluster-init 스크립트 내에서 Blob을 다운로드하려면 이 명령을 jetpack download (filename) 사용하여 Blob 디렉터리에서 가져옵니다. cluster-init 스크립트에서 이 명령을 실행하면 프로젝트 및 기본 URL이 결정됩니다. 비클러스터형 컨텍스트에서 사용하려면 프로젝트를 지정해야 합니다(자세한 내용은 --help 참조).

Chef 사용자의 jetpack_download 경우 LWRP가 생성되었습니다.

jetpack_download "big-file1.tgz" do
  project "my-project"
  end

Chef에서 기본 다운로드 위치는 #{node[:jetpack][:downloads]}. 파일 대상을 변경하려면 다음을 사용합니다.

jetpack_download "foo.tgz" do
  project "my-project"
  dest "/tmp/download.tgz"
end

Chef 내에서 사용하는 경우 프로젝트를 지정해야 합니다.