Telegraf 容器化部署实战:从 Docker 单机到 Kubernetes DaemonSet
Telegraf 容器化部署实战从 Docker 单机到 Kubernetes DaemonSet【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegrafTelegraf 是 InfluxData 出品的监控采集 Agent负责收集、处理、聚合并写出指标、日志等数据。本文不重复官方文档只回答一个问题你要把 Telegraf 容器化部署到生产环境从本地验证到 Kubernetes 集群托管每一步该敲什么命令。本地验证一行命令导出默认配置部署翻车大多发生在配置还没跑通就上了容器。第一步先脱离环境把配置本身验证掉docker run --rm telegraf telegraf config telegraf.conf这条命令把 Telegraf 内置的默认配置直接打印出来你重定向到本地文件拿到一份带全部插件注释的空白模板。接下来只改两处打开你要的 input指向你的输出端。[[inputs.cpu]] percpu true totalcpu true [[outputs.influxdb]] urls [http://influxdb:8086]改完先别急着起容器用--test跑一轮采集指标能打印出来再谈部署。最小可运行的容器挂载方式与 memlock 告警Telegraf 的镜像不内置业务配置容器状态就是一份配置文件 只读挂载。启动时把它挂进/etc/telegrafdocker run -d \ --name telegraf \ -v $PWD/telegraf.conf:/etc/telegraf/telegraf.conf:ro \ --ulimit memlock8192:8192 \ telegraf容器没有持久状态坏了随时删了重建这正是后面能托管到 K8s 的前提。这里提前处理一个你大概率见过的报错W! Insufficient lockable memory 64kb when 72kb is required原因是 Telegraf 默认把密钥等敏感数据放在锁定的内存里防止被换出到磁盘容器默认没给足 memlock 配额就会报这个警告甚至直接 panic。官方文档给了两条路仓库里的 docs/DOCKER.md 有完整说明方案适用场景代价启动时加--ulimit memlock8192:8192或先ulimit -l 8192生产推荐无加--unprotected关闭内存锁定临时排障密钥可能落盘安全性下降生产环境走 ulimit不走--unprotected。给单机生产配置套上资源笼子本地能跑不等于能上生产。先按节点规模定资源档位避免采集器自己挤占业务资源节点规模requestscpu / 内存limitscpu / 内存小型4 CPU50m / 64Mi100m / 128Mi大型8 CPU100m / 256Mi300m / 512Mi再给采集器装个自我监控这样容器 OOM 之前你能先从指标上看到内存曲线[[inputs.internal]] collect_memstats true最后几个加固要点配置文件一律:ro只读挂载配置写错了容器快速失败比静默跑偏好排查。官方镜像默认以非 root 用户运行不需要额外USER指令。K8s 中可叠加securityContext: { readOnlyRootFilesystem: true }收紧文件系统。多节点集群托管DaemonSet ConfigMap RBAC单机跑稳之后多节点场景交给 DaemonSet每个节点恰好一个采集实例节点扩缩容时 Pod 自动跟随。配置放 ConfigMap 统一下发不再逐台机器改文件。先看 DaemonSet 的最小生产版本含资源限制与 docker.sock 挂载apiVersion: apps/v1 kind: DaemonSet metadata: name: telegraf namespace: monitoring spec: selector: matchLabels: {app: telegraf} template: metadata: labels: {app: telegraf} spec: containers: - name: telegraf image: telegraf:latest resources: requests: {cpu: 50m, memory: 64Mi} limits: {cpu: 100m, memory: 128Mi} volumeMounts: - {name: config, mountPath: /etc/telegraf} - {name: var-run, mountPath: /var/run/docker.sock} volumes: - name: config configMap: name: telegraf-config - name: var-run hostPath: path: /var/run/docker.sock配套的 ConfigMap 只管下发采集节奏和输出端apiVersion: v1 kind: ConfigMap metadata: name: telegraf-config namespace: monitoring data: telegraf.conf: | [agent] interval 10s [[inputs.kubernetes]] url https://kubernetes.default.svc:443 [[outputs.influxdb]] urls [http://influxdb.monitoring.svc:8086]如果还想采节点与 Pod 指标inputs.kubernetes插件的url留空即从所有节点的 kubelet 读bearer token 直接读默认 ServiceAccount 挂载路径见 plugins/inputs/kubernetes/sample.conf。权限只给只读Telegraf 是采集器不是控制器get/list/watch就够了apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: telegraf rules: - apiGroups: [] resources: [nodes, pods] verbs: [get, list, watch]节点指标取不到的排查顺序固定先kubectl describe sa telegraf -n monitoring看权限再进 Pod 验证 API 连通性kubectl exec -it telegraf-pod -- curl https://kubernetes.default.svc:443。下一步行动清单今晚就做telegraf config导出配置 → 本地--test验证一轮采集不通过不上容器。上单机前启动命令带上--ulimit memlock8192:8192配置只读挂载按节点规模设好 requests/limits。扩到多节点时切 DaemonSet ConfigMapRBAC 只读节点指标取不到先查 ServiceAccount 权限再查 API 连通性。【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考