你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

监视 Nexus Kubernetes 群集

每个 Nexus Kubernetes 群集都包含多个层:

  • 虚拟机 (VM)
  • Kubernetes 层
  • 应用程序 Pod

Nexus Kubernetes 群集示例的屏幕截图。

图:示例 Nexus Kubernetes 群集

在实例上,Nexus Kubernetes 群集附带可选的容器见解可观测性解决方案。 容器见解从 Nexus Kubernetes 群集和工作负载捕获日志和指标。 是否启用此工具或部署你自己的遥测堆栈,完全由你自行决定。

带有 Azure 监视工具的 Nexus Kubernetes 群集如下所示:

带有监视工具的 Nexus Kubernetes 群集的屏幕截图。

图:带有监视工具的 Nexus Kubernetes 群集

使用托管标识身份验证通过 CLI 载入扩展

有关开始使用 Azure CLI、如何跨多个操作系统安装以及如何安装 CLI 扩展的文档。

安装最新版本的必要 CLI 扩展

监视 Nexus Kubernetes 群集

本操作指南提供了使用 Azure 监视代理启用监视代理以从这些 VM 收集系统日志的步骤。 这些说明进一步捕获有关如何将日志数据收集设置到 Log Analytics 工作区的详细信息。

先决条件

  • 群集管理员对 Nexus Kubernetes 群集的访问权限。

  • 若要使用已启用 Azure Arc 的服务器,请在订阅中注册以下 Azure 资源提供程序:

    • Microsoft.HybridCompute
    • Microsoft.GuestConfiguration
    • Microsoft.HybridConnectivity

注册这些资源提供程序(如果以前未完成):

az account set --subscription "{the Subscription Name}"
az provider register --namespace 'Microsoft.HybridCompute'
az provider register --namespace 'Microsoft.GuestConfiguration'
az provider register --namespace 'Microsoft.HybridConnectivity'
  • 根据需要将 Azure 服务主体分配给以下 Azure 内置角色。 将服务主体分配给具有要连接的计算机的 Azure 资源组:
角色 需要
Azure Connected Machine 资源管理员参与者 在资源组中连接已启用 Arc 的 Nexus Kubernetes 群集 VM 服务器并安装 Azure 监视代理 (AMA)
监视参与者参与者 在资源组中创建数据收集规则 (DCR),然后将其关联到已启用 Arc 的服务器
用户访问管理员资源策略参与者参与者 要使用 Azure 策略分配来确保 DCR 与已启用 Arc 的计算机关联时需要
Kubernetes 扩展参与者 为容器见解部署 K8 扩展时需要

监视 Nexus Kubernetes 群集

先决条件

运营商应确保在 Nexus Kubernetes 群集上配置监视工具有某些先决条件。

容器见解将其数据存储在 Log Analytics 工作区中。 日志数据流入你在安装 Container Insights 扩展期间提供的资源 ID 所属的工作区。 否则,数据会流入与订阅关联的资源组中的默认工作区(基于 Azure 位置)。

美国东部的示例如下所示:

  • Log Analytics 工作区名称:DefaultWorkspace-GUID-EUS<>
  • 资源组名称:DefaultResourceGroup-EUS

运行以下命令以获取预先存在的 Log Analytics 工作区资源 ID

az login

az account set --subscription "<Subscription Name or ID the Log Analytics workspace is in>"

az monitor log-analytics workspace show --workspace-name "<Log Analytics workspace Name>" \
  --resource-group "<Log Analytics workspace Resource Group>" \
  -o tsv --query id

若要在适用的 Log Analytics 工作区中部署容器见解并查看数据,需要在帐户中分配某些角色。 例如,“参与者”角色分配。 请参阅分配所需的角色的说明:

  • Log Analytics 参与者角色:在 CNF(预配)群集上启用容器监视所需的权限。
  • Log Analytics 读者角色:非 Log Analytics 参与者角色的成员在启用容器监视后将获得查看 Log Analytics 工作区中的数据的权限。

安装群集扩展

登录到 Azure Cloud Shell 以访问群集:

az login

az account set --subscription "<Subscription Name or ID the Provisioned Cluster is in>"

现在,你使用以下两个命令之一在预配的 Nexus Kubernetes 群集上部署容器见解扩展:

使用客户预创建的 Log Analytics 工作区

az k8s-extension create --name azuremonitor-containers \
  --cluster-name "<Nexus Kubernetes cluster Name>" \
  --resource-group "<Nexus Kubernetes cluster Resource Group>" \
  --cluster-type connectedClusters \
  --extension-type Microsoft.AzureMonitor.Containers \
  --release-train preview \
  --configuration-settings logAnalyticsWorkspaceResourceID="<Log Analytics workspace Resource ID>" \
  amalogsagent.useAADAuth=true

使用默认 Log Analytics 工作区

az k8s-extension create --name azuremonitor-containers \
  --cluster-name "<Nexus Kubernetes cluster Name>" \
  --resource-group "<Nexus Kubernetes cluster Resource Group>" \
  --cluster-type connectedClusters \
  --extension-type Microsoft.AzureMonitor.Containers \
  --release-train preview \
  --configuration-settings amalogsagent.useAADAuth=true

验证群集扩展

使用以下命令验证监视代理在 Nexus Kubernetes 群集上的启用是否成功部署:

az k8s-extension show --name azuremonitor-containers \
  --cluster-name "<Nexus Kubernetes cluster Name>" \
  --resource-group "<Nexus Kubernetes cluster Resource Group>" \
  --cluster-type connectedClusters

查找扩展的“已成功”预配状态。 “k8s-extension create”命令也可能返回了状态。

自定义日志和指标收集

Container Insights 提供最终用户功能来微调来自 Nexus Kubernetes 群集的日志和指标的集合。 有关详细信息,请参阅关于配置容器见解代理数据收集的说明。

注意

默认情况下,Container Insights 不会从 kube-system 命名空间收集日志。 若要从 kube-system 命名空间收集日志,必须将代理配置为从 kube-system 命名空间收集日志。 为此,可以遵循 configMap 配置方法从 ConfigMap 中的 excludedNamespaces 字段中移除 kube-system 命名空间。

[log_collection_settings]
  [log_collection_settings.stdout]
    # In the absence of this configmap, default value for enabled is true
    enabled = true
    # exclude_namespaces setting holds good only if enabled is set to true
    # kube-system,gatekeeper-system log collection are disabled by default in the absence of 'log_collection_settings.stdout' setting. If you want to enable kube-system,gatekeeper-system, remove them from the following setting.
    # If you want to continue to disable kube-system,gatekeeper-system log collection keep the namespaces in the following setting and add any other namespace you want to disable log collection to the array.
    # In the absence of this configmap, default value for exclude_namespaces = ["kube-system","gatekeeper-system"]
    exclude_namespaces = ["gatekeeper-system"]
    # If you want to collect logs from only selective pods inside system namespaces add them to the following setting. Provide namespace:controllerName of the system pod. NOTE: this setting is only for pods in system namespaces
    # Valid values for system namespaces are: kube-system, azure-arc, gatekeeper-system, kube-public, kube-node-lease, calico-system. The system namespace used should not be present in exclude_namespaces
    # collect_system_pod_logs = ["kube-system:coredns"]

  [log_collection_settings.stderr]
    # Default value for enabled is true
    enabled = true
    # exclude_namespaces setting holds good only if enabled is set to true
    # kube-system,gatekeeper-system log collection are disabled by default in the absence of 'log_collection_settings.stderr' setting. If you want to enable kube-system,gatekeeper-system, remove them from the following setting.
    # If you want to continue to disable kube-system,gatekeeper-system log collection keep the namespaces in the following setting and add any other namespace you want to disable log collection to the array.
    # In the absence of this configmap, default value for exclude_namespaces = ["kube-system","gatekeeper-system"]
    exclude_namespaces = ["gatekeeper-system"]
    # If you want to collect logs from only selective pods inside system namespaces add them to the following setting. Provide namespace:controllerName of the system pod. NOTE: this setting is only for pods in system namespaces
    # Valid values for system namespaces are: kube-system, azure-arc, gatekeeper-system, kube-public, kube-node-lease, calico-system. The system namespace used should not be present in exclude_namespaces
    # collect_system_pod_logs = ["kube-system:coredns"]

额外资源