Container Insights를 사용하여 하이브리드 Kubernetes 클러스터 구성

컨테이너 인사이트는 AKS(Azure Kubernetes Service)에 대한 풍부한 모니터링 환경을 제공합니다. 이 문서에서는 Azure 외부에서 호스트되는 Kubernetes 클러스터 모니터링을 사용하도록 설정하는 방법과 비슷한 모니터링 경험을 얻는 방법을 설명합니다.

지원되는 구성

다음 구성은 Container Insights에서 공식적으로 지원됩니다. 다른 버전의 Kubernetes 및 운영 체제 버전이 있으면 지원 티켓을 여세요.

  • 환경:
    • Kubernetes 온-프레미스.
    • OpenShift 버전 4 이상, 온-프레미스 또는 기타 클라우드 환경.
  • Kubernetes 및 지원 정책의 버전은 지원되는 AKS 버전과 동일합니다.
  • 지원되는 컨테이너 런타임에는 Moby 및 CRI 호환 런타임(예: CRI-O 및 ContainerD)이 포함됩니다.
  • 지원되는 기본 및 작업자 노드를 위한 Linux OS 릴리스는 Ubuntu(18.04 LTS 및 16.04 LTS) 및 Red Hat Enterprise Linux CoreOS 43.81입니다.
  • 지원되는 Azure Access Control 서비스에는 Kubernetes RBAC(역할 기반 액세스 제어) 및 비 RBAC가 포함됩니다.

필수 조건

시작하기 전에 해당 필수 구성 요소를 충족하는지 확인합니다.

  • Log Analytics 작업 영역이 있습니다. 컨테이너 인사이트는 Azure 지역별 제품에 나열된 지역에서 Log Analytics 작업 영역을 지원합니다. Azure Resource Manager, PowerShell 또는 Azure Portal을 통해 사용자 고유의 작업 영역을 만들 수 있습니다.

    참고 항목

    동일한 Log Analytics 작업 영역에 대해 동일한 클러스터 이름의 여러 클러스터 모니터링을 사용하도록 설정하는 것은 지원되지 않습니다. 클러스터 이름은 고유해야 합니다.

  • Log Analytics contributor 역할의 구성원으로서 컨테이너 모니터링을 사용하도록 설정할 수 있습니다. Log Analytics 작업 영역에 대한 액세스를 제어하는 방법에 대한 자세한 내용은 작업 영역 및 로그 데이터 액세스 관리를 참조하세요.

  • 모니터링 데이터를 보려면 컨테이너 인사이트를 사용하여 구성된 Log Analytics 작업 영역에 Log Analytics reader 역할이 있어야 합니다.

  • 지정된 Kubernetes 클러스터에 대해 컨테이너 인사이트 차트를 온보딩하기 위한 Helm 클라이언트가 있습니다.

  • 다음 프록시 및 방화벽 구성 정보는 Linux용 Log Analytics 에이전트의 컨테이너화된 버전이 Azure Monitor와 통신하기 위해 필요합니다.

    에이전트 리소스 포트
    *.ods.opinsights.azure.com 포트 443
    *.oms.opinsights.azure.com 포트 443
    *.dc.services.visualstudio.com 포트 443
  • 컨테이너화된 에이전트에서는 성능 메트릭을 수집하기 위해 클러스터의 모든 노드에서 Kubelet cAdvisor secure port: 10250 또는 unsecure port :10255를 열어야 합니다. 아직 구성되지 않았으면 Kubelet cAdvisor에서 secure port: 10250을 구성하는 것이 좋습니다.

  • 컨테이너화된 에이전트에서 인벤토리 데이터를 수집하기 위해 클러스터 내에서 Kubernetes API 서비스와 통신하기 위해서는 컨테이너에 KUBERNETES_SERVICE_HOSTKUBERNETES_PORT_443_TCP_PORT 환경 변수를 지정해야 합니다.

Important

하이브리드 Kubernetes 클러스터를 모니터하는 데 지원되는 최소 에이전트 버전은 ciprod10182019 이상입니다.

모니터링 사용

하이브리드 Kubernetes 클러스터에 컨테이너 인사이트를 사용하도록 설정하려면 다음을 수행합니다.

  1. 컨테이너 인사이트 솔루션으로 Log Analytics 작업 영역을 구성합니다.

  2. Log Analytics 작업 영역에 컨테이너 인사이트 Helm 차트를 사용하도록 설정합니다.

Azure Monitor의 모니터링 솔루션에 대한 자세한 내용은 Azure Monitor의 모니터링 솔루션을 참조하세요.

Azure Monitor 컨테이너 솔루션 추가

Azure PowerShell cmdlet New-AzResourceGroupDeployment 또는 Azure CLI를 사용하여 제공된 Azure Resource Manager 템플릿으로 솔루션을 배포할 수 있습니다.

템플릿을 사용하여 리소스를 배포하는 개념에 익숙하지 않은 경우 다음을 참조하십시오.

Azure CLI를 사용하도록 선택한 경우, 먼저 CLI를 로컬에 설치하고 사용해야 합니다. Azure CLI 버전 2.0.59 이상을 실행해야 합니다. 버전을 확인하려면 az --version을 실행합니다. Azure CLI를 설치하거나 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

이 메서드는 두 가지 JSON 템플릿을 포함합니다. 하나의 템플릿은 모니터링을 사용하도록 설정하는 구성을 지정합니다. 다른 템플릿에는 다음을 지정하도록 구성하는 매개 변수 값이 포함되어 있습니다.

  • workspaceResourceId: Log Analytics 작업 영역의 전체 리소스 ID입니다.
  • workspaceRegion: 작업 영역이 생성된 지역이며, Azure Portal에서 볼 때 작업 영역 속성에서 위치라고도 부릅니다.

containerSolutionParams.json 파일의 workspaceResourceId 매개 변수 값에 필요한 Log Analytics 작업 영역의 전체 리소스 ID를 먼저 식별하려면 다음 단계를 수행합니다. 그런 다음, PowerShell cmdlet 또는 Azure CLI 명령을 실행하여 솔루션을 추가합니다.

  1. 다음 명령을 사용하여 액세스 권한이 있는 모든 구독을 나열합니다.

    az account list --all -o table
    

    출력은 다음 예시와 유사합니다.

    Name                                  CloudName    SubscriptionId                        State    IsDefault
    ------------------------------------  -----------  ------------------------------------  -------  -----------
    Microsoft Azure                       AzureCloud   0fb60ef2-03cc-4290-b595-e71108e8f4ce  Enabled  True
    

    SubscriptionId에 대한 값을 복사합니다.

  2. 다음 명령을 사용하여 Log Analytics 작업 영역을 호스트하는 구독으로 전환합니다.

    az account set -s <subscriptionId of the workspace>
    
  3. 다음 예제는 기본 JSON 형식의 구독에 있는 작업 영역 목록을 표시합니다.

    az resource list --resource-type Microsoft.OperationalInsights/workspaces -o json
    

    출력에서 작업 영역 이름을 찾습니다. 그런 다음, 해당 Log Analytics 작업 영역의 전체 리소스 ID를 ID 필드로 복사합니다.

  4. 다음 JSON 구문을 파일에 복사하여 붙여넣습니다.

    {
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "workspaceResourceId": {
            "type": "string",
            "metadata": {
                "description": "Azure Monitor Log Analytics Workspace Resource ID"
            }
        },
        "workspaceRegion": {
            "type": "string",
            "metadata": {
                "description": "Azure Monitor Log Analytics Workspace region"
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.Resources/deployments",
            "name": "[Concat('ContainerInsights', '-',  uniqueString(parameters('workspaceResourceId')))]",
            "apiVersion": "2017-05-10",
            "subscriptionId": "[split(parameters('workspaceResourceId'),'/')[2]]",
            "resourceGroup": "[split(parameters('workspaceResourceId'),'/')[4]]",
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "variables": {},
                    "resources": [
                        {
                            "apiVersion": "2015-11-01-preview",
                            "type": "Microsoft.OperationsManagement/solutions",
                            "location": "[parameters('workspaceRegion')]",
                            "name": "[Concat('ContainerInsights', '(', split(parameters('workspaceResourceId'),'/')[8], ')')]",
                            "properties": {
                                "workspaceResourceId": "[parameters('workspaceResourceId')]"
                            },
                            "plan": {
                                "name": "[Concat('ContainerInsights', '(', split(parameters('workspaceResourceId'),'/')[8], ')')]",
                                "product": "[Concat('OMSGallery/', 'ContainerInsights')]",
                                "promotionCode": "",
                                "publisher": "Microsoft"
                            }
                        }
                    ]
                },
                "parameters": {}
            }
         }
      ]
    }
    
  5. 이 파일을 로컬 폴더에 containerSolution.json으로 저장합니다.

  6. 다음 JSON 구문을 파일에 붙여넣습니다.

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "workspaceResourceId": {
          "value": "<workspaceResourceId>"
      },
      "workspaceRegion": {
        "value": "<workspaceRegion>"
      }
     }
    }
    
  7. 3단계에서 복사한 값을 사용하여 workspaceResourceId의 값을 편집합니다. workspaceRegion에는 Azure CLI 명령 az monitor log-analytics workspace show를 실행한 후 영역 값을 복사합니다.

  8. 이 파일을 로컬 폴더에 containerSolutionParams.json으로 저장합니다.

  9. 이제 이 템플릿을 배포할 수 있습니다.

    • Azure PowerShell을 사용하여 배포하려면 템플릿이 포함된 폴더에서 다음 명령을 사용합니다.

      # configure and login to the cloud of Log Analytics workspace.Specify the corresponding cloud environment of your workspace to below command.
      Connect-AzureRmAccount -Environment <AzureCloud | AzureChinaCloud | AzureUSGovernment>
      
      # set the context of the subscription of Log Analytics workspace
      Set-AzureRmContext -SubscriptionId <subscription Id of Log Analytics workspace>
      
      # execute deployment command to add Container Insights solution to the specified Log Analytics workspace
      New-AzureRmResourceGroupDeployment -Name OnboardCluster -ResourceGroupName <resource group of Log Analytics workspace> -TemplateFile .\containerSolution.json -TemplateParameterFile .\containerSolutionParams.json
      

      구성 변경을 완료하려면 몇 분 정도 걸릴 수 있습니다. 완료되면 다음 예제와 유사한 메시지에 이 결과가 포함됩니다.

      provisioningState       : Succeeded
      
    • Azure CLI를 사용하여 배포하려면 다음 명령을 실행합니다.

      az login
      az account set --name <AzureCloud | AzureChinaCloud | AzureUSGovernment>
      az login
      az account set --subscription "Subscription Name"
      # execute deployment command to add container insights solution to the specified Log Analytics workspace
      az deployment group create --resource-group <resource group of log analytics workspace> --name <deployment name> --template-file  ./containerSolution.json --parameters @./containerSolutionParams.json
      

      구성 변경을 완료하려면 몇 분 정도 걸릴 수 있습니다. 완료되면 다음 예제와 유사한 메시지에 이 결과가 포함됩니다.

      provisioningState       : Succeeded
      

      모니터링을 사용하도록 설정하고 약 15분 후에 클러스터에 대한 상태 메트릭을 볼 수 있습니다.

Helm 차트 설치

이 섹션에서는 컨테이너 인사이트에 대해 컨테이너화된 에이전트를 설치합니다. 계속하기 전 amalogsagent.secret.wsid 매개 변수에 필요한 작업 영역 ID와 amalogsagent.secret.key 매개 변수에 필요한 기본 키를 식별합니다. 이 정보를 식별하려면 다음 단계를 수행한 후 명령을 실행하여 Helm 차트를 사용해서 에이전트를 설치합니다.

  1. 다음 명령을 실행하여 작업 영역 ID를 식별합니다.

    az monitor log-analytics workspace list --resource-group <resourceGroupName>

    출력에서 이름 필드 아래에서 작업 영역 이름을 찾습니다. 그런 다음, 해당 Log Analytics 작업 영역의 작업 영역 ID를 customerID 필드 아래에 복사합니다.

  2. 다음 명령을 실행하여 작업 영역의 기본 키를 식별합니다.

    az monitor log-analytics workspace get-shared-keys --resource-group <resourceGroupName> --workspace-name <logAnalyticsWorkspaceName>

    출력의 primarySharedKey 필드 아래에서 기본 키를 찾은 후 값을 복사합니다.

    참고 항목

    다음 명령은 Helm 버전 2에만 적용할 수 있습니다. --name 매개 변수 사용은 Helm 버전 3에 적용할 수 없습니다.

    Kubernetes 클러스터가 프록시 서버를 통해 통신하는 경우, amalogsagent.proxy 매개 변수를 프록시 서버의 URL로 구성합니다. 클러스터가 프록시 서버를 통해 통신하지 않는 경우 이 매개 변수를 지정할 필요가 없습니다. 자세한 내용은 이 문서의 뒷부분에 있는 프록시 엔드포인트 구성 섹션을 참조하세요.

  3. 다음 명령을 실행하여 로컬 목록에 Azure 차트 리포지토리를 추가합니다.

    helm repo add microsoft https://microsoft.github.io/charts/repo
    
  4. 다음 명령을 실행하여 차트를 설치합니다.

    $ helm install --name myrelease-1 \
    --set amalogsagent.secret.wsid=<logAnalyticsWorkspaceId>,amalogsagent.secret.key=<logAnalyticsWorkspaceKey>,amalogsagent.env.clusterName=<my_prod_cluster> microsoft/azuremonitor-containers
    

    Log Analytics 작업 영역이 Azure 중국 21Vianet에 있는 경우 다음 명령을 실행합니다.

    $ helm install --name myrelease-1 \
     --set amalogsagent.domain=opinsights.azure.cn,amalogsagent.secret.wsid=<logAnalyticsWorkspaceId>,amalogsagent.secret.key=<logAnalyticsWorkspaceKey>,amalogsagent.env.clusterName=<your_cluster_name> incubator/azuremonitor-containers
    

    Log Analytics 작업 영역이 Azure US Government에 있는 경우 다음 명령을 실행합니다.

    $ helm install --name myrelease-1 \
    --set amalogsagent.domain=opinsights.azure.us,amalogsagent.secret.wsid=<logAnalyticsWorkspaceId>,amalogsagent.secret.key=<logAnalyticsWorkspaceKey>,amalogsagent.env.clusterName=<your_cluster_name> incubator/azuremonitor-containers
    

API 모델을 사용하여 Helm 차트 사용

API 모델이라고도 부르는 AKS 엔진 클러스터 사양 JSON 파일에 추가 기능을 지정할 수 있습니다. 이 추가 기능에서 수집된 모니터링 데이터가 저장된 Log Analytics 작업 영역의 WorkspaceGUIDWorkspaceKey에 대한 base64로 인코딩된 버전을 제공합니다. 이전 섹션의 1단계 및 2단계를 사용하여 WorkspaceGUIDWorkspaceKey를 찾을 수 있습니다.

Azure Stack Hub 클러스터에 대해 지원되는 API 정의는 kubernetes-container-monitoring_existing_workspace_id_and_key.json 예제에서 찾을 수 있습니다. 특히 kubernetesConfig에서 addons 속성을 찾습니다.

"orchestratorType": "Kubernetes",
       "kubernetesConfig": {
         "addons": [
           {
             "name": "container-monitoring",
             "enabled": true,
             "config": {
               "workspaceGuid": "<Azure Log Analytics Workspace Id in Base-64 encoded>",
               "workspaceKey": "<Azure Log Analytics Workspace Key in Base-64 encoded>"
             }
           }
         ]
       }

에이전트 데이터 수집 구성

차트 버전 1.0.0부터 에이전트 데이터 컬렉션 설정은 ConfigMap에서 제어됩니다. 에이전트 데이터 수집 설정에 대한 자세한 내용은 컨테이너 인사이트에 대한 에이전트 데이터 수집 구성을 참조하세요.

차트를 성공적으로 배포한 후 Azure Portal에서 컨테이너 인사이트에 있는 하이브리드 Kubernetes 클러스터의 데이터를 검토할 수 있습니다.

참고 항목

에이전트가 Log Analytics 작업 영역에서 커밋을 수행하는 데까지 걸리는 수집 대기 시간은 약 5~10분 정도입니다. Azure Monitor에서 모든 필요한 모니터링 데이터를 사용할 수 있을 때까지는 데이터 없음 또는 알 수 없음 값이 클러스터 상태로 표시됩니다.

프록시 엔드포인트 구성

차트 버전 2.7.1부터는 차트에서 amalogsagent.proxy 차트 매개 변수를 사용한 프록시 엔드포인트 지정이 지원됩니다. 이러한 방식으로 프록시 서버를 통해 통신할 수 있습니다. 컨테이너 인사이트 에이전트와 Azure Monitor 간의 통신은 HTTP 또는 HTTPS 프록시 서버일 수 있습니다. 사용자 이름과 암호를 사용한 익명 인증과 기본 인증이 모두 지원됩니다.

프록시 구성 값은 [protocol://][user:password@]proxyhost[:port] 구문을 갖습니다.

참고 항목

프록시 서버에 인증이 필요하지 않더라도 의사 사용자 이름 및 암호를 지정해야 합니다. 이는 사용자 이름 또는 암호일 수 있습니다.

속성 설명
프로토콜 HTTP 또는 HTTPS
user 프록시 인증을 위한 선택적 사용자 이름
password 프록시 인증을 위한 선택적 암호
proxyhost 프록시 서버의 주소 또는 FQDN
port 프록시 서버의 선택적인 포트 번호

예제는 amalogsagent.proxy=http://user01:password@proxy01.contoso.com:8080입니다.

프로토콜을 http로 지정하면 SSL/TLS 보안 연결을 사용하여 HTTP 요청이 생성됩니다. 프록시 서버는 SSL/TLS 프로토콜을 지원해야 합니다.

문제 해결

하이브리드 Kubernetes 클러스터에 대해 모니터링을 사용하도록 시도하는 동안 오류가 발생하면 PowerShell 스크립트 TroubleshootError_nonAzureK8s.ps1을 사용하여 발생한 문제를 검색하고 수정하는 데 도움을 얻으세요. 이것은 다음 문제를 감지하고 해결하도록 설계되었습니다.

  • 지정된 Log Analytics 작업 영역이 잘못되었습니다.
  • Log Analytics 작업 영역이 Container Insights 솔루션으로 구성되었습니다. 그렇지 않으면 작업 영역을 구성합니다.
  • Azure Monitor 에이전트 replicaset Pod가 실행 중입니다.
  • Azure Monitor 에이전트 daemonset Pod가 실행 중입니다.
  • Azure Monitor 에이전트 상태 서비스가 실행 중입니다.
  • 컨테이너화된 에이전트에 구성된 Log Analytics 작업 영역 ID 및 키가 인사이트가 구성된 작업 영역과 일치합니다.
  • 모든 Linux 작업자 노드의 Schedulers Pod에 kubernetes.io/role=agent 레이블이 있는지 확인합니다. 없으면 추가합니다.
  • 클러스터의 모든 노드에서 cAdvisor secure port:10250 또는 unsecure port: 10255가 열려 있지는 않음을 나타낼 수 있는 조건을 식별합니다.

Azure PowerShell로 실행하려면 스크립트가 포함된 폴더에서 다음 명령을 사용합니다.

.\TroubleshootError_nonAzureK8s.ps1 - azureLogAnalyticsWorkspaceResourceId </subscriptions/<subscriptionId>/resourceGroups/<resourcegroupName>/providers/Microsoft.OperationalInsights/workspaces/<workspaceName> -kubeConfig <kubeConfigFile> -clusterContextInKubeconfig <clusterContext>

다음 단계

이제 하이브리드 Kubernetes 클러스터 및 여기에서 실행되는 워크로드의 상태 및 리소스 사용률을 수집할 수 있도록 모니터링이 사용하도록 설정되었습니다. 컨테이너 인사이트를 사용하는 방법을 알아보세요.