文档章节

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

naughty
 naughty
发布于 01/18 02:40
字数 1188
阅读 1806
收藏 45

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文档。

 

参考

© 著作权归作者所有

共有 人打赏支持
naughty
粉丝 262
博文 62
码字总数 112619
作品 0
其它
架构师
私信 提问
加载中

评论(2)

naughty
naughty

引用来自“大王来巡山”的评论

kubernetes 不是有prometheus么 和这个相比有什么优劣呢?
Splunk是一个商业的机器数据的平台,企业可以把所有的IT运维和数据分析集成在一起。
Prometheus关注于监控,但是对于日志分析等其它工作并不擅长。
用户如果只想监控性能,选择很多。例如heapster+influxdb+grafana
但是如果想要一个端到端的完整的运维管理和监控的解决方案,Splunk能提供更多的功能。
完全取决的于用户的需求。
大王来巡山
大王来巡山
kubernetes 不是有prometheus么 和这个相比有什么优劣呢?
Kubernetes addons Heapster

一、介绍 Heapster是一个集群范围的监视和事件数据聚合器。它本身支持Kubernetes,可以在所有Kubernetes设置上运行。Heapster作为群集中的一个群集运行,类似于其他任何Kubernetes应用程序的...

再出发Brave
2017/12/10
0
0
Kubernetes集群监控

1. 概述 1.1. cAdvisor cAdvisor对Node机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况,cAdvisor集成在Kubelet中,当kubelet...

huwh_
2017/09/08
0
0
k8s原生的集群监控方案(Heapster+InfluxDB+Grafana)

k8s原生的集群监控方案(Heapster+InfluxDB+Grafana) Heapster+InfluxDB+Grafana简介 heapster是一个监控计算、存储、网络等集群资源的工具,以k8s内置的cAdvisor作为数据源收集集群信息,并...

品鉴初心
05/27
0
0
kubernetes+docker监控之简介

kubernetes+docker监控 Docker的监控原则:根据docker官方声明,一个容器不建议跑多个进程,所以不建议在容器中使用agent进行监控(zabbix等),agent应该运行在宿主机,通过cgroup或是docke...

perofu
2016/07/19
5.1K
10
k8s监控 heapster部署实践

更多kubernetes文章:k8s专栏目录 使用 https://github.com/kubernetes/heapster github上的配置启动heapster 目录位置 deploy/kube-config/influxdb/,创建里面3个文件 再创建 deploy/kube-...

zhd930818
04/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

什么是自然语言处理技术

自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计...

本宫没空2
2分钟前
0
0
移动端关闭虚拟键盘

$("#select_date").focus(function(){ document.activeElement.blur(); });

niuhongxia
2分钟前
0
0
Ubuntu18.04安装RabbitMQ(正确安装)

1、安装erlang 由于rabbitMq需要erlang语言的支持,在安装rabbitMq之前需要安装erlang sudo apt-get install erlang-nox 2、安装Rabbitmq 更新源 sudo apt-get update 安装 sudo apt-get ins...

hansonwong
11分钟前
0
0
如何在以太坊开发发行自己的ERC-20数字货币

今天我将向你展示如何在以太坊区块链上开发你自己的加密货币并将其出售!我将向你展示如何使用以太坊智能合约逐步创建自己的ERC-20代币和众筹销售,如何测试智能合约,如何将智能合约部署到以...

geek12345
12分钟前
0
0
Vlock用于有多个用户访问控制台的共享 Linux 系统

当你在共享的系统上工作时,你可能不希望其他用户偷窥你的控制台中看你在做什么。如果是这样,我知道有个简单的技巧来锁定自己的会话,同时仍然允许其他用户在其他虚拟控制台上使用该系统。 ...

linuxprobe16
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部