Azure에서 VM 이미지를 관리하고 강화하는 6가지 간단한 방법


VM 이미지를 관리하는 것은 악몽일 수 있습니다.다음은 Azure에서 틈새 없이 이미지를 구축, 공유, 테스트, 복제하는 6가지 간단한 방법입니다.보상으로 이벤트 구동 구조를 바탕으로 이미지 알림을 구축하는 방법도 알 수 있습니다.

문제


100개 이상의 VM을 관리하든 1000개 이상의 구축 및 강화된 VM을 관리하든 이미지를 수동으로 관리하시겠습니까?만약 네가 이렇게 한다면, 이것은 상당히 비싸고, 검출하기 어려운 오류와 잠재적인 안전 결함을 초래한다는 것을 알게 될 것이다.
다음은 내가 어떻게 나의 고객을 위해 이 문제를 해결할 것인가이다.Azure를 위한 이미지 관리 프로세스를 만듭니다.

1. Azure image Builder를 사용하여 이미지 만들기


Azure Image Builder는 Azure CLI를 사용하여 사용자 정의 이미지를 만들 수 있는 서비스입니다.JSON 템플릿 기반 이미지 생성의 예는 다음과 같습니다.
{
    "type": "Microsoft.VirtualMachineImages/imageTemplates",
    "apiVersion": "2019-05-01-preview",
    "location": "<region>",
    "dependsOn": [],
    "tags": {
        "imagebuilderTemplate": "ubuntu1804",
        "userIdentity": "enabled"
            },
        "identity": {
            "type": "UserAssigned",
                    "userAssignedIdentities": {
                    "<imgBuilderId>": {}

                }
                },
    "properties": {

        "buildTimeoutInMinutes" : 80,

        "vmProfile": 
            {
            "vmSize": "Standard_D1_v2",
            "osDiskSizeGB": 30
            },

        "source": {
            "type": "PlatformImage",
                "publisher": "Canonical",
                "offer": "UbuntuServer",
                "sku": "18.04-LTS",
                "version": "latest"

        },
        "customize": [
            {
                "type": "Shell",
                "name": "RunScriptFromSource",
                "scriptUri": "https://raw.githubusercontent.com/danielsollondon/azvmimagebuilder/master/quickquickstarts/customizeScript.sh"
            }          

        ],
        "distribute": 
            [

            ]
        }
    }
나는 원래의 틀을 삭감해야 한다. 왜냐하면 그것은 상당히 길기 때문이다.여기서 너는 완전한 예를 찾을 수 있다.
ARM 템플릿은 다음과 같은 속성을 포함하는 매우 간단합니다.
  • 표지 부분은 필수입니다. 이미지 생성기에 위탁 관리 표지를 만들어야 이미지 생성 및 편집에 접근할 수 있습니다
  • VM 구성 계획 설정을 위한 VmProfile
  • 소스에서 기본 이미지 매개변수를 지정할 수 있습니다.저는 Canonical
  • 의 최신 Ubuntu 서버 18.04 LTS를 사용합니다.
  • 사용자 정의 섹션에서는 VM 강화 스크립트를 지정할 수 있습니다.
  • Here 이미지 생성기 옵션의 전체 목록을 볼 수 있습니다.

    이점


    템플릿과 프로세스 자체는 이해하기 쉽고 Azure DevOps와 쉽게 통합할 수 있습니다.

    결점


    이미지 생성기는 여전히 심사 중이기 때문에 생산에서 사용하는 것을 권장하지 않습니다.Hashicorp Packer에 비해 설정이 어려울 수 있습니다.(다음 절에서 차단기를 사용하는 방법을 설명합니다.)

    2. Hashicorp 패키지를 사용하여 이미지 구축


    Hashicorp Packer는 JSON 템플릿을 기반으로 사용자 정의 이미지를 구축할 수 있는 다중 플랫폼 솔루션입니다.JSON 템플릿의 구조가 양호하고 이해하기 쉬운 대상 모델을 바탕으로 한다.JSON 템플릿은 통신기, 구축기, 공급기, 후처리기 등 세 개의 루트만 있습니다.
    Here JSON 템플릿을 찾을 수 있습니다.
    JSON 템플릿은 미리 설치된 NGINX 웹 서버와 다른 업데이트를 사용하여 Ubuntu의 VHD 이미지를 만듭니다.여기서 너는 다른 템플릿을 많이 찾을 수 있다.
    packer를 설정하려면 Chocolatie package manager를 사용합니다.
    choco install packer -y
    
    다음 명령을 사용하여 JSON 템플릿을 실행할 수 있습니다.
    packer build <path/your/template.json>
    
    템플릿을 실행하기 전에 다음과 같은 적절한 권한이 있는 관리 ID 또는 서비스 주체를 작성해야 합니다.
    az ad sp create-for-rbac -n "ImageContributor" 
     --role contributor `    
     --scopes /subscriptions/<subscription_id> `     
     --sdk-auth > az-principal.auth
    
    이 명령은clientId,clientSecret,tenantId,subscriptionId 및 기타 필드가 있는 JSON 파일을 자동으로 만듭니다.

    이점


    패키지와 JSON 템플릿은 이해하기 쉽습니다.환경을 빠르게 설정하고 이미지 구축을 시작할 수 있습니다.또 하나의 강력한 지역사회가 있다.또한 Packer는 여러 클라우드 공급업체를 지원합니다.

    결점


    나는 어떤 심각한 결점도 발견하지 못했다.그러나 이미지를 구축할 때 패키지는 이미지 작업에 필요한 디스크를 항상 제거합니다.예를 들어, 이미지를 복사하는 데 사용됩니다.

    3. 사진 공유


    Azure에서 이미지를 공유하려면 공유 이미지 라이브러리를 사용할 수 있습니다.다음을 수행할 수 있습니다.
    - 이미지 정의 만들기
    - 이미지 버전 유지
    - 이미지 공유
    예를 들어, Azure 구독, 리소스 그룹, 임차인 간에 이미지를 공유할 수 있습니다.

    현재 장면에서 사용자 그룹이나 단일 사용자/서비스 주체를 만들 수 있으며, 이 공유 이미지 라이브러리에만 참여자 권한을 할당할 수 있습니다.
    az ad sp create-for-rbac -n "ImageContributor" 
     --role contributor `    
     --scopes /subscriptions/<subscr-id>/resourceGroups/sig-we-rg/providers/Microsoft.Compute/galleries/testsig
    
    따라서 이 그룹에서 온 사용자는 서로 다른 구독에서 이 공유 이미지 라이브러리의 Ubuntu 이미지를 바탕으로 가상 머신을 만들 수 있습니다.
    az vm create `
      --resource-group myResourceGroup `
      --name UbuntuVM`
      --image "/subscriptions/<subscr-id>/resourceGroups/sig-we-rg/providers/Microsoft.Compute/galleries/testsig/images/ubuntu-server-image-def/versions/1.0.0" \
      --admin-username azureuser \
      --generate-ssh-keys
    

    이점


    Azure 공유 이미지 라이브러리를 사용하면 조직 내에서 이미지를 쉽게 구축, 공유, 관리, 사용자 정의할 수 있습니다.SIG에는 Azure CLI가 있으므로 이미지 배포를 쉽게 자동화할 수 있습니다.

    결점


    이미지는 공유 액세스 라이브러리에 유지됩니다.그래서 물리적으로 그곳에 머물렀다.따라서 구독자 간에 공유할 때, 구독자마다 단독으로 변경하거나 삭제할 수 없습니다.

    4. 이미지 복사


    이미지를 복사하면 한 구독에서 다른 구독으로, 또는 한 자원 그룹에서 다른 자원 그룹으로 이미지를 전달할 수 있습니다.복사된 모든 이미지는 서로 독립적입니다.Azure Image copy extension을 사용하여 이미지를 복사하거나 Go를 사용하여 수동으로 복사할 수 있습니다.아래의 예를 봅시다.

    Az Copy Extension을 사용하여 이미지 복사



    구독 간에 이미지를 복사하기 위해 Az Image copy extension을 사용합니다.이것은 자원 그룹 a에서 새 이미지를 만듭니다.
    복제 확장 설치:
    az extension add --name image-copy-extension
    
    복사 명령:
    az image copy --source-resource-group Azure-Resource-Group-B `
                  --source-object-name image-version-1.0 `
                  --target-resource-group Azure-Resource-Group-A `
                  --target-location westeurope `
                  --target-subscription 111111-2222-2222-0000-0000000 ` # Subscription A
                  --cleanup
    
    중요했어관리되는 이미지를 생성하면 Packer는 자동으로 디스크를 제거합니다.

    이점


    Az Image Copy extension은 사용하기 쉽고 자동화됩니다.

    결점


    이미지에 관리되는 CD가 있어야 합니다. 그렇지 않으면 복제 프로세스가 실패하고 자원을 찾을 수 없음 오류 메시지가 표시됩니다.

    이미지 수동 복사



    Az Copy Image Extension을 사용할 수 없는 경우 스토리지 계정에 VHD 이미지를 생성하여 다른 대상 스토리지 계정으로 복사할 수 있습니다.
    프로세스 워크플로우:
  • 소스 및 대상 계정인 스토리지 계정 2개 생성
  • 소스 스토리지 계정에 VHD 이미지를 생성합니다.1절의 Packer 스크립트를 사용할 수 있습니다.
  • VHD 소스 이미지에 대한 공유 액세스 서명을 생성합니다.여기서 Azure CLI를 사용하는 방법에 대한 예제를 확인할 수 있습니다.
  • 이미지를 복사합니다.프레젠테이션을 위해 다음 Go 스크립트를 사용했습니다.또한 AzCopy 도구here를 사용하여 이 작업을 수행하는 방법을 보여 줍니다.
  • 소스 코드here를 찾을 수 있습니다.

    이점


    현재 이미지 처리 워크플로우는 완전히 사용자 정의되어 있습니다.따라서 언제든지 변경할 수 있습니다.또한 Az 이미지 복사 확장이 작동하지 않을 때도 유용합니다.예를 들어, 이미지를 생성할 때 관리되는 디스크를 제거할 때

    결점


    다음과 같은 모든 워크플로우 단계를 구현해야 합니다.
    - creating VHD
    - generating and managing SAS token
    - copying an image
    - cleaning up
    - converting an image
    

    5, 이미지 및 디스크 변환


    VHD 이미지를 관리형 디스크로 변환하거나 관리형 디스크를 VHD 이미지로 변환하는 작업입니다.이미지 복사 과정에서 Azure Shared Image Gallery를 사용하여 전체 조직에서 이미지를 배포해야 할 때, 그리고 새 가상 시스템을 시작해야 할 때 유용합니다.
    또한 일부 구형 VHD가 있고 업데이트를 설치하고 자동 백업을 설정하며 가용성 세트 및 가용성 영역을 사용해야 할 때도 유용합니다.
    Here는 관리되는 이미지의 장점 목록입니다.

    VHD 이미지를 관리형 디스크로 변환


    # Provide the subscription Id where Managed Disks will be created
    $subscriptionId = '00000-00000-0000-0000-0000000'
    
    # Provide the name of your resource group where Managed Disks will be created. 
    $resourceGroupName ='HBI'
    
    # Provide the name of the Managed Disk
    $diskName = 'image-test-disk'
    
    # The Disk It should be greater than the VHD file size.
    $diskSize = '130'
    
    # Storage LRS. Options: Premium_LRS, Standard_LRS, etc
    $storageType = 'Premium_LRS'
    
    # Set Azure region (e.g. westus, westeurope), Ensure that location of the VHD image (alongside with Storage Account), 
    # and future Managed Disk is the same.
    $location = 'westeurope'
    
    # Set URI of the VHD file (page blob) in a storage account.
    $sourceVHDURI = 'https://imagesstorage.blob.core.windows.net/test-image-disk.vhd'
    
    # Set the Resource Id of the Source storage account where VHD file is stored. You can avoid it if VHD in the same subscription
    $storageAccountId = '/subscriptions/subscription-id/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/imagesstorage'
    
    #Set the context to the subscription Id where Managed Disk will be created
    Select-AzSubscription -SubscriptionId $SubscriptionId
    
    $diskConfig = New-AzDiskConfig -AccountType $storageType -Location $location -CreateOption Import -StorageAccountId $storageAccountId -SourceUri $sourceVHDURI
    
    New-AzDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $diskName
    

    관리되는 디스크를 관리되는 이미지로 변환


    $rgName = "HBI"
    $location = "westeurope"
    $imageName = "boriszn-test-imagefromdisk"
    
    
    # Get disk 
    $disk = Get-AzDisk -ResourceGroupName 'HBI' -DiskName 'image-test-disk' 
    $diskId = $disk.Id
    
    # Create Managed Image Config with Managed Disk Info 
    # OS Types (Linux, Windows)
    $imageConfig = New-AzImageConfig -Location $location
    $imageConfig = Set-AzImageOsDisk -Image $imageConfig -OsState Generalized -OsType Linux -ManagedDiskId $diskId
    
    # Create the image.
    $image = New-AzImage -ImageName $imageName -ResourceGroupName $rgName -Image $imageConfig
    

    이점


    이 두 가지 cmdlet을 사용하면 서로 다른 구독과 자원 그룹을 뛰어넘어 Azure 공유 이미지에 이미지를 전달할 수 있습니다.

    결점


    변환 프로세스가 복잡할 수 있습니다. 일부 이미지는 유행이 지났을 수도 있고 변환 프로세스가 실패할 수도 있습니다.

    6. 테스트 이미지


    이미지를 테스트하려면 이미지 라이브러리에서 새 가상 머신을 시작하고 이미지 정의를 사용하십시오
    az vm create `
       --resource-group container-image-rg `
       --name vm-test `
       --image "/subscriptions/<subscription-id>/resourceGroups/container-image-rg/providers/Microsoft.Compute/galleries/test-gallery/images/image-test-def" `
       --generate-ssh-keys 
    

    이점


    명령과 과정 자체는 매우 간단하다.

    결점


    JSON 구성에 특정 소프트웨어와 서비스가 제대로 설치되어 있는지 확인하지 않습니다.따라서 이 논리는 반드시 단독으로 실현되어야 한다.

    이미지 게시/하위 시스템 개념(상금)


    여러 구독자나 자원 그룹에 걸쳐 이미지를 관리하는 것은 어려울 수 있습니다. 특히 이미지의 새로운 버전을 끊임없이 생성하거나 자동화된 프로세스를 통해 새로운 가상 머신을 시작할 때입니다.
    이 경우 새 이미지를 만들 때 다른 구성 요소를 알리는 알림 시스템을 구축해야 합니다. Azure 공유 이미지 라이브러리에 새 버전이나 이미지 정의가 표시됩니다.필터가 있는 Azure 이벤트 격자를 사용하여 쉽게 만들 수 있습니다.
    이벤트 격자, 대기열, Webhook, Azure 서비스 버스를 사용하여 메시지를 대상 구성 요소here에 전달하는 방법을 볼 수 있습니다.

    결론


    그렇습니다.이러한 방법을 바탕으로 Azure DevOps에서 이미지 강화 및 관리 파이프를 쉽게 설정할 수 있습니다.

    좋은 웹페이지 즐겨찾기