配置日志记录和监控

GKE on Bare Metal 包含多种集群日志记录和监控选项,其中包括基于云的代管式服务、开源工具,以及经过验证的与第三方商业解决方案的兼容性。本页介绍了这些选项,并为您选择适合您环境的正确解决方案提供了一些基本指导。

GKE on Bare Metal 选项

您的 GKE on VMware 有多个日志记录和监控选项:

  • Cloud Logging 和 Cloud Monitoring,在 Bare Metal 系统组件上默认启用。
  • Prometheus 和 Grafana,可从 Cloud Marketplace 获取。
  • 经过验证且适用于第三方解决方案的配置。

Cloud Logging 和 Cloud Monitoring

Google Cloud 的运维套件是 Google Cloud 的内置可观测性解决方案。它提供了全代管式日志记录解决方案、指标收集、监控、信息中心和提醒。Cloud Monitoring 监控 GKE on Bare Metal 集群的方式与监控基于云的 GKE 集群的方式类似。

代理可配置为更改日志记录和监控的范围,以及收集的指标级别:

  • 日志记录和监控范围可以设置为仅限系统组件(默认值),也可以针对系统组件和应用进行设置。
  • 可以为一组优化的指标(默认值)或所有指标配置收集的指标级别。

如需了解详情,请参阅本文档中的为 GKE on Bare Metal 配置 Stackdriver 代理

Logging 和 Monitoring 提供了单一、易于配置且基于云的强大可观测性解决方案。如果仅在 GKE on Bare Metal 上运行工作负载,或者在 GKE 和 GKE on Bare Metal 上运行工作负载,我们强烈建议使用 Logging 和 Monitoring。对于组件在 GKE on Bare Metal 和标准本地基础架构上运行的应用,您可以考虑采用其他解决方案来实现这些应用的端到端视图。

Prometheus 和 Grafana

Prometheus 和 Grafana 是 Cloud Marketplace 中提供的两款热门的开源监控产品:

  • Prometheus 会收集应用和系统指标。

  • Alertmanager 使用多种不同的提醒机制来发出提醒。

  • Grafana 是一种信息中心工具。

您可以在每个管理员集群和用户集群上启用 Prometheus 和 Grafana。建议使用 Prometheus 和 Grafana 的对象:之前使用过这些产品的应用团队。也建议使用这些产品的对象:希望在集群内保留应用指标的运营团队,以及网络连接断开时排查问题的团队。

第三方解决方案

Google 与多个第三方日志记录和监控解决方案提供商合作,帮助他们的产品与 GKE on Bare Metal 很好地搭配使用。这些提供方包括 Datadog、Elastic 和 Splunk。将来我们会添加经过验证的其他第三方。

以下解决方案指南适用于将第三方解决方案与 GKE on Bare Metal 搭配使用:

适用于 GKE on Bare Metal 的 Logging 和 Monitoring 的工作原理

创建新管理员集群或用户集群时,系统会在每个集群中安装并激活 Cloud Logging 和 Cloud Monitoring。

Stackdriver 代理在每个集群上都包含多个组件:

  • Stackdriver Operator (stackdriver-operator-*):管理部署到集群上的所有其他 Stackdriver 代理的生命周期。

  • Stackdriver Custom Resource:在 GKE on Bare Metal 安装过程中自动创建的资源。

  • GKE Metrics Agent (gke-metrics-agent-*)。一个基于 OpenTelemetry 收集器的 DaemonSet,用于将每个节点的指标爬取到 Cloud Monitoring。 此外,还包括 node-exporter DaemonSet 和 kube-state-metrics 部署,以提供有关集群的更多指标。

  • Stackdriver Log Forwarder (stackdriver-log-forwarder-*)。一个 Fluent Bit DaemonSet,用于将日志从每台机器转发到 Cloud Logging。日志转发器将日志条目在本地缓冲,并在最长 4 小时内将重新发送这些日志条目。如果缓冲区已满,或者日志转发器达到 Cloud Logging API 时间超过 4 小时时,日志会被丢弃。

  • Anthos Metadata Agent (stackdriver-metadata-agent-)。一个部署,用于将 pod、部署或节点等 Kubernetes 资源的元数据发送到 Config Monitoring for Ops API;这些数据用于通过部署名称、节点名称甚至 Kubernetes 服务名称进行查询来丰富指标查询。

您可以通过运行以下命令查看 Stackdriver 安装的代理:

kubectl -n kube-system get pods -l "managed-by=stackdriver"

此命令的输出类似如下所示:

kube-system   gke-metrics-agent-4th8r                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-8lt4s                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-dhxld                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-lbkl2                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-pblfk                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-qfwft                                     1/1     Running   1 (40h ago)   40h
kube-system   kube-state-metrics-9948b86dd-6chhh                          1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-5s4pg                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-d9gwv                                         1/1     Running   2 (40h ago)   40h
kube-system   node-exporter-fhbql                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-gzf8t                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-tsrpp                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-xzww7                                         1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-8lwxh                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-f7cgf                             1/1     Running   2 (40h ago)   40h
kube-system   stackdriver-log-forwarder-fl5gf                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-q5lq8                             1/1     Running   2 (40h ago)   40h
kube-system   stackdriver-log-forwarder-www4b                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-xqgjc                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-metadata-agent-cluster-level-5bb5b6d6bc-z9rx7   1/1     Running   1 (40h ago)   40h

Cloud Monitoring 指标

如需查看 Cloud Monitoring 收集的指标列表,请参阅查看 GKE on Bare Metal 指标

为 GKE on Bare Metal 配置 Stackdriver 代理

与 GKE on Bare Metal 一起安装的 Stackdriver 代理会收集有关系统组件的数据,以便维护集群并排查集群问题。以下部分介绍了 Stackdriver 配置和操作模式。

仅限系统组件(默认模式)

安装后,Stackdriver 代理会默认配置为收集 Google 所提供系统组件的日志和指标,包括性能详情(如 CPU 和内存利用率)和类似元数据。这些组件包括管理员集群中的所有工作负载,以及用户集群的 kube-system、gke-system、gke-connect、istio-system、config-management-system 命名空间中的工作负载。

系统组件和应用

如需在默认模式的基础上启用应用日志记录和监控,请按照启用应用日志记录和监控中的步骤操作。

优化的指标(默认指标)

默认情况下,集群中运行的 kube-state-metrics 部署会收集一组优化的 kube 指标,并报告给 Google Cloud 的运维套件(原 Stackdriver)。

收集这组优化的指标需要的资源较少,这可以提高整体性能和可伸缩性。

如需停用优化的指标(不推荐),请替换 Stackdriver 自定义资源中的默认设置。

配置 Stackdriver 组件资源

创建集群时,GKE on VMware 会自动创建 Stackdriver 自定义资源。您可以在自定义资源中修改规范,以替换 Stackdriver 组件的 CPU 和内存请求及限制的默认值,也可以单独替换优化的指标默认设置。

替换 Stackdriver 组件的默认 CPU 及内存请求和限制

pod 密度较高的集群引入了较高的日志记录和监控开销。在极端情况下,Stackdriver 组件可能会报告接近 CPU 和内存利用率限制,资源限制甚至可能导致持续重启。在这种情况下,如需替换 Stackdriver 组件的 CPU 和内存请求以及限制的默认值,请按以下步骤操作:

  1. 运行以下命令,在命令行编辑器中打开您的 Stackdriver 自定义资源:

    kubectl -n kube-system edit stackdriver stackdriver
  2. 在 Stackdriver 自定义资源中的 spec 字段下添加 resourceAttrOverride 部分:

    resourceAttrOverride:
          DAEMONSET_OR_DEPLOYMENT_NAME/CONTAINER_NAME:
            LIMITS_OR_REQUESTS:
              RESOURCE: RESOURCE_QUANTITY

    请注意,resourceAttrOverride 部分将替换指定组件的所有现有默认限制和请求。resourceAttrOverride 支持以下组件:

    • gke-metrics-agent/gke-metrics-agent
    • stackdriver-log-forwarder/stackdriver-log-forwarder
    • stackdriver-metadata-agent-cluster-level/metadata-agent
    • node-exporter/node-exporter
    • kube-state-metrics/kube-state-metrics

    示例文件如下所示:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
      name: stackdriver
      namespace: kube-system
    spec:
      anthosDistribution: baremetal
      projectID: my-project
      clusterName: my-cluster
      clusterLocation: us-west-1a
      resourceAttrOverride:
        gke-metrics-agent/gke-metrics-agent:
          requests:
            cpu: 110m
            memory: 240Mi
          limits:
            cpu: 200m
            memory: 4.5Gi
  3. 如需保存对 Stackdriver 自定义资源的更改,请保存并退出命令行编辑器。

  4. 检查 Pod 的运行状况:

    kubectl -n kube-system get pods -l "managed-by=stackdriver"

    健康的 Pod 的响应如下所示:

    gke-metrics-agent-4th8r                1/1     Running   1   40h
  5. 检查组件的 Pod 规范,确保资源设置正确。

    kubectl -n kube-system describe pod POD_NAME

    POD_NAME 替换为您刚刚更改的 Pod 的名称。例如 gke-metrics-agent-4th8r

    回答如下所示:

      Name:         gke-metrics-agent-4th8r
      Namespace:    kube-system
      ...
      Containers:
        gke-metrics-agent:
          Limits:
            cpu: 200m
            memory: 4.5Gi
          Requests:
            cpu: 110m
            memory: 240Mi
          ...

停用优化的指标

默认情况下,集群中运行的 kube-state-metrics 部署会收集一组优化的 kube 指标并报告给 Stackdriver。如果您需要其他指标,我们建议您从 GKE on Bare Metal 指标列表中找到替代指标。

以下是一些您可能使用的替代指标示例:

已停用的指标 替代指标
kube_pod_start_time container/uptime
kube_pod_container_resource_requests container/cpu/request_cores
container/memory/request_bytes
kube_pod_container_resource_limits container/cpu/limit_cores
container/memory/limit_bytes

如需停用优化指标默认设置(不推荐),请执行以下操作:

  1. 在命令行编辑器中打开 Stackdriver 自定义资源:

    kubectl -n kube-system edit stackdriver stackdriver
  2. optimizedMetrics 字段设置为 false

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
    name: stackdriver
    namespace: kube-system
    spec:
    anthosDistribution: baremetal
    projectID: my-project
    clusterName: my-cluster
    clusterLocation: us-west-1a
    optimizedMetrics: false
    
  3. 保存更改并退出命令行编辑器。

指标服务器

Metrics Server 是各种自动扩缩流水线的容器资源指标的来源。Metrics Server 会从 kubelet 检索指标,并通过 Kubernetes Metrics API 公开这些指标。然后,HPA 和 VPA 将使用这些指标来确定何时触发自动扩缩。Metrics Server 使用插件调整器进行扩缩。

在高 Pod 密度导致过多日志记录和监控开销的极端情况下,资源限制可能导致 Metrics Server 停止并重新启动。在这种情况下,您可以通过修改 gke-managed-metrics-server 命名空间中的 metrics-server-config configmap 并更改 cpuPerNodememoryPerNode 的值,为指标服务器分配更多资源。

kubectl edit cm metrics-server-config -n gke-managed-metrics-server

ConfigMap 的示例内容如下:

apiVersion: v1
data:
  NannyConfiguration: |-
    apiVersion: nannyconfig/v1alpha1
    kind: NannyConfiguration
    cpuPerNode: 3m
    memoryPerNode: 20Mi
kind: ConfigMap

更新 ConfigMap 后,使用以下命令重新创建指标服务器 Pod:

kubectl delete pod -l k8s-app=metrics-server -n gke-managed-metrics-server

Logging 和 Monitoring 的配置要求

使用 GKE on Bare Metal 启用 Cloud Logging 和 Cloud Monitoring 需要满足几项配置要求。这些步骤包含在“启用 Google 服务”页面上的配置服务账号以与 Logging 和 Monitoring 搭配使用中,具体如下列出:

  1. Cloud Monitoring 工作区必须在 Cloud 项目中创建。如需实现此目的,请点击 Google Cloud 控制台中的 Monitoring 并按照工作流操作。
  2. 您需要启用以下 Stackdriver API:

  3. 您需要将以下 IAM 角色分配给 Stackdriver 代理使用的服务账号:

    • logging.logWriter
    • monitoring.metricWriter
    • stackdriver.resourceMetadata.writer
    • monitoring.dashboardEditor
    • opsconfigmonitoring.resourceMetadata.writer

价格

无需为 GKE Enterprise 系统日志和指标付费。

在 GKE on Bare Metal 集群中,GKE Enterprise 系统日志和指标包括以下项:

  • 管理员集群中所有组件的日志和指标
  • 用户集群的以下命名空间中组件的日志和指标:kube-systemgke-systemgke-connectknative-servingistio-systemmonitoring-systemconfig-management-systemgatekeeper-systemcnrm-system

如需了解详情,请参阅 Google Cloud 的运维套件的价格

如需了解 Cloud Logging 指标的赠送金额,请与销售人员联系了解价格