Azure 배치 서비스에 컨테이너 사용

10216 단어 containerbatchazure
Azure Batch service는 병렬 실행 프로그램의 가장 좋은 선택 중 하나이다.
본고에서, 나는 용기를 어떻게 일괄 처리 프로그램으로 사용하는지 설명할 것이다.

왜 용기를 선택합니까?


이 서비스는 특별한 점이 없습니다. 단지 한 무더기의 가상 머신을 계산 탱크로 사용하고 프로그램을 병행해서 실행할 뿐입니다.이것은 이 가상 머신들이 응용 프로그램을 실행하는 데 필요한 모든 구성 요소를 가지고 있어야 한다는 것을 의미한다.
가상 시스템 간에 구성 요소를 공유하기 위해 응용 프로그램을 등록할 수 있지만 준비가 필요합니다.
가상 시스템 운영 체제 구성 요소와 프로그램 간에 의존 관계나 버전 충돌이 너무 많다면, 용기는 당신이 필요로 하고 전체적으로 배치해야 할 모든 내용을 포함하기 때문에 문제를 간소화하는 가장 좋은 해결 방안입니다.

Azure 배치 및 컨테이너


만약 프로그래머이거나 GUI 코드를 작성하는 것을 더 좋아한다면 official doc: container workloads 을 참고하십시오. 여기에서python/C 코드 예시에 대한 상세한 설명을 찾을 수 있습니다.
저는 Azure Portal(GUI)을 사용할 것입니다. 왜냐하면 저를 포함한 일부 IT 직원들이 GUI를 더 좋아하기 때문입니다.

Azure 리소스


나는 장면에 다음과 같은 자원을 제공했다.
  • Azure 일괄 처리 계정
  • Azure 스토리지 계정
  • Azure 컨테이너 레지스트리(ACR)

  • ACR 키 가져오기


    Azure 배치 풀을 구성할 때 ACR에 대한 자격 증명 정보가 필요합니다.
    1. ACR | Access keys로 이동하여 "Admin user"를 활성화합니다.

    2. 다음 단계의 로그인 서버, 사용자 이름 및 암호를 복사합니다.

    풀 생성


    다음은 용기 지원을 사용하여 Azure 일괄 처리 컴퓨터 풀을 만듭니다.
    1. Azure 일괄 처리 서비스 계정 | 풀로 이동하여 추가 를 클릭합니다.

    2. 풀 생성을 시작합니다.용기를 지원하기만 하면 다른 그림을 사용할 수 있습니다.자세한 내용 here.
    다음 설정을 설정했습니다.
  • 풀 ID: 원하는 대로 설정할 수 있습니다
  • 이미지 유형: 시장
  • 발표자: microsoft azure batch
  • 견적: ubuntu 서버 용기
  • 재고 단위: 16-04-lts
  • 3. 컨테이너 구성에서 사용자 정의를 선택하고 컨테이너 등록을 클릭합니다.

    4. "추가"를 클릭하고 상기에서 얻은 등록표 정보를 입력하고 "확인"을 클릭한다.

    5. 추가된 레지스트리를 선택하고 선택을 클릭합니다.
    6. 나는 아직 그림이 없기 때문에 용기 이미지 이름을 잠시 비워 두었다.
    7. 필요에 따라 가상 머신의 크기와 규모를 선택합니다.우선 순위가 낮은 2개의 노드가 있는 최소 VM을 선택했습니다.

    이미지 등록


    예제 프로그램을 추가하여 ACR로 전송합니다.필요에 따라docker 이미지를 만들 수 있습니다.저는 C# 개발자이기 때문에 C# 컨트롤러 프로그램을 만들었습니다. 첫 번째 파라미터로 "Hello"를 인쇄하기만 하면 됩니다.
    프로그램반테러 정예
    using System;
    
    namespace samplebatch
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine($"Hello {args[0]}");
            }
        }
    }
    
    Dockerfile 파일
    FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS base
    WORKDIR /app
    
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
    WORKDIR /src
    COPY ["samplebatch/samplebatch.csproj", "samplebatch/"]
    RUN dotnet restore "samplebatch/samplebatch.csproj"
    COPY . .
    WORKDIR "/src/samplebatch"
    RUN dotnet build "samplebatch.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "samplebatch.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    #ENTRYPOINT ["dotnet", "samplebatch.dll"]
    
    프로그램을 자동으로 실행할 용기가 필요하지 않기 때문에 Entrypoint에 주석을 달았습니다.
    나는 로컬에서 용기를 운행했는데, 그것은 예상대로 작동했다.

    이미지를 ACR에 업로드합니다.나는 그것을 "v1"으로 표시했다.

    작업 및 작업 작성


    마지막으로 Azure 배치 작업 및 작업을 작성합니다.
    1. Azure Batch account | Jobs로 돌아가서 추가를 클릭합니다.

    2. 작업을 만듭니다.
  • 작업 ID: 원하는 이름
  • 풀: 컨테이너를 지원하는 생성된 풀 선택

  • 3. 생성된 작업을 선택하고 작업에서 추가 를 클릭합니다.

    4. 작업 ID의 이름을 지정합니다.
    5. 명령줄에 "dotnet samplebatch.dll ken"을 입력합니다.이 명령은docker 용기에서 실행됩니다.
    6. 이미지 이름의 전체 이름을 입력합니다.나의 예에서, 그것은 "azurebatchwithcontainer.azurecr.io/samplebatch:v1"이다.
    7. "컨테이너 실행 옵션"에 "-rm--workdir/app"을 추가합니다.
    8. 커밋을 클릭합니다.

    확인 결과


    작업 상태가 "완료됨"으로 바뀌면 결과를 확인할 수 있습니다.
    1. 상태가 완료됨으로 변경되었는지 확인합니다.

    2. 작업을 열고 stdout.txt를 엽니다.

    3. 확인 결과.

    무엇이 중요합니까


    내가 이것을 시도했을 때, 몇 군데 내가 끼었다.
  • 이미지 이름은 서버 이름과 태그를 포함한 전체 이름이 필요합니다.
  • 명령줄은docker 이미지에서 실행됩니다.
  • 작업 디렉터리가 루트 디렉터리가 아니라면 --workdir 옵션을 사용하십시오.
  • 코드를 업데이트할 때 다른 태그를 사용합니다. 그렇지 않으면 풀에서 새 태그를 다운로드하지 않습니다. 이름이 같으면 풀에서 캐시를 다시 사용하기 때문입니다.
  • "ENTRYPOINT"를 계속 사용하고 필요에 따라 파라미터를 지정할 수 있기 때문에 이것만 사용하면 문제를 해결할 수 있습니다.

    추가 정보


    여기서 설명한 내용 외에 다른 Azure 일괄 처리 기능도 사용할 수 있습니다.
  • 리소스 파일
  • 환경 설정
  • 저장된 출력 파일 등
  • 주요 차이점은 작업을 만들 때 컨테이너 지원 풀을 사용하고 **컨테이너 설정을 지정해야 한다는 점입니다.

    리소스 파일 액세스


    자원 파일을 작업에 할당할 때, 이 파일들은 용기가 아니라 노드에 저장됩니다.단, Azure 일괄 처리 서비스의 실례화된 용기 실례는 노드의 모든 폴더를 용기에 비추게 됩니다.
    환경 변수를 찾을 수 있습니다. wd 폴더 경로는 AZ\u BATCH\u TASK\u WORKING\u DIR 환경 변수에 저장됩니다.
    예를 들어, 나는 디렉터리의 모든 텍스트 파일을 읽을 수 있다.
    var batch_working_dir = Environment.GetEnvironmentVariable("AZ_BATCH_TASK_WORKING_DIR");
    // Read text file
    foreach (string file in Directory.EnumerateFiles(batch_working_dir, "*.txt", SearchOption.AllDirectories))
    {
        string contents = File.ReadAllText(file);
        Console.WriteLine(contents);
    }
    
    다른 파일과 출력에도 적용됩니다.

    자습서 총결산


    Azure 일괄 처리 작업 전과 환경 설정에 어려움을 겪고 있다면 용기를 사용해서 간소화하십시오!

    좋은 웹페이지 즐겨찾기