管理容器见解代理

容器见解使用适用于 Linux 的 Log Analytics 代理的容器化版本。 初始部署之后,在其生命周期内可能需要执行一些例程或可选任务。 本文介绍如何手动升级代理并禁用来自特定容器的环境变量集合。

注意

如果已部署 AKS 群集并使用 Azure CLI 或 Azure 资源管理器模板启用监视,则不能使用 kubectl 来升级、删除、重新部署或部署代理。 模板需要部署在群集所在的资源组中。

升级容器见解代理

容器见解使用适用于 Linux 的 Log Analytics 代理的容器化版本。 发布该代理的新版本时,在 Azure Kubernetes 服务 (AKS) 和已启用 Azure Arc 的 Kubernetes 上承载的托管 Kubernetes 群集上,该代理会自动升级。

如果 AKS 上托管的群集的代理升级失败,也可参阅本文,了解如何手动升级代理。 要关注发布的版本,请参阅代理发布公告

升级 AKS 群集上的代理

升级 AKS 群集上的代理的过程包括两个步骤。 第一步是使用 Azure CLI 禁止通过容器见解进行监视。 按照在 Kubernetes 群集上禁用容器见解一文中所述的步骤进行操作。 可以使用 Azure CLI 从群集的节点中删除代理,不会影响解决方案以及工作区中存储的相应数据。

注意

执行此维护活动时,群集中的节点不会转发收集的数据。 性能视图不会显示删除代理和安装新版本这两个时间点之间的数据。

第二步是安装新版本的代理。 按照使用 Azure CLI 启用监视中描述的步骤完成此过程。

重新启用监视后,可能需要约 15 分钟才能查看群集的更新后运行状况指标。 可以通过两种方法来验证代理是否升级成功:

  • 运行命令 kubectl get pod <ama-logs-agent-pod-name> -n kube-system -o=jsonpath='{.spec.containers[0].image}'。 在返回的状态中,记下输出的“容器”部分中“映像”下 Azure Monitor 代理的值。
  • 在“节点”选项卡上,选择群集节点。 在右侧的“属性”窗格上,记下“代理映像标记”下的值。

显示的代理版本应与版本历史记录页上列出的最新版本匹配。

升级混合 Kubernetes 群集上的代理

执行以下步骤,升级在以下位置运行的 Kubernetes 群集上的代理:

  • Azure 上托管的使用 AKS 引擎的自托管 Kubernetes 群集。
  • Azure Stack 上或在本地托管的使用 AKS 引擎的自托管 Kubernetes 群集。

运行以下命令:

$ helm upgrade --set omsagent.domain=opinsights.azure.cn,omsagent.secret.wsid=<your_workspace_id>,omsagent.secret.key=<your_workspace_key>,omsagent.env.clusterName=<your_cluster_name> incubator/azuremonitor-containers

禁用容器上的环境变量集合

容器见解从在 Pod 中运行的容器中收集环境变量,并将这些环境变量显示在“容器”视图中所选容器的属性窗格中。 可在部署 Kubernetes 群集期间或之后通过设置环境变量 AZMON_COLLECT_ENV 禁用特定容器的集合来控制此行为。 此功能可从代理版本 ciprod11292018 和更高版本获得。

要禁用新容器或现有容器上的环境变量集合,请在 Kubernetes 部署 yaml 配置文件中将变量 AZMON_COLLECT_ENV 设置为 False 值。

- name: AZMON_COLLECT_ENV  
  value: "False"  

此命令会打开默认文本编辑器。 设置该变量后,将文件保存在编辑器中。

要验证配置更改是否生效,请在容器见解中的“容器”视图中选择容器。 在属性面板中,展开“环境变量”。 此部分应只显示前面创建的变量 AZMON_COLLECT_ENV=FALSE。 对于所有其他容器,环境变量部分应列出发现的所有环境变量。

若要重新启用环境变量的发现,请应用之前使用的过程并将值从 False 更改为 True。 然后,重新运行 kubectl 命令以更新容器。

- name: AZMON_COLLECT_ENV  
  value: "True"  

容器见解代理版本的语义化版本更新

容器见解已将映像版本和命名约定更改为 [semver 格式] (https://semver.org/)。 SemVer 可帮助开发人员跟踪在开发阶段对软件所做的每项更改,并确保软件版本控制是一致且有意义的。 旧版本采用 ciprod<timestamp>-<commitId> 和 win-ciprod<timestamp>-<commitId> 格式,采用 Semver 格式的第一个映像版本是 3.1.4(适用于 Linux)和 win-3.1.4(适用于 Windows)。

Semver 是一种通用软件版本控制架构,采用 MAJOR.MINOR.PATCH 格式定义,并遵循以下约束:

  1. 进行不兼容的 API 更改时,MAJOR 版本号递增。
  2. 以向后兼容的方式增加功能时,MINOR 版本号递增。
  3. 以向后兼容的方式修复 bug 时,PATCH 版本号递增。

随着 Kubernetes 和 OSS 生态系统的兴起,容器见解根据 K8s 建议的标准迁移到使用 semver 映像,其中引入的每个次要版本都需要在每次新的 Kubernetes 版本中公开记录所有重大更改。

修复重复代理

如果在 2022 年 10 月之前使用自定义方法手动启用了容器见解,你最终可能会同时运行代理的多个版本。 按照以下步骤消除此重复。

  1. 收集任何自定义设置的详细信息,例如 omsagent 容器的内存和 CPU 限制。

  2. 查看 ama-logs 的默认资源限制,并确定它们是否符合你的需求。 如果不符合,可能需要创建支持主题来帮助调查和切换内存/CPU 限制。 这有助于解决某些客户以前遇到的导致 OOMKilled 异常的缩放限制问题。

    操作系统 控制器名称 默认限制
    Linux ds-cpu-limit-linux 500m
    Linux ds-memory-limit-linux 750Mi
    Linux rs-cpu-limit 1
    Linux rs-memory-limit 1.5Gi
    Windows ds-cpu-limit-windows 500m
    Windows ds-memory-limit-windows 1Gi
  3. 清理之前加入的资源:

    如果以前使用 Helm 图表载入,请执行以下操作:

    使用以下命令列出命名空间中的所有版本:

     helm list --all-namespaces
    

    使用以下命令清理为容器见解安装的图表:

    helm uninstall <releaseName> --namespace <Namespace>
    

    如果以前使用 yaml 部署载入,请执行以下操作:

    使用以下命令下载以前的自定义部署 yaml 文件:

    curl -LO raw.githubusercontent.com/microsoft/Docker-Provider/ci_dev/kubernetes/omsagent.yaml
    

    使用以下命令清理旧的 omsagent 图表:

    kubectl delete -f omsagent.yaml
    
  4. 按照在 Kubernetes 群集上禁用容器见解中的指南,禁用容器见解来清理所有相关资源

  5. 按照在 Kubernetes 群集上启用容器见解中的指南重新载入容器见解

后续步骤

如果升级代理时遇到问题,请查看故障排除指南来获得支持。