Jetpack

Jetpack은 클러스터의 모든 노드에 필요합니다. 클러스터의 노드가 되도록 프로비전되는 각 가상 머신에 Azure CycleCloud에 의해 자동으로 설치됩니다. Jetpack은 다음과 같은 세 가지 기본 기능을 제공합니다.

  • 노드 구성 -- CycleCloud는 스크립트 및 Chef 를 사용하여 프로비전된 VM의 구성을 작동하는 클러스터 노드로 자동화합니다. Chef 클라이언트와 VM 구성에 필요한 리소스는 Jetpack 내에 포함됩니다.
  • 분산 동기화 -- Jetpack은 노드와 CycleCloud 애플리케이션 서버 간의 통신을 관리합니다. 이를 통해 CycleCloud는 프로비전 VM의 상태 모니터링하고 클러스터에 있는 여러 노드의 오케스트레이션을 동기화할 수 있습니다.
  • HealthCheck -- Jetpack은 HealthCheck 를 사용하여 비정상 VM을 종료할 수 있도록 VM의 상태를 확인합니다.

Jetpack 설치

Jetpack 설치 관리자는 CycleCloud를 사용하여 클러스터를 처음 시작할 때 Azure Storage 계정에 캐시됩니다. 클러스터 VM이 프로비전되면 Azure Storage 캐시에서 Jetpack 설치 관리자를 다운로드한 다음 VM에 설치하는 부팅 프로세스의 일부로 사용자 지정 스크립트 확장 이 실행됩니다.

Jetpack 설치 관리자:

  • Jetpack 파일을 단일 디렉터리 트리로 압축을 풉니다.
    • Windows: C:\cycle\jetpack
    • Linux: /opt/cycle/Jetpack
  • VM을 클러스터 노드로 구성하는 시스템 init 시작 스크립트를 만듭니다.
  • HealthCheck 서비스를 설치합니다.
  • Jetpack 명령줄 도구를 설치하여 다음을 수행합니다.
    • Windows: C:\cycle\jetpack\bin\jetpack
    • Linux: /opt/cycle/jetpack/bin/jetpack
  • Linux에서 udev 규칙 생성
  • 환경 변수 설정 CYCLECLOUD_HOME

참고

Jetpack이 이미지에 미리 설치된 경우 사용자 지정 스크립트 확장은 Jetpack을 다시 설치 하지 않습니다 . 대신 CycleCloud에 대한 노드 연결의 유효성을 검사하고 노드 구성을 계속하기 전에 및 jetpackd 서비스를 시작하는 healthcheck 초기화 단계가 실행됩니다.

Jetpack 하위 디렉터리

디렉터리 설명
bin 유용한 이진 파일 및 스크립트.
config 사용자 정의 및 클러스터 정의 구성 파일 및 스크립트.
logs 클러스터에 조인하고 노드를 수렴하여 생성된 로그는 Chef 레시피 수렴의 결과를 포함하는 chef-client.log .
run 시스템에서 생성된 런타임 파일입니다. 이러한 파일에 직접 액세스하지 않는 것이 좋습니다.
system 내부 파일. 릴리스에서 릴리스로 크게 변경될 수 있으므로 이 디렉터리의 파일을 직접 사용하지 않는 것이 좋습니다.

HealthCheck

HealthCheck 서비스는 사용자 정의 스크립트를 실행하여 클러스터 노드로 VM의 현재 실행 가능성을 확인합니다. 자세한 내용은 HealthCheck 설명서를 참조하세요.

Jetpack 명령줄 도구

Jetpack 명령줄 도구는 현재 VM을 조작하고 Azure CycleCloud와 상호 작용하기 위한 유용한 하위 명령 집합을 제공합니다.

명령 Description
jetpack autoscale 이 노드가 속한 클러스터의 크기를 자동으로 조정합니다.
jetpack config 구성 값을 검색합니다.
jetpack converge Chef 수렴을 실행합니다.
jetpack download Azure Storage의 프로젝트에서 Blob 리소스를 다운로드합니다.
jetpack keepalive HealthCheck Service에서 시스템 종료를 지연합니다.
jetpack log CycleCloud 클러스터 UI에 메시지를 기록합니다.
jetpack run_on_shutdown 노드 종료 전에 호출할 스크립트를 추가합니다.
jetpack send CycleCloud 서버에 임의의 AMQP 메시지를 보냅니다.
jetpack shutdown CycleCloud에서 VM의 종료를 요청합니다.
jetpack test VM에 할당된 프로젝트와 연결된 테스트를 실행합니다.
jetpack users CycleCloud가 이 VM에서 관리할 사용자를 나열합니다.
jetpack report_issue VM에서 Azure Storage로 로그 파일 보관

jetpack 자동 크기 조정

jetpack autoscale 는 노드가 속한 클러스터의 자동 크기 조정 대상을 설정합니다. 클러스터는 코어, instance 개수 또는 사용자 지정 정의별로 확장할 수 있습니다.

코어를 100개까지 확장하려면 다음을 수행합니다.

jetpack autoscale --corecount=100

'gpu' nodearray를 5개 노드로 확장하려면 다음을 수행합니다.

jetpack autoscale --instancecount 5 --name=gpu

자동 크기 조정을 사용자 지정하려면 크기 조정하려는 nodearray 정의가 포함된 디스크에 json 파일을 작성해야 합니다. 코어를 100개까지 확장하려면 다음을 수행합니다.

[
  {
      "Name": "execute",
      "TargetCoreCount": 100
  }
]
jetpack autoscale --file=custom-autoscale.json

jetpack 구성

jetpack config 는 CycleCloud에서 VM에 전달된 정보를 가져옵니다. 다음을 노출합니다.

  • Ohai를 통해 사용할 수 있는 모든 시스템 속성
  • VM의 Azure 메타데이터 하위 집합
  • 부모 CycleCloud 클러스터에 대한 정보입니다.

jetpack converge

jetpack converge 는 노드와 연결된 모든 CycleCloud 프로젝트를 다운로드하고 노드에 대한 모든 Chef 레시피 및 cluster-init 스크립트를 실행하는 Chef 수렴 프로세스를 시작합니다.

jetpack 다운로드

jetpack download프로젝트 와 함께 업로드된 Blob을 노드에 다운로드합니다. Blob이 속한 프로젝트를 지정해야 합니다.

프로젝트의 일부로 example-project 업로드된 Blob big-file.zip 현재 디렉터리에 다운로드하려면 다음을 수행합니다.

jetpack download --project example-project big-file.zip .

jetpack keepalive

jetpack keepalive 는 HealthCheck 서비스와 상호 작용하여 HealthCheck 실패로 인해 VM의 종료를 지연합니다. 종료는 고정된 기간 동안 또는 무기한으로 지연될 수 있습니다. 기본적으로 종료는 1시간 동안 지연됩니다.

시스템 종료를 1시간 지연하려면 다음을 수행합니다.

jetpack keepalive

시스템 종료를 6시간 지연하려면 다음을 수행합니다.

jetpack keepalive 6h

HealthCheck 서비스를 완전히 사용하지 않도록 설정하려면, 즉 종료를 무기한 연기합니다.

jetpack keepalive forever

참고

Windows VM에서 forever HealthCheck에만 옵션을 사용할 수 있습니다.

jetpack 로그

jetpack log 는 로그 메시지를 CycleCloud로 다시 보냅니다. 메시지는 애플리케이션 서버 로그(일반적으로 /opt/cycle_server/cycle_server.log), 기본 이벤트 로그 및 클러스터 UI 페이지에 표시됩니다.

각 메시지에는 수준 및 우선 순위의 두 가지 속성 이 있습니다.

level 속성은 메시지 유형을 나타냅니다. 유효한 수준은 'info', 'warn' 및 'error'입니다. 수준은 지정된 메시지의 중요도를 나타내지 않습니다. 예를 들어 일부 오류는 사소하고 일부 정보 메시지는 중요합니다.

우선 순위는 메시지의 중요성을 나타냅니다. 유효한 우선 순위 값은 'low', 'medium', 'high'입니다. 우선 순위가 중간 이상인 메시지만 클러스터 UI 페이지에 표시되어 우선 순위가 낮은 메시지로 페이지가 넘쳐나지 않도록 합니다.

클러스터 UI 페이지에 표시되는 정보 로그 메시지를 보내려면 다음을 수행합니다.

jetpack log 'system is now ready'

클러스터 UI 페이지에 표시하지 않으려는 우선 순위가 낮은 로그 메시지를 보내려면 다음을 수행합니다.

jetpack log 'system is now ready' --priority low

기본적으로 오류 수준이 있는 메시지는 우선 순위가 높습니다. 오류 메시지를 보내려면 다음을 수행합니다.

jetpack log 'the machine cannot process jobs' --level error

간단한 오류 메시지를 보내려면 다음을 수행합니다.

jetpack log 'the machine cannot process jobs' --level error --priority low

jetpack run_on_shutdown

jetpack run_on_shutdown 는 노드 종료 전에 호출할 bash 스크립트를 등록합니다.

명령은 스크립트의 절대 경로를 인수로 사용합니다.

Azure에서 노드를 종료하면 종료 알림 이 사용하도록 설정된 경우 Jetpack은 종료에 대한 알림을 받고 노드가 종료되기 전에 스크립트를 실행하려고 시도합니다.

노드는 를 사용하도록 설정하려면 종료 알림을 사용하도록 설정run_on_shutdown해야 합니다.

jetpack run_on_shutdown /tmp/example.sh

이 명령은 Windows 노드에서 지원되지 않습니다.

jetpack send

jetpack send 는 CycleCloud에 AMQP 메시지를 보냅니다. CycleCloud용 플러그 인을 개발하지 않는 한 권장되지 않는 고급 명령입니다.

지정된 AMQP 라우팅 키를 사용하여 임의의 문자열 또는 파일을 보낼 수 있습니다.

jetpack 종료

jetpack shutdown 는 CycleCloud가 노드를 종료할 것을 요청합니다. 옵션을 명령에 전달하여 종료 요청의 이유(유휴 및 비정상)와 노드를 종료하는 방법(종결 및 할당 취소)을 지정할 수 있습니다.

비정상 노드를 종료하려면:

jetpack shutdown --unhealthy

노드 할당을 취소하려면 다음을 수행합니다.

jetpack shutdown --deallocate

jetpack 테스트

jetpack test 는 노드에 할당된 프로젝트에 포함된 모든 테스트를 실행하고 결과를 stdout에 출력합니다.

jetpack 사용자

jetpack users 은 CycleCloud가 노드에서 관리할 사용자를 나열합니다. 사용자가 할당되고 클러스터에 제거되면 시간이 지남에 따라 이 목록이 변경될 수 있습니다.

노드에 할당된 사용자에서 사용자에게 친숙한 인쇄를 받으려면 다음을 수행합니다.

$ jetpack users

Username: test-user
Full Name: Test User
UID: 10201
Is Admin: True
Is Owner: True

스크립트에 친숙한 JSON 출력을 얻으려면 다음을 수행합니다.

$ jetpack users --json

[
    {
        "fullName": "Test User",
        "isAdmin": true,
        "isOwner": true,
        "name": "test-user",
        "publicKeys": [
            "ssh-rsa public-key-goes-here\n"
        ],
        "uid": 10201
    }
]

jetpack report_issue

jetpack report_issue VM에서 로그 디렉터리를 보관하고 필요에 따라 Azure Storage에 업로드하고 외부 액세스를 위해 서명된 URL을 만듭니다. 로그는 노드의 Locker에서 참조하는 Azure Storage 계정에 업로드됩니다. Azure Storage에서 보관 파일에 서명할 때 결과 SAS 토큰은 30일 동안 읽기 전용 액세스 권한을 갖습니다.

Usage:

$ jetpack report_issue [LOG_PATH] [--upload/--no-upload] [--sign/--no-sign]

보관하려면 기본 Jetpack 로그($JETPACK_HOME/logs)를 업로드하고 서명합니다.

$ jetpack report_issue
Logs can be found at: https://testaccount.blob.core.windows.net/cyclecloud/issues/TestCluster-execute-1-77777964-8b74-420d-ad44-094edf7695f2.zip?sv=2017-11-09&rsct=binary&sig=jBJUlYo10lRq0eW94I%2B6syzYVmgo1qcTFUc35D/q0Tg%3D&se=2020-12-04T15%3A15%3A00Z&spr=https&rscd=disposition%3Dfile%3B%20attachment&sp=r&sr=b
Signed URL will expire on: 2020-12-04T15:15:00Z

보관하려면 기본이 아닌 로그 디렉터리를 업로드하지만 서명하지 않습니다.

$ jetpack report_issue /var/log/azure --no-sign
Logs can be found at: https://testaccount.blob.core.windows.net/cyclecloud/issues/TestCluster-execute-1-d67fe991-1dac-4644-9af7-50c835726f5e.zip

로컬 VM에 로그를 보관하려면 다음을 수행합니다.

$ jetpack report_issue --no-upload
Logs can be found at: /tmp/tmp4nscw705/TestCluster-execute-1-4249e973-3d87-4b14-94ed-6856a5267972.zip