Container insights を使用してハイブリッド Kubernetes クラスターを構成する

Container Insights は、Azure Kubernetes Service (AKS) の豊富な監視エクスペリエンスを提供します。 この記事では、Azure の外部でホストしている Kubernetes クラスターの監視を有効にし、Azure と同等の監視エクスペリエンスを実現する方法について説明します。

サポートされている構成

次の構成は、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 ワークスペースがあること。 Container insights では、Azure のリージョン別の製品に関するページに一覧表示されているリージョンの Log Analytics ワークスペースがサポートされます。 Azure Resource ManagerPowerShell、または Azure portal を使用して独自のワークスペースを作成できます。

    Note

    同一の Log Analytics ワークスペースに名称が同じクラスターが複数ある場合には、そのワークスペースに対してクラスターの監視を有効にすることはできません。 クラスター名は一意になっている必要があります。

  • コンテナーの監視を有効にするための Log Analytics 共同作成者ロールのメンバーであること。 Log Analytics ワークスペースへのアクセスを制御する方法の詳細については、ワークスペースとログ データに対するアクセスの管理に関するページを参照してください。

  • 監視データを表示するには、Container insights で構成された Log Analytics ワークスペースの "Log Analytics 閲覧者" ロールを持っている必要があります。

  • 指定した Kubernetes クラスターに Container insights のグラフをオンボードするための Helm クライアントがあること。

  • コンテナー化されたバージョンの Linux 用 Log Analytics エージェントが Azure Monitor と通信するためには、プロキシとファイアウォールに関する次の構成情報が必要です。

    エージェントのリソース Port
    *.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 の 2 つの環境変数を指定する必要があります。

重要

ハイブリッド Kubernetes クラスターの監視は、ciprod10182019 以降のバージョンのエージェントに限りサポートされます。

監視を有効にする

ハイブリッド Kubernetes クラスターで Container insights を有効にするには:

  1. Log Analytics ワークスペースに Container insights ソリューションを構成します。

  2. Log Analytics ワークスペースで Container insights Helm チャートを有効にします。

Azure Monitor でのソリューションの監視については、「Azure Monitor での監視ソリューション」を参照してください。

Azure Monitor のコンテナー ソリューションを追加する

既製の Azure Resource Manager テンプレートを使ってソリューションをデプロイする方法には、Azure PowerShell コマンドレット New-AzResourceGroupDeployment を使用する方法と、Azure CLI を使用する方法の 2 種類があります。

テンプレートを使用するリソースのデプロイの概念について馴染みがない場合は、以下を参照してください。

Azure CLI を使用する場合は、まず、ローカルに CLI をインストールして使用する必要があります。 Azure CLI バージョン 2.0.59 以降を実行している必要があります。 ご利用のバージョンを識別するには、az --version を実行します。 Azure CLI をインストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

この方法には、2 つの JSON テンプレートが含まれます。 1 つのテンプレートは、監視を有効にする構成を指定します。 もう 1 つのテンプレートには、次を指定するために構成するパラメーター値が含まれています。

  • workspaceResourceId: Log Analytics ワークスペースの完全なリソース ID です。
  • workspaceRegion: ワークスペースの作成先となるリージョンです (Azure portal から確認したときには、ワークスペースの [場所] というプロパティとして表示されるものです)。

まず、Log Analytics ワークスペースの完全なリソース ID を特定します。これは containerSolutionParams.json ファイル内の workspaceResourceId パラメーターの値として必要になる情報で、次の手順に従って確認します。 次に、PowerShell コマンドレットまたは 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 チャートをインストールする

このセクションでは、Container insights のコンテナー化されたエージェントをインストールします。 次に進む前に、amalogsagent.secret.wsid パラメーターに必要なワークスペース ID と、amalogsagent.secret.key パラメーターに必要な主キーを特定します。 この情報を特定するには、次の手順に従ってから、Helm チャートを使用してエージェントをインストールするコマンドを実行します。

  1. 次のコマンドを実行して、ワークスペース ID を特定します。

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

    出力の name フィールドからワークスペース名を探します。 その Log Analytics ワークスペースのワークスペース ID を customerID フィールドからコピーします。

  2. 次のコマンドを実行して、ワークスペースの主キーを特定します。

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

    出力の primarySharedKey フィールドから主キーを探して、その値をコピーします。

    Note

    次のコマンドは、Helm バージョン 2 にのみ適用できます。 --name パラメーターの使用は、Helm バージョン 3 には適用されません。

    Kubernetes クラスターがプロキシ サーバー経由で通信する場合は、プロキシ サーバーの URL を使用して amalogsagent.proxy パラメーターを構成します。 クラスターがプロキシ サーバー経由で通信しない場合、このパラメーターを指定する必要はありません。 詳細については、この記事の後半にある「プロキシ エンドポイントを構成する」のセクションを参照してください。

  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 China 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 チャートを有効にする

AKS エンジン クラスター仕様の JSON ファイル (API モデルとも呼ばれます) で、アドオンを指定できます。 このアドオンでは、収集した監視データが格納される Log Analytics ワークスペースの、base64 でエンコードされたバージョンの WorkspaceGUIDWorkspaceKey を指定します。 WorkspaceGUIDWorkspaceKey は、前のセクションの手順 1 と 2 を使用して検出できます。

Azure Stack Hub クラスターに対してサポートされる API 定義については、kubernetes-container-monitoring_existing_workspace_id_and_key.json の例をご覧ください。 具体的には、kubernetesConfigaddons プロパティを探します。

"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 からコントロールします。 エージェント データ収集設定については、「Container insights のエージェント データ収集を構成する」を参照してください。

チャートを正常にデプロイした後は、Container insights 内のハイブリッド Kubernetes クラスターに関するデータを Azure portal から確認できるようになります。

Note

インジェストの待ち時間 (Log Analytics ワークスペースでエージェントがコミットを完了するまで) は、5 から 10 分程度です。 必要な監視データのすべてが Azure Monitor で利用できるようになるまでの間は、クラスターの状態として [データなし][不明] のいずれかの値が表示されます。

プロキシ エンドポイントを構成する

チャートのバージョン 2.7.1 以降、チャートでは、amalogsagent.proxy チャート パラメーターを使用したプロキシ エンドポイントの指定がサポートされます。 このようにして、プロキシ サーバー経由で通信できます。 Container insights エージェントと Azure Monitor 間の通信には HTTP または HTTPS プロキシ サーバーを使用できます。 匿名認証と、ユーザー名とパスワードによる基本認証の両方がサポートされています。

プロキシ構成の値の構文は [protocol://][user:password@]proxyhost[:port] です。

Note

プロキシ サーバーで認証が必要ない場合でも、疑似のユーザー名とパスワードを指定する必要があります。 どのようなユーザー名とパスワードでもかまいません。

プロパティ 説明
protocol 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 を使用して、発生した問題の検出と修正に役立ちます。 次の問題を検出して修正を試みるように設計されています。

  • 指定された Azure Monitor Log Analytics ワークスペースが有効。
  • Log Analytics ワークスペースは、Container insights ソリューションを使用して構成されています。 そうでなければ、ワークスペースを構成します。
  • Azure Monitor Agent レプリカセット ポッドを実行中。
  • Azure Monitor Agent デーモンセット ポッドを実行中。
  • Azure Monitor Agent Health サービスを実行中。
  • Log Analytics ワークスペース ID とコンテナー化されたエージェントで構成されたキーは、insight が構成されているワークスペースと一致します。
  • すべての Linux ワーカー ノードに、スケジューラ ポッドへの 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 クラスターの正常性とリソース使用率を収集するための監視が有効になり、クラスターでワークロードが実行されているので、Container insights の使い方を確認します。