如何使用 Telegraf 和 InfluxDB Cloud 监控 Kubernetes K3s

导航至

本文最初发表于 The New Stack,并已获得许可在此处转载。

Helm Chart 可以简化我们的生活,并使我们能够使用外部系统查看 K3s 集群中发生的情况。

轻量级 Kubernetes,也称为 K3s,是 Kubernetes 的一个安装版本,内存占用量只有一半。

您是否需要监控运行 K3s 的节点以了解集群的状态?您是否还需要了解您的 Pod 的性能、它们消耗的资源以及网络流量?在本文中,我将向您展示如何使用 Telegraf 和 InfluxDB Cloud 监控 K3s。

我运行一个博客和一些关于 Kubernetes 的其他资源。具体来说,这些资源在一个 DigitalOcean 的三个节点集群中运行,这些节点运行 K3s,我使用 Telegraf 和 InfluxDB 监控一切。

我将演示如何监控集群以确保一切都按预期运行,以及如何在出现异常时识别出来。

为了监控集群,我使用了两个组件

InfluxDB Cloud:从外部进行监控是理想的选择,因为如果我们从内部进行监控,并且节点宕机,那么监控解决方案也会宕机,这没有任何意义。您可以在这里获取免费的 InfluxDB 帐户:https://cloud2.influxdata.com/signup/

接下来,我们需要从 Telegraf 安装 Helm Chart,特别是 这个 Chart,因为它不支持 Docker 引擎,如果您运行 K3s,则不需要 Docker 引擎。

开始吧…

配置 InfluxDB Cloud

我们必须做的第一件事是在 InfluxDB Cloud 中创建一个帐户。接下来,我们转到“数据”部分,单击“存储桶”,然后单击“创建存储桶”。

Configuring InfluxDB Cloud-Load Data

命名存储桶并单击“创建”。

Name the bucket and click on Create

这就是我们的存储桶列表应该的样子。成功创建存储桶后,我们创建一个访问令牌,以便能够将数据写入该存储桶。为此,我们转到“令牌”选项卡。

create an access token

在此部分中,我们单击“生成令牌”,然后选择“读/写令牌”选项。

Generate Token and choose the Read-Write Token option

我们指定一个名称,选择要与此令牌关联的存储桶,然后单击“保存”。

choose the bucket to associate with this token -save

完成后,新令牌将出现在令牌列表中。

new token appears in the token list

为了完成这一部分,我们将需要我们的 Org ID 和 URL 来指向我们的 Telegraf。

Org ID 是您用于注册 InfluxDB Cloud 的电子邮件。我从地址栏中获取 URL。就我而言,当我设置我的 InfluxDB Cloud 帐户时,我选择了美国西部。所以我的 URL 看起来像这样

https://us-west-2-1.aws.cloud2.influxdata.com

现在我们已经配置了 InfluxDB Cloud,我们需要配置节点。

正如我上面提到的,我们将使用 Helm Chart。我修改了这个 Helm Chart 以适应 K3s,因为默认情况下它尝试监控 Docker,而 Docker 未在此 Kubernetes 发行版中使用。

如果您没有安装 Helm,可以通过运行此命令来安装它

$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

安装完成后,在此处下载 values.yaml 文件 here

您也可以抓取原始文件并使用 wget 将其直接下载到主节点。

$ wget https://raw.githubusercontent.com/xe-nvdk/awesome-helm-charts/main/telegraf-ds-k3s/values.yaml

现在,我们必须稍微修改一下这个文件。我们需要打开它并修改“Output”部分。默认情况下,该文件看起来像这样

## Exposed telegraf configuration
## ref: https://docs.influxdb.org.cn/telegraf/v1.13/administration/configuration/
config:
  # global_tags:
  #   cluster: "mycluster"
  agent:
    interval: "10s"
    round_interval: true
    metric_batch_size: 1000
    metric_buffer_limit: 10000
    collection_jitter: "0s"
    flush_interval: "10s"
    flush_jitter: "0s"
    precision: ""
    debug: false
    quiet: false
    logfile: ""
    hostname: "$HOSTNAME"
    omit_hostname: false
  outputs:
    - influxdb:
        urls:
          - "http://influxdb.monitoring.svc:8086"
        database: "telegraf"
        retention_policy: ""
        timeout: "5s"
        username: ""
        password: ""
        user_agent: "telegraf"
        insecure_skip_verify: false
  monitor_self: false

但是,由于我们将使用 InfluxDB Cloud,我们必须进行一些调整。修改后的版本看起来像这样

## Exposed telegraf configuration
## ref: https://docs.influxdb.org.cn/telegraf/v1.13/administration/configuration/
config:
  # global_tags:
  #   cluster: "mycluster"
  agent:
    interval: "1m"
    round_interval: true
    metric_batch_size: 1000
    metric_buffer_limit: 10000
    collection_jitter: "0s"
    flush_interval: "10s"
    flush_jitter: "0s"
    precision: ""
    debug: false
    quiet: false
    logfile: ""
    hostname: "$HOSTNAME"
    omit_hostname: false
  outputs:
    - influxdb_v2:
        urls:
          - "https://us-west-2-1.aws.cloud2.influxdata.com"
        bucket: "kubernetes"
        organization: "[email protected]"
        token: "WIX6Fy-v10zUIag_dslfjasfljadsflasdfjasdlñjfasdlkñfj=="
        timeout: "5s"
        insecure_skip_verify: false
  monitor_self: false

如果我们需要调整其他值,例如收集间隔,您可以通过更改 interval 值来完成。例如,我不需要每 10 秒收集一次数据,所以我将其更改为 1 分钟。

现在到了关键时刻!我们将安装 Helm Chart,看看一切是否按预期运行。根据您的 K3s 配置,您可能需要将集群配置作为 KUBECONFIG 环境变量传递。

$  export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

完成后,我们将添加 Awesome-Helm-Charts 存储库。

$ helm repo add awesome-helm-charts https://xe-nvdk.github.io/awesome-helm-charts/

然后我们更新我们配置的存储库的内容。

$ helm repo update

最后,我们将安装存储库,并将我们刚刚在 values.yaml 文件中修改的配置传递给它

$ helm upgrade --install telegraf-ds-k3s -f values.yaml awesome-helm-charts/telegraf-ds-k3s

终端应返回类似于这样的内容

Release "telegraf-ds-k3s" does not exist. Installing it now.
NAME: telegraf-ds-k3s
LAST DEPLOYED: Fri Jun 25 22:47:22 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
To open a shell session in the container running Telegraf run the following:

- kubectl exec -i -t --namespace default $(kubectl get pods --namespace default -l app.kubernetes.io/name=telegraf-ds -o jsonpath='{.items[0].metadata.name}') /bin/sh

To tail the logs for a Telegraf pod in the Daemonset run the following:

- kubectl logs -f --namespace default $(kubectl get pods --namespace default -l app.kubernetes.io/name=telegraf-ds -o jsonpath='{ .items[0].metadata.name }')

To list the running Telegraf instances run the following:

- kubectl get pods --namespace default -l app.kubernetes.io/name=telegraf-ds -w

此输出表明 Helm Chart 已成功部署。请记住,这是一个 DaemonSet,它会自动将 Helm Chart 安装在此集群中的每个节点上。

要检查一切是否正常运行,请使用以下命令

$ kubectl get pods

我们看到我们的 Pod 正在运行。

NAME                    READY   STATUS    RESTARTS   AGE
telegraf-ds-k3s-w8qhc   1/1     Running   0          2m29s

如果您想确保日志按预期工作,请运行

$ kubectl logs -f telegraf-ds-k3s-w8qhc

终端应输出类似于这样的内容

2021-06-26T02:55:22Z I! Starting Telegraf 1.18.3
2021-06-26T02:55:22Z I! Using config file: /etc/telegraf/telegraf.conf
2021-06-26T02:55:22Z I! Loaded inputs: cpu disk diskio kernel kubernetes mem net processes swap system
2021-06-26T02:55:22Z I! Loaded aggregators:
2021-06-26T02:55:22Z I! Loaded processors:
2021-06-26T02:55:22Z I! Loaded outputs: influxdb_v2
2021-06-26T02:55:22Z I! Tags enabled: host=k3s-master
2021-06-26T02:55:22Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"k3s-master", Flush Interval:10s

一切似乎都很好,但现在到了关键时刻。我们转到我们的 InfluxDB Cloud 帐户,导航到“Explore”部分,我们应该会看到一些指标,当然,在选择存储桶时也会看到一些数据。

navigate to the Explore section

正如您所看到的,这个过程并不像看起来那么复杂。Helm Chart 简化了我们的生活,从现在开始,我们可以使用外部系统查看集群中发生的情况。