使用Heapster和Splunk监控Kubernetes运行性能


声明:本文转载自https://my.oschina.net/taogang/blog/1608835,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

Kubernetes已经成为容器编排的事实上的王者,连Docker都已经向K8s女王大人低头。对于Kubernetes的cluster的数据收集和监控已经成为IT运维的一个重要话题。我们今天来看一看如何利用Splunk最新的Metrics Store来对Kubernetes的集群进行性能监控。

部署架构

下图是该方案的部署架构,主要包括:

  • 利用Heapster收集K8s的性能数据,包含CPU,Memory,Network,File System等
  • 利用Heapster的Statsd Sink,发送数据到Splunk的Metrics Store
  • 利用Splunk的搜索命令和仪表盘功能对性能数据进行监控

前期准备

前期主要要准备好两件事:

  1. 编译最新的Heapster的镜像,并上传到某个公共的Docker镜像仓库,例如docker hub
  2. 在Splunk中配置Metrics Store和对应的网络输入(Network Input UDP/TCP)

这里主要要做的选择是Statsd的传输协议用UDP还是TCP。这里我推荐使用TCP。 最新的Heapster代码支持不同的Backend,包含了log, influxdb, stackdriver, gcp monitoring, gcp logging, statsd, hawkular-metrics, wavefront, openTSDB, kafka, riemann, elasticsearch等等。因为Splunk的Metrics Store支持statsd协议,所以可以很容易的和Heapster集成。

首先我们需要利用最新的heapster代码,编译一个容器镜像,因为docker hub上的heapsterd的官方镜像的版本比较旧,并不支持statsd。所以需要自己编译。

mkdir myheapster mkdir myheapster/src export GOPATH=myheapster cd myheapster/src git clone https://github.com/kubernetes/heapster.git cd heapster make container

运行以上的命令来编译最新的heapster镜像。

注意,heapster缺省使用udp协议,如果想要使用tcp,需要修改代码

https://github.com/kubernetes/heapster/blob/master/metrics/sinks/statsd/statsd_client.go 

func (client *statsdClientImpl) open() error { 	var err error 	client.conn, err = net.Dial("udp", client.host) 	if err != nil { 		glog.Errorf("Failed to open statsd client connection : %v", err) 	} else { 		glog.V(2).Infof("statsd client connection opened : %+v", client.conn) 	} 	return err }

把udp改成tcp。

我在docker hub上放了两个镜像,分别对应udp版本的tcp版本,大家可以直接使用

  • naughtytao/heapster-amd64:v1.5.0-beta.3 udp
  • naughtytao/heapster-amd64:v1.5.0-beta.4 tcp

然后需要在Splunk中配置Metrics Store,参考这个文档

安装配置Heapster

在K8s上部署heapster比较容易,创建对应的yaml配置文件,然后用kubectl命令行创建就好了。

以下是Deployment和Service的配置文件:

deployment.yaml

apiVersion: extensions/v1beta1 kind: Deployment metadata:   name: heapster   namespace: kube-system spec:   replicas: 1   template:     metadata:       labels:         task: monitoring         k8s-app: heapster         version: v6     spec:       containers:       - name: heapster         image: naughtytao/heapster-amd64:v1.5.0-beta.3         imagePullPolicy: Always         command:         - /heapster         - --source=kubernetes:https://kubernetes.default         - --sink=statsd:udp://ip:port?numMetricsPerMsg=1

service.yaml

apiVersion: v1 kind: Service metadata:   labels:     task: monitoring     # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)     # If you are NOT using this as an addon, you should comment out this line.     kubernetes.io/cluster-service: 'true'     kubernetes.io/name: Heapster   name: heapster   namespace: kube-system spec:   ports:   - port: 80     targetPort: 8082   selector:     k8s-app: heapster

注意这里deployment的--sink的配置,ip是Splunk的IP或者主机名,port的对应的Splunk的data input的端口号。当使用udp协议的时候,需要配置的numMetricsPerMsg的值比较小,当这个值比较大的时候,会出message too long的error。当使用tcp的时候可以配置较大的数值。

运行 kubectl apply -f *.yaml 来部署heapster

如果正常运行,对应的heapster pod的日志如下

I0117 18:10:56.054746       1 heapster.go:78] /heapster --source=kubernetes:https://kubernetes.default --sink=statsd:udp://ec2-34-203-25-154.compute-1.amazonaws.com:8124?numMetricsPerMsg=10 I0117 18:10:56.054776       1 heapster.go:79] Heapster version v1.5.0-beta.4 I0117 18:10:56.054963       1 configs.go:61] Using Kubernetes client with master "https://kubernetes.default" and version v1 I0117 18:10:56.054978       1 configs.go:62] Using kubelet port 10255 I0117 18:10:56.076200       1 driver.go:104] statsd metrics sink using configuration : {host:ec2-34-203-25-154.compute-1.amazonaws.com:8124 prefix: numMetricsPerMsg:10 protocolType:etsystatsd renameLabels:map[] allowedLabels:map[] customizeLabel:0x15fc8c0} I0117 18:10:56.076248       1 driver.go:104] statsd metrics sink using configuration : {host:ec2-34-203-25-154.compute-1.amazonaws.com:8124 prefix: numMetricsPerMsg:10 protocolType:etsystatsd renameLabels:map[] allowedLabels:map[] customizeLabel:0x15fc8c0} I0117 18:10:56.076272       1 heapster.go:202] Starting with StatsD Sink I0117 18:10:56.076281       1 heapster.go:202] Starting with Metric Sink I0117 18:10:56.090229       1 heapster.go:112] Starting heapster on port 8082

在Splunk中进行监控

好了如果一切正常的化,heapster会用statsd的协议和格式发送metrics到Splunk的metrics store。

然后就可以用利用SPL的mstatsmcatalog命令来分析,监控metrics数据了。

以下搜索语句列出所有的Metrics

| mcatalog values(metric_name)

以下搜索语句列出整个cluster的CPU使用,我们可以用Area或者Line Chart来可视化搜索结果。

| mstats avg(_value) WHERE metric_name=cluster.cpu/usage_rate span=30m

kube-system namespace的对应内存使用情况

| mstats avg(_value) WHERE metric_name=namespace.kube-system.memory/usage span=30m

大家可以把自己感兴趣的分析结果放在Dashboard中,利用Realtime设置进行监控。

好了,更多的分析选项可以参考Splunk文档。

 

参考

本文发表于2018年01月18日 08:32
(c)注:本文转载自https://my.oschina.net/taogang/blog/1608835,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2364 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1