다음을 통해 공유


Azure Container Instances 안정성

이 문서에서는 ACI(Azure Container Instances) 안정성 지원에 대해 설명하고 가용성 영역을 사용한 지역 내 복원력과 재해 복구에 대한 정보를 모두 다룹니다. Azure의 안정성에 대한 포괄적인 개요는 Azure 안정성을 참조하세요.

가용성 영역 지원

가용성 영역은 각 Azure 지역 내에서 물리적으로 별도의 데이터 센터 그룹입니다. 한 영역이 실패하면 서비스가 나머지 영역 중 하나로 장애 조치(failover)될 수 있습니다.

Azure의 가용성 영역에 대한 자세한 내용은 가용성 영역이란?을 참조하세요.

ACI(Azure Container Instances)는 영역 컨테이너 그룹 배포를 지원합니다. 즉, 인스턴스가 자체 선택한 특정 가용성 영역에 고정됩니다. 가용성 영역은 컨테이너 그룹 수준에서 지정됩니다. 컨테이너 그룹 내의 컨테이너에는 고유한 가용성 영역이 있을 수 없습니다. 컨테이너 그룹의 가용성 영역을 변경하려면 컨테이너 그룹을 삭제하고 새 가용성 영역을 사용하여 다른 컨테이너 그룹을 만들어야 합니다.

필수 조건

  • 영역 컨테이너 그룹 배포는 Linux 및 Windows Server 2019 컨테이너 그룹에 ACI를 사용할 수 있는 대부분의 지역에서 지원됩니다. 자세한 내용은 지역 및 리소스 가용성을 참조하세요.
  • Azure CLI를 사용하는 경우 버전 2.30.0 이상이 설치되어 있는지 확인합니다.
  • PowerShell을 사용하는 경우 버전 2.1.1-preview 이상이 설치되어 있는지 확인합니다.
  • Java SDK를 사용하는 경우 버전 2.9.0 이상이 설치되어 있는지 확인합니다.
  • 가용성 영역 지원은 ACI API 버전 09-01-2021 이상에서만 사용할 수 있습니다.

Important

GPU 리소스가 있는 컨테이너 그룹은 현재 가용성 영역을 지원하지 않습니다.

가용성 영역 재배포 및 마이그레이션

컨테이너 그룹의 가용성 영역을 변경하려면 컨테이너 그룹을 삭제하고 새 가용성 영역을 사용하여 다른 컨테이너 그룹을 만들어야 합니다.

가용성 영역을 사용하도록 설정된 리소스 만들기

가용성 영역을 사용하도록 설정된 Container Instance 리소스를 만들려면 ARM(Azure Resource Manager) 템플릿을 사용하여 컨테이너 그룹을 배포해야 합니다.

참고 항목

이 문서의 예제는 Bash 셸용으로 서식이 지정되어 있습니다. 다른 셸을 사용하려는 경우 해당 셸에 따라 줄 연속 문자를 조정합니다.

ARM을 사용하여 컨테이너를 배포하려면 다음을 수행합니다.

  1. 다음 JSON을 azuredeploy.json이라는 새 파일에 복사하여 붙여넣습니다. 이 예제 템플릿은 단일 컨테이너가 있는 컨테이너 그룹을 미국 동부의 가용성 영역 1에 배포합니다.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "metadata": {
            "_generator": {
                "name": "bicep",
                "version": "0.4.1.14562",
                "templateHash": "12367894147709986470"
            }
        },
        "parameters": {
            "name": {
                "type": "string",
                "defaultValue": "acilinuxpublicipcontainergroup",
                "metadata": {
                    "description": "Name for the container group"
                }
            },
            "image": {
                "type": "string",
                "defaultValue": "mcr.microsoft.com/azuredocs/aci-helloworld",
                "metadata": {
                    "description": "Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries. Images from private registries require additional registry credentials."
                }
            },
            "port": {
                "type": "int",
                "defaultValue": 80,
                "metadata": {
                    "description": "Port to open on the container and the public IP address."
                }
            },
            "cpuCores": {
                "type": "int",
                "defaultValue": 1,
                "metadata": {
                    "description": "The number of CPU cores to allocate to the container."
                }
            },
            "memoryInGb": {
                "type": "int",
                "defaultValue": 2,
                "metadata": {
                    "description": "The amount of memory to allocate to the container in gigabytes."
                }
            },
            "restartPolicy": {
                "type": "string",
                "defaultValue": "Always",
                "allowedValues": [
                    "Always",
                    "Never",
                    "OnFailure"
                ],
                "metadata": {
                    "description": "The behavior of Azure runtime if container has stopped."
                }
            },
            "location": {
                "type": "string",
                "defaultValue": "eastus",
                "metadata": {
                    "description": "Location for all resources."
                }
            }
        },
        "functions": [],
        "resources": [
            {
                "type": "Microsoft.ContainerInstance/containerGroups",
                "apiVersion": "2021-09-01",
                "zones": [
                    "1"
                ],
                "name": "[parameters('name')]",
                "location": "[parameters('location')]",
                "properties": {
                    "containers": [
                        {
                            "name": "[parameters('name')]",
                            "properties": {
                                "image": "[parameters('image')]",
                                "ports": [
                                    {
                                        "port": "[parameters('port')]",
                                        "protocol": "TCP"
                                    }
                                ],
                                "resources": {
                                    "requests": {
                                        "cpu": "[parameters('cpuCores')]",
                                        "memoryInGB": "[parameters('memoryInGb')]"
                                    }
                                }
                            }
                        }
                    ],
                    "osType": "Linux",
                    "restartPolicy": "[parameters('restartPolicy')]",
                    "ipAddress": {
                        "type": "Public",
                        "ports": [
                            {
                                "port": "[parameters('port')]",
                                "protocol": "TCP"
                            }
                        ]
                    }
                }
            }
        ],
        "outputs": {
            "containerIPv4Address": {
                "type": "string",
                "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups', parameters('name'))).ipAddress.ip]"
            }
        }
    }
    
  2. az group create 명령을 사용하여 리소스 그룹을 만듭니다.

    az group create --name myResourceGroup --location eastus
    
  3. az deployment group create 명령을 사용하여 템플릿을 배포합니다.

    az deployment group create \
      --resource-group myResourceGroup \
      --template-file azuredeploy.json
    
  4. 가용성 영역에 성공적으로 배포된 컨테이너 그룹을 확인하려면 az container show 명령을 사용하여 컨테이너 그룹 세부 정보를 확인합니다.

    az container show --name acilinuxpublicipcontainergroup --resource-group myResourceGroup
    

영역 장애 조치 지원

컨테이너 인스턴스의 컨테이너 그룹은 단일 가용성 영역에 할당됩니다. 따라서 해당 컨테이너 인스턴스 그룹은 동일한 지역의 다른 가용성 영역에서 발생하는 중단의 영향을 받지 않습니다.

그러나 컨테이너 그룹의 가용성 영역에서 중단이 발생하면 해당 그룹 내의 모든 컨테이너 인스턴스에 가동 중지 시간이 발생할 수 있습니다.

컨테이너 인스턴스 가동 중지 시간을 방지하려면 지정된 지역의 서로 다른 두 가용성 영역에 컨테이너 그룹을 최소 두 개 만드는 것이 좋습니다. 이렇게 하면 해당 지역의 단일 영역이 중단될 때마다 컨테이너 인스턴스 리소스가 가동되고 실행됩니다.

재해 복구

전체 Azure 지역 또는 데이터 센터에서 가동 중지 시간이 발생하면 중요 업무용 코드는 다른 지역에서 계속 처리해야 합니다. 영역 구성을 사용하여 배포된 Azure Container Instances는 특정 지역 내의 특정 영역에서 실행됩니다. 사용 가능한 기본 제공 중복이 없습니다. 지역 전체가 중단되는 중에 실행 손실을 방지하기 위해 다른 지역에 컨테이너 인스턴스를 중복 배포할 수 있습니다.

다음 단계