如何使用Telegraf和InfluxDB Cloud监控Kubernetes K3s
作者:Ignacio Van Droogenbroeck / 产品
2022年12月08日
导航至
本文最初发表在The New Stack,并在此处获得授权转载。
Helm图表可以简化我们的生活,并使我们能够通过外部系统查看K3s集群的状态。
轻量级Kubernetes,也称为K3s,是一种内存占用仅为一半的Kubernetes安装。
您需要监控运行K3s的节点以了解集群的状态吗?您还需要了解您的Pod的性能、资源消耗以及网络流量吗?在本文中,我将向您展示如何使用Telegraf和InfluxDB Cloud来监控K3s。
我在Kubernetes上运行一个博客和一些其他资源。具体来说,这些资源运行在DigitalOcean上三个节点的集群中,我使用Telegraf和InfluxDB来监控一切。
我将演示如何监控集群以确保一切按预期运行,以及如何识别异常情况。
为了监控集群,我使用了两个组件
InfluxDB Cloud:从外部进行监控是理想的选择,因为如果我们从内部进行,节点故障时,监控解决方案也会故障,这没有任何意义。您可以在以下链接处获取免费的InfluxDB账户:https://cloud2.influxdata.com/signup/
接下来,我们需要从Telegraf安装一个Helm图表,具体是这个,因为它不支持Docker引擎,而如果您运行K3s,则不需要它。
让我们开始吧…
配置InfluxDB Cloud
我们首先必须做的是在InfluxDB Cloud中创建一个账户。接下来,我们进入数据部分,点击桶,然后点击创建桶。
命名桶并点击创建。
我们的桶列表应该看起来像这样。成功创建桶后,我们创建一个访问令牌以便能够向该桶写入数据。为此,我们转到令牌选项卡。
在这个部分,我们点击生成令牌并选择读/写令牌选项。
我们指定一个名称,选择我们想要与该令牌关联的桶,然后点击保存。
完成此操作后,新的令牌将出现在令牌列表中。
为了完成这部分,我们需要我们的组织ID和指向Telegraf的URL。
组织ID是您用于注册InfluxDB Cloud的电子邮件。我从地址栏获取URL。以我的情况为例,当我设置我的InfluxDB Cloud账户时,我选择了美国西部。因此,我的URL看起来像这样
https://us-west-2-1.aws.cloud2.influxdata.com
现在我们已经配置了InfluxDB Cloud,我们需要配置节点。
如我上面提到的,我们将使用Helm图表。我修改了这个Helm图表以适应K3s,因为默认情况下它试图监控Docker,而在这个Kubernetes分布中并不使用Docker。
如果您还没有安装Helm,可以通过运行以下命令来安装它
$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
安装完成后,从这里下载values.yaml文件。
您也可以直接将原始文件下载到主节点上。
$ wget https://raw.githubusercontent.com/xe-nvdk/awesome-helm-charts/main/telegraf-ds-k3s/values.yaml
现在,我们需要修改这个文件。我们需要打开它并修改输出部分。默认文件看起来像这样
## 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
如果我们需要调整其他值,比如收集间隔,我们可以通过更改间隔值来完成。例如,我不需要每10秒的数据,所以我将其改为1分钟。
现在,我们来到了关键时刻!我们将安装Helm图表,看看一切是否按预期工作。根据您的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图表已成功部署。请注意,这是一个DaemonSet,它会在集群中的每个节点上自动安装Helm图表。
要检查一切是否运行正常,请使用以下命令
$ 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云账户,导航到探索部分,选择存储桶后应该能看到一些测量值和一些数据。
如您所见,这个过程并没有看起来那么复杂。Helm图表简化了我们的生活,从现在起我们可以通过外部系统查看集群的情况。