专栏名称: 马哥Linux运维
马哥linux致力于linux运维培训,连续多年排名第一,订阅者可免费获得学习机会和相关Linux独家实战资料!
目录
相关文章推荐
运维  ·  再见,CDN 巨头:Akamai 宣布 ... ·  3 天前  
51好读  ›  专栏  ›  马哥Linux运维

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

马哥Linux运维  · 公众号  · 运维  · 2018-04-21 19:22

正文

作者:naughty

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







请到「今天看啥」查看全文