다음을 통해 공유


Chef 오케스트레이션

Chef 는 애플리케이션 및 인프라의 배포 및 관리를 자동화하는 구성 관리 도구입니다. 시스템 구성 "레시피"를 작성하기 위해 DSL(도메인별 언어)을 사용합니다. 이러한 레시피는 다양한 시스템에서 공유하고 재사용할 수 있는 "쿡북"에 저장됩니다.

각 cluster-init 사양은 부팅 VM에서 실행해야 하는 하나 이상의 Chef 역할 및/또는 cookbook 레시피 를 참조할 수 있습니다.

비고

CycleCloud는 중앙 집중식 Chef 서버에 의존하지 않는 독립 실행형 모드에서 Chef를 사용합니다. 각 VM을 준비하는 데 필요한 Chef 요리책 집합은 프로젝트의 나머지 파일과 함께 Azure Storage 계정에서 다운로드됩니다.

프로젝트 구조

프로젝트의 스펙 디렉터리에는 chef 하위 디렉터리가 포함될 수 있습니다. 이 디렉터리에는 site-cookbooks(쿡북 정의용), data_bags(데이터 백 정의용), roles(요리사 역할 정의 파일용)의 세 디렉터리가 포함되어 있습니다.

      myproject
          ├── specs
          │   ├── default
          │     └── chef
          │         ├── site-cookbooks
          │         ├── data_bags
          │         └── roles

Chef 런리스트

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

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

노드에 scheduler 사양이 포함되어 있으면, 정의한 run_list가 이전에 정의된 run_list에 자동으로 추가됩니다. 예를 들어, [configuration]에 있는 run_list가 run_list = recipe[test]이면, 최종 run_list는 run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init]입니다.

노드에서 사양 수준의 run_list을(를) 덮어쓸 수도 있습니다. 이 대체 run_listrun_list에 포함된 모든 것을 제거합니다. 예를 들어 노드 정의를 다음 정의로 변경할 수 있습니다.

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

이 run_list 사용하면 프로젝트에 정의된 run_list 무시됩니다. 노드의 최종 run_list는 run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init]가 됩니다.

사용자 지정 Chef 및 구성 가능한 사양

각 사양에는 Chef 디렉터리가 포함될 수 있습니다. 노드를 수렴하기 전에 프로세스는 각 사양의 압축을 해제하고 로컬 chef-repo로 추출하여 이름이 일치하는 기존의 쿡북, 역할, 데이터 백을 모두 교체합니다. 이 프로세스는 사양을 정의하는 순서를 따르므로 명명 충돌이 있는 경우 마지막으로 정의된 사양이 우선합니다.

파일 위치

프로젝트 콘텐츠를 업로드할 때 CycleCloud는 세 개의 사용자 지정 Chef 디렉터리를 압축하고 대상 사물함에 (locker)/projects/(project)/(version)/(spec_name)/chef동기화합니다.

노드는 노드 시작의 부트스트래핑 단계에서 압축된 Chef 파일을 다운로드합니다. 노드는 파일을 $JETPACK_HOME/system/chef/tarballs*에 다운로드하고 $JETPACK_HOME/system/chef/chef-repo/로 압축을 풀어 노드에 적용합니다.

비고

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

Jetpack 다운로드 리소스 공급자

다음 예제에서는 Chef 사용자를 위한 간단한 리소스 공급자를 jetpack_download 만드는 방법을 보여 있습니다.

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 내에서 명령을 사용하는 경우 프로젝트를 지정해야 합니다.