如何使用 Telegraf 和 InfluxDB Cloud 监控 Kubernetes K3s
作者 Ignacio Van Droogenbroeck / 产品
Dec 08, 2022
导航至
本文最初发表于 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 中创建一个帐户。接下来,我们转到“数据”部分,单击“存储桶”,然后单击“创建存储桶”。
命名存储桶并单击“创建”。
这就是我们的存储桶列表应该的样子。成功创建存储桶后,我们创建一个访问令牌,以便能够将数据写入该存储桶。为此,我们转到“令牌”选项卡。
在此部分中,我们单击“生成令牌”,然后选择“读/写令牌”选项。
我们指定一个名称,选择要与此令牌关联的存储桶,然后单击“保存”。
完成后,新令牌将出现在令牌列表中。
为了完成这一部分,我们将需要我们的 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”部分,我们应该会看到一些指标,当然,在选择存储桶时也会看到一些数据。
正如您所看到的,这个过程并不像看起来那么复杂。Helm Chart 简化了我们的生活,从现在开始,我们可以使用外部系统查看集群中发生的情况。