你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用容器见解配置混合 Kubernetes 群集
容器见解为 Azure Kubernetes 服务 (AKS) 提供丰富的监视体验。 本文介绍了如何对在 Azure 外部承载的 Kubernetes 群集启用监视,并实现类似的监视体验。
支持的配置
容器见解正式支持以下配置。 如果你使用不同版本的 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 访问控制服务:Kubernetes 基于角色的访问控制 (RBAC) 和非 RBAC。
先决条件
在开始之前,请确保满足以下先决条件:
拥有一个 Log Analytics 工作区。 容器见解支持在 Azure 产品(按区域)中列出的区域中的 Log Analytics 工作区。 你可以通过 Azure 资源管理器、PowerShell 或 Azure 门户创建自己的工作区。
备注
不支持对同一 Log Analytics 工作区中具有相同群集名称的多个群集启用监视。 群集名称必须独一无二。
需要成为 Log Analytics 参与者角色的成员才能启用容器监视。 要详细了解如何控制对 Log Analytics 工作区的访问,请参阅管理对工作区和日志数据的访问。
要查看监视数据,必须在 Log Analytics 工作区中拥有 Log Analytics 读者角色,并配置了容器见解。
拥有 Helm 客户端,用于为指定的 Kubernetes 群集载入容器见解图表。
适用于 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_HOST
和KUBERNETES_PORT_443_TCP_PORT
。
重要
监视混合 Kubernetes 群集时支持使用的最低代理版本是 ciprod10182019 或更高版本。
启用监视
若要为混合 Kubernetes 群集启用容器见解,请执行以下操作:
为 Log Analytics 工作区配置容器见解解决方案。
通过 Log Analytics 工作区启用容器见解 Helm 图表。
有关 Azure Monitor 中的监视解决方案的详细信息,请参阅 Azure Monitor 中的监视解决方案。
添加 Azure Monitor 容器解决方案
可以使用 Azure PowerShell cmdlet New-AzResourceGroupDeployment
或 Azure CLI,通过提供的 Azure 资源管理器模板来部署解决方案。
如果不熟悉使用模板部署资源的概念,请参阅:
如果选择使用 Azure CLI,首先需要在本地安装和使用 CLI。 必须运行 Azure CLI 2.0.59 或更高版本。 若要确定版本,请运行 az --version
。 如果需要安装或升级 Azure CLI,请参阅安装 Azure CLI。
此方法包含两个 JSON 模板。 一个模板指定用于启用监视的配置。 另一个模板包含配置以指定以下内容的参数值:
workspaceResourceId
:Log Analytics 工作区的完整资源 ID。workspaceRegion
:在其中创建工作区的区域,当从 Azure 门户中查看时,它在工作区属性中也称作“位置”。
若要首先确定 containerSolutionParams.json 文件中的 workspaceResourceId
参数值所需的 Log Analytics 工作区的完整资源 ID,请执行以下步骤。 然后运行 PowerShell cmdlet 或 Azure CLI 命令来添加解决方案。
使用以下命令列出你有权访问的所有订阅:
az account list --all -o table
输出类似于以下示例:
Name CloudName SubscriptionId State IsDefault ------------------------------------ ----------- ------------------------------------ ------- ----------- Microsoft Azure AzureCloud 0fb60ef2-03cc-4290-b595-e71108e8f4ce Enabled True
复制 SubscriptionId 的值。
使用以下命令切换到托管 Log Analytics 工作区的订阅:
az account set -s <subscriptionId of the workspace>
以下示例以默认 JSON 格式显示订阅中的工作区列表:
az resource list --resource-type Microsoft.OperationalInsights/workspaces -o json
在输出中,找到工作区名称。 然后在字段 ID 下复制该 Log Analytics 工作区的完整资源 ID。
将以下 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": {} } } ] }
在一个本地文件夹中将该文件另存为 containerSolution.json。
将以下 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>" } } }
使用在第 3 步复制的值编辑 workspaceResourceId 的值。 对于 workspaceRegion,请在运行 Azure CLI 命令 az monitor log-analytics workspace show 后复制 Region 值。
在一个本地文件夹中将该文件另存为 containerSolutionParams.json。
已做好部署此模板的准备。
若要使用 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 图表运行安装代理的命令。
运行以下命令以确定工作区 ID:
az monitor log-analytics workspace list --resource-group <resourceGroupName>
在输出中,在“name”字段下找到工作区名称。 然后在“customerID”字段下复制该 Log Analytics 工作区的工作区 ID。
运行以下命令以确定工作区的主密钥:
az monitor log-analytics workspace get-shared-keys --resource-group <resourceGroupName> --workspace-name <logAnalyticsWorkspaceName>
在输出中,在“primarySharedKey”下找到主密钥,然后复制其值。
注意
以下命令仅适用于 Helm 版本 2。
--name
参数不适合在 Helm 版本 3 中使用。如果 Kubernetes 群集通过代理服务器进行通信,则使用代理服务器的 URL 来配置参数
amalogsagent.proxy
。 如果群集不是通过代理服务器进行通信,则无需指定此参数。 有关详细信息,请参阅本文稍后的配置代理终结点部分。通过运行以下命令,将 Azure 图表存储库添加到你的本地列表:
helm repo add microsoft https://microsoft.github.io/charts/repo
运行以下命令来安装图表:
$ 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 中国世纪互联,请运行以下命令:
$ 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 美国政府,请运行以下命令:
$ 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 编码版 WorkspaceGUID
和 WorkspaceKey
。 可以使用上一部分中的步骤 1 和 2 来查找 WorkspaceGUID
和 WorkspaceKey
。
在此示例中可以找到 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 控制代理数据收集设置。 有关代理数据收集设置的详细信息,请参阅为容器见解配置代理数据收集。
成功部署 chart 后,可以在 Azure 门户中通过容器见解查看混合 Kubernetes 群集的数据。
备注
从代理收集数据到在 Azure Log Analytics 工作区中提交数据,引入延迟大约为 5 到 10 分钟。 群集的状态将显示值“无数据”或“未知”,直到所有必需的监视数据在 Azure Monitor 中可用。
配置代理终结点
从图表版本 2.7.1 开始,图表将支持使用 amalogsagent.proxy
图表参数来指定代理终结点。 通过这种方式,图表可通过代理服务器进行通信。 容器见解代理与 Azure Monitor 之间的通信可以通过 HTTP 或 HTTPS 代理服务器进行。 匿名身份验证和基本身份验证(使用用户名/密码)均受支持。
代理配置值具有以下语法:[protocol://][user:password@]proxyhost[:port]
。
备注
如果代理服务器不需要身份验证,那么你仍需指定伪用户名和密码。 这可以是任何用户名或密码。
属性 | 说明 |
---|---|
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,以帮助检测并修复遇到的问题。 它旨在检测和尝试更正的问题如下:
- 指定的 Log Analytics 工作区有效。
- Log Analytics 工作区配置了容器见解解决方案。 如果没有,请配置工作区。
- Azure Monitor 代理 replicaset Pod 正在运行。
- Azure Monitor 代理 daemonset Pod 正在运行。
- Azure Monitor 代理运行状况服务正在运行。
- 在容器化代理上配置的 Log Analytics 工作区 ID 和密钥与为见解配置的工作区匹配。
- 验证所有 Linux 工作器节点是否都具有计划程序 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 群集及其上运行的工作负载的运行状况和资源利用率后,请了解如何使用容器见解。