AKS(Azure Kubernetes Service) PIS(준비된 이미지 사양) 만들기 및 관리(미리 보기)

PIS(준비된 이미지 사양)를 사용하면 필요한 컨테이너 이미지 및 사용자 지정을 포함하는 미리 구성된 노드 이미지를 정의할 수 있습니다. AKS는 준비된 이미지를 한 번 빌드하고 노드 프로비전 중에 다시 사용하므로 후속 크기 조정 작업에 대한 시작 시간이 줄어듭니다. 준비된 이미지 사양의 작동 방식 및 사용 시기에 대한 자세한 내용은 AKS(미리 보기)의 준비된 이미지 사양을 참조하세요.

이 문서에서는 AKS에서 PIS를 만들고 관리하는 방법을 보여 줍니다.

중요합니다

AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.

사전 요구 사항

  • 지원되는 Kubernetes 버전을 실행하는 기존 AKS 클러스터입니다. 없는 경우 AKS 클러스터 만들기를 참조하세요.
  • Azure CLI 버전 2.85.0 이상. az --version를 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • 리소스 그룹에서 AKS 리소스를 만들고 관리하려면 적절한 Azure RBAC 권한이 필요합니다.
  • 컨테이너 이미지는 AKS 클러스터에서 액세스할 수 있어야 합니다. ACR(Azure Container Registry)을 사용하는 경우 AKS 클러스터와 통합되어 있는지 확인합니다.
  • aks-preview CLI 확장 버전 21.0.0b5 이상. 없는 경우 CLI 확장 설치를 aks-preview참조하세요.
  • AKSPreparedImageSpecificationPreview 구독에 등록된 기능 플래그입니다. 등록하지 않은 경우 기능 플래그 등록을 AKSPreparedImageSpecificationPreview참조하세요.

Limitations

미리 보기 중에는 다음과 같은 제한 사항이 적용됩니다.

  • 소버린 클라우드 및 에어갭 환경을 제외한 퍼블릭 Azure 지역에서 사용할 수 있습니다.
  • 지원되는 운영 체제에는 Ubuntu, Azure Linux 및 Windows 포함됩니다.
  • 사용자 지정 스크립트는 이미지 빌드 또는 확장 실패를 일으킬 수 있습니다.
  • 기존 사양을 수정할 때 다시 만들어야 할 수도 있습니다.

aks-preview CLI 확장 설치

명령을 사용하여 aks-preview CLI 확장을 설치합니다 az extension add .

az extension add --name aks-preview

명령을 사용하여 최신 버전을 설치하도록 확장을 업데이트합니다 az extension update .

az extension update --name aks-preview

AKSPreparedImageSpecificationPreview 기능 플래그 등록

  1. AKSPreparedImageSpecificationPreview 명령을 사용하여 구독에 az feature register 기능 플래그를 등록합니다.

    az feature register \
      --namespace Microsoft.ContainerService \
      --name AKSPreparedImageSpecificationPreview
    
  2. 명령을 사용하여 등록 상태를 확인합니다 az feature show .

    az feature show \
      --namespace Microsoft.ContainerService \
      --name AKSPreparedImageSpecificationPreview
    
  3. 기능 플래그가 등록되면 az provider register 명령을 사용하여 Microsoft.ContainerService 리소스 공급자의 등록을 새로 고치세요.

    az provider register --namespace Microsoft.ContainerService
    

PIS(준비된 이미지 사양) 만들기

기본 준비된 이미지 사양 만들기

az aks prepared-image-specification create 명령을 사용하여 PIS를 만듭니다.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
PIS_NAME=<your-pis-name>
LOCATION=<location>
PIS_VERSION=v1

# Create a basic Prepared Image Specification
az aks prepared-image-specification create \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --version $PIS_VERSION \
    --location $LOCATION

캐시된 이미지를 사용하여 준비된 이미지 사양 만들기

명령을 사용하여 컨테이너 이미지를 미리 캐시하는 PIS를 만듭니다 az aks prepared-image-specification create .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
PIS_NAME=<your-pis-name>
LOCATION=<location>
PIS_VERSION=v1

# Create a Prepared Image Specification with cached images
az aks prepared-image-specification create \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --version $PIS_VERSION \
    --container-images \
        myacr.azurecr.io/model-server:v1 \
        myacr.azurecr.io/inference:v1

사용자 지정 스크립트를 사용하여 준비된 이미지 사양 만들기

az aks prepared-image-specification create 명령을 사용하여 이미지 빌드 중 사용자 지정 스크립트를 실행하도록 PIS를 만듭니다.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
PIS_NAME=<your-pis-name>
LOCATION=<location>
PIS_VERSION=v1

# Create a Prepared Image Specification using custom scripts
az aks prepared-image-specification create \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --version $PIS_VERSION \
    --customization-scripts @scripts.json

준비된 이미지 사양을 사용하여 클러스터 또는 노드 풀 만들기

PIS를 만든 후 클러스터 또는 노드 풀을 만들거나 업데이트할 때 참조할 수 있습니다. 준비된 이미지 버전의 리소스 ID가 필요합니다.

PIS를 사용하여 클러스터 만들기

  1. 명령을 사용하여 PIS 버전 리소스 ID를 가져옵니다 az aks prepared-image-specification version show .

    # Set environment variables
    RESOURCE_GROUP=<your-resource-group>
    PIS_NAME=<your-pis-name>
    PIS_VERSION=v1
    
    # Get the PIS version resource ID
    PIS_VERSION_ID=$(az aks prepared-image-specification version show \
        --resource-group $RESOURCE_GROUP \
        --pis-name $PIS_NAME \
        --name $PIS_VERSION \
        --query id -o tsv)
    
  2. az aks create 매개 변수를 사용하여 --prepared-image-specification-id 명령으로 준비된 이미지를 참조하는 새 AKS 클러스터를 만듭니다.

    # Set environment variables
    CLUSTER_NAME=<your-aks-cluster-name>
    
    # Create a new AKS cluster using the prepared image
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --prepared-image-specification-id $PIS_VERSION_ID \
        --generate-ssh-keys
    

PIS를 사용하여 노드 풀 만들기

  1. 명령을 사용하여 PIS 버전 리소스 ID를 가져옵니다 az aks prepared-image-specification version show .

    # Set environment variables
    RESOURCE_GROUP=<your-resource-group>
    PIS_NAME=<your-pis-name>
    PIS_VERSION=v1
    
    # Get the PIS version resource ID
    PIS_VERSION_ID=$(az aks prepared-image-specification version show \
        --resource-group $RESOURCE_GROUP \
        --pis-name $PIS_NAME \
        --name $PIS_VERSION \
        --query id -o tsv)
    
  2. az aks nodepool add 매개 변수를 사용한 --prepared-image-specification-id 명령으로 준비된 이미지를 참조하는 새 노드 풀을 만듭니다.

    # Set environment variables
    CLUSTER_NAME=<your-aks-cluster-name>
    
    # Create a new node pool using the prepared image
    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --name userpool \
        --prepared-image-specification-id $PIS_VERSION_ID
    
  3. 노드 풀이 명령을 사용하여 PIS를 사용하고 있는지 확인합니다 az aks nodepool show .

    az aks nodepool show \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --name userpool \
        --query "{state:provisioningState, pisId:preparedImageSpecificationId}"
    

준비된 이미지 사양 관리

준비된 이미지 사양 나열

명령을 사용하여 리소스 그룹의 모든 준비된 이미지 사양을 나열합니다 az aks prepared-image-specification list .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>

# List all Prepared Image Specifications in the resource group
az aks prepared-image-specification list --resource-group $RESOURCE_GROUP

특정 준비된 이미지 사양 표시

명령을 사용하여 특정 준비된 이미지 사양의 세부 정보를 가져옵니다 az aks prepared-image-specification show .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# Show the details of the Prepared Image Specification
az aks prepared-image-specification show \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME

준비된 이미지 사양 메타데이터 업데이트

PIS 리소스 및 PIS 버전이라는 두 가지 리소스 개념이 있습니다. 태그와 같은 PIS 메타데이터를 업데이트하면 PIS 리소스가 업데이트되고 참조된 버전의 이미지 또는 스크립트가 변경되지 않습니다. 컨테이너 이미지 또는 스크립트를 변경하려면 새 PIS 버전을 만들고 해당 PIS 버전 ID를 참조하도록 노드 풀을 업데이트합니다.

명령을 사용하여 기존 준비된 이미지 사양에서 태그와 같은 메타데이터를 업데이트할 az aks prepared-image-specification update 수 있습니다. 컨테이너 이미지 또는 스크립트를 변경하려면 대신 새 버전을 만듭니다.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# Update the Prepared Image Specification metadata
az aks prepared-image-specification update \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --tags environment=prod

준비된 이미지 사양의 모든 버전 나열

명령을 사용하여 준비된 이미지 사양의 모든 버전을 나열합니다 az aks prepared-image-specification version list .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# List all versions of the Prepared Image Specification
az aks prepared-image-specification version list \
    --resource-group $RESOURCE_GROUP \
    --pis-name $PIS_NAME

준비된 이미지 사양의 특정 버전 표시

az aks prepared-image-specification version show 매개 변수를 PIS 버전으로 설정한 --name 명령을 사용하여 특정 버전의 세부 정보를 확인합니다.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>
PIS_VERSION=v1

# Show the details of the specific version of the Prepared Image Specification
az aks prepared-image-specification version show \
    --resource-group $RESOURCE_GROUP \
    --pis-name $PIS_NAME \
    --name $PIS_VERSION

특정 준비된 이미지 사양을 사용하는 노드 풀 나열

준비된 이미지 사양을 참조하는 클러스터의 모든 노드 풀을 찾으려면 JMESPath 필터와 함께 명령을 사용합니다 az aks nodepool list .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>

# List all node pools in the cluster that reference a Prepared Image Specification
az aks nodepool list \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $CLUSTER_NAME \
    --query "[?preparedImageSpecificationId != null]"

준비된 이미지 사양 버전 업그레이드

기본 이미지, 종속성 또는 사용자 지정이 변경되면 새 버전을 만들고 노드 풀을 업데이트하여 참조합니다. 권장 워크플로는 다음과 같습니다.

  1. 업데이트된 컨테이너 이미지 또는 스크립트를 사용하여 새 버전을 만듭니다.

  2. 비프로덕션 노드 풀에서 새 버전의 유효성을 검사합니다.

  3. 새 버전을 참조하도록 프로덕션 노드 풀을 업데이트합니다.

    # Set environment variables
    RESOURCE_GROUP=<your-resource-group>
    CLUSTER_NAME=<your-aks-cluster-name>
    NEW_PIS_VERSION_ID=<new-pis-version-resource-id>
    
    # Update a node pool to reference a new PIS version using the `az aks nodepool update` command
    az aks nodepool update \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --name userpool \
        --prepared-image-specification-id $NEW_PIS_VERSION_ID
    
  4. 비용 최적화를 위해 사용하지 않는 이미지를 정리합니다.

AKS 버전 업그레이드

Kubernetes 버전을 업그레이드하면 AKS는 참조된 PIS 버전에 대해 준비된 VHD를 자동으로 다시 빌드합니다. Kubernetes 버전 업그레이드를 위해 새 PIS 버전을 만들 필요가 없습니다. 컨테이너 이미지 또는 스크립트와 같은 PIS 콘텐츠가 변경되면 새 PIS 버전을 만들어야 합니다.

명령을 사용하여 사용 가능한 업그레이드를 확인합니다 az aks get-upgrades .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>

# Check for available upgrades
az aks get-upgrades \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME

명령을 사용하여 클러스터를 업그레이드합니다 az aks upgrade .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
KUBERNETES_VERSION=<new-kubernetes-version>

# Upgrade the cluster to the new Kubernetes version
az aks upgrade \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --kubernetes-version $KUBERNETES_VERSION

중요합니다

프로덕션 노드 풀을 업그레이드하기 전에 새 Kubernetes 및 노드 이미지 버전을 대상으로 하는 새 준비된 이미지 사양 버전을 만들고 유효성을 검사합니다.

명령을 사용하여 특정 노드 풀을 업그레이드합니다 az aks nodepool upgrade .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
NODE_POOL_NAME=<your-node-pool-name>

# Upgrade the node pool to the new Kubernetes version
az aks nodepool upgrade \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $CLUSTER_NAME \
    --name $NODE_POOL_NAME

노드 풀에서 준비된 이미지 사양 제거

노드 풀에서 준비된 이미지 사양 사용을 중지하려면 az aks nodepool update 매개변수에 빈 문자열을 지정하여 --prepared-image-specification-id 명령으로 노드 풀을 업데이트합니다.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>

# Remove the Prepared Image Specification from the node pool
az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name userpool \
  --prepared-image-specification-id ""

준비된 이미지 사양 버전 삭제

명령을 사용하여 특정 버전을 삭제합니다 az aks prepared-image-specification version delete .

중요합니다

노드 풀에서 참조하는 PIS 버전을 삭제하지 마세요. 대신 PIS를 제거하거나 다른 PIS 버전을 참조하도록 노드 풀을 업데이트해야 합니다. 참조된 버전을 삭제하면 AKS가 준비된 이미지를 성공적으로 다시 빌드하거나 롤링하지 못할 수 있습니다.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>
PIS_VERSION=<your-pis-version>

# Delete the specific version of the Prepared Image Specification
az aks prepared-image-specification version delete \
    --resource-group $RESOURCE_GROUP \
    --pis-name $PIS_NAME \
    --name $PIS_VERSION

준비된 이미지 사양 삭제

명령을 사용하여 전체 준비된 이미지 사양 리소스를 삭제합니다 az aks prepared-image-specification delete .

중요합니다

PIS 리소스를 삭제하기 전에 해당 버전을 참조하는 노드 풀이 없는지 확인합니다. 참조를 찾으면 PIS 리소스를 삭제하기 전에 참조를 제거하거나 업데이트합니다. 참조된 PIS를 삭제하면 AKS가 준비된 이미지를 성공적으로 다시 빌드하거나 롤링하지 못할 수 있습니다.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# Delete the Prepared Image Specification
az aks prepared-image-specification delete \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME

준비된 이미지 사양 성능 모니터링

PIS가 사용자 환경에서 프로비저닝 대기 시간을 줄이는지 여부를 평가하려면 다음 메트릭을 모니터링합니다.

  • 노드 프로비전 기간 및 준비 시간: 준비된 이미지를 사용하지 않는 노드와 비교합니다.
  • 스케일 아웃 완료 시간: 자동 크기 조정기 트리거에서 준비 상태의 노드로의 시간입니다.
  • 이미지 빌드 기간 및 빌드 성공률: 이미지 준비 파이프라인의 상태를 추적합니다.
  • Pod 시작 시간 및 컨테이너 이미지 끌어오기 기간: 이미지 사전 캐싱이 효과적으로 사용되고 있는지 확인합니다.

사전 준비된 이미지 사양 문제 해결

PIS 관련 오류에는 실패 이유가 포함되어야 하며, 많은 오류가 사용자 지정 스크립트에서 발생할 수 있습니다. PIS를 추가한 후 노드 풀 만들기 또는 확장이 실패하는 경우 새 버전을 만들거나 노드 풀 참조를 업데이트하기 전에 이미지 빌드/사용자 지정 스크립트 로그를 검사하고 스크립트의 유효성을 검사해야 합니다.

이미지 만들기 실패

Note

이미지 빌드 중에 사용자 지정 스크립트가 실패하면 AKS는 고객이 VM을 시작하고 디버그할 수 있도록 삭제하는 대신 빌드 VM의 할당을 취소합니다. 나중에 PIS를 다시 배포할 때 AKS는 가상 머신 확장 집합/빌드 리소스를 삭제하고 다시 만듭니다.

PIS가 준비된 이미지를 빌드하지 못하는 경우 다음을 확인합니다.

  • 유효하지 않거나 형식이 잘못된 사용자 지정 스크립트입니다.
  • 컨테이너 레지스트리 인증 실패 - AKS 클러스터가 지정된 레지스트리에 대한 끌어오기 액세스 권한이 있는지 확인합니다.
  • 리소스 그룹 또는 레지스트리에 대한 Azure RBAC 권한이 없습니다.
  • 대상 OS에 대해 지원되지 않는 사용자 지정 형식입니다.

노드 풀 만들기 실패

PIS를 참조하는 노드 풀을 만들지 못하는 경우 다음을 확인합니다.

  • PIS 버전 ID가 유효하고 버전이 동일한 지역에 있습니다.
  • 구독에 요청된 VM SKU에 대한 충분한 할당량이 있습니다.
  • 요청된 VM SKU는 준비된 이미지에서 지원됩니다.
  • 이 지역은 미리 보기 중에 PIS 기능을 지원합니다.

크기 조정 작업이 더 빠르지 않음

프로비저닝 시간이 줄어들지 않는다면 다음 사항을 확인하세요:

  • 가속화하려는 컨테이너 이미지가 PIS 버전에 포함됩니다.
  • 노드 풀은 올바른 버전을 참조합니다.
  • 새 노드는 기본 AKS 노드 이미지가 아닌 준비된 이미지에서 부팅됩니다.
  • 병목 현상은 워크로드 시작 또는 기타 초기화가 아닌 컨테이너 이미지 끌어오기 시간입니다.

자원을 정리하세요

테스트 목적으로 이 문서에서 리소스를 만든 경우, 작업이 끝나면 계속 요금이 부과되지 않도록 해당 리소스를 삭제하세요. 여기에는 PIS 버전, PIS 리소스, 테스트 노드 풀 및 테스트 AKS 클러스터가 포함됩니다.

리소스 그룹 및 리소스의 모든 리소스를 삭제하려면 이 az group delete 명령을 사용합니다.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>

# Delete the resource group and all resources in it
az group delete \
    --name $RESOURCE_GROUP \
    --yes \
    --no-wait

준비된 이미지 사양에 대한 자세한 내용은 AKS(미리 보기)에서 준비된 이미지 사양을 참조하세요.