Heapster源码编译及镜像制作
1.Heapster简介
Kubernetes有个监控—cAdvisor。每个kubernetes Node上都会运行cAdvisor,但是它只会会收集本机以及容器的监控数据,无法监控到整个集群的监控数据。
Heapster是一个收集者,将每个Node上的cAdvisor的数据进行汇总,然后导到第三方工具(如InfluxDB)进行数据持久化,在通过相关的图标展示工具(如grafana)进行展示。
所以说heapster是目前使用比较广泛的一种集群监控数据收集组件,我们可以直接从阿里云或者dockerhub上直接pull到本地镜像库中,但是能够自己手动编译并制作成镜像也是非常不错的,特别是在跨架构平台的服务器上,无法直接从阿里云或者dockerhub上下载到相关的镜像,这时候就需要我们手动编译,编译后做成我们需要的镜像信息。
Heapster使用go语言开发而成,这里假如你的机器上已经安装了go(go的版本必须在1.9.5
以上)工具,如果没有就请先安装go的工具。这里不再给大家演示。
编译环境linux centos7
。
2.Heapster源码下载
我们可以直接从github上下载所需要的版本信息。这里直接以1.5.4版本为例。
下载地址:https://github.com/kubernetes-retired/heapster/tree/v1.5.4
源码的结构如下:
-rw-rw-r-- 1 root root 3059 7月 26 2018 code-of-conduct.md drwxrwxr-x 11 root root 136 7月 26 2018 common -rw-rw-r-- 1 root root 883 7月 26 2018 CONTRIBUTING.md drwxrwxr-x 4 root root 51 7月 26 2018 deploy drwxrwxr-x 3 root root 4096 7月 26 2018 docs drwxrwxr-x 8 root root 95 7月 26 2018 events drwxrwxr-x 2 root root 37 7月 26 2018 Godeps drwxrwxr-x 3 root root 125 7月 26 2018 grafana drwxrwxr-x 2 root root 114 7月 26 2018 hooks drwxrwxr-x 2 root root 90 7月 26 2018 influxdb drwxrwxr-x 2 root root 105 7月 26 2018 integration -rw-rw-r-- 1 root root 11324 7月 26 2018 LICENSE -rw-rw-r-- 1 root root 4300 2月 26 17:38 Makefile drwxrwxr-x 13 root root 4096 7月 26 2018 metrics -rwxrwxr-x 1 root root 2389 7月 26 2018 README.md drwxrwxr-x 9 root root 135 7月 26 2018 vendor drwxrwxr-x 2 root root 23 7月 26 2018 version
Heapster编译主要有两个功能模块:eventer、heapster。
eventer的源码在上面目录中的events文件夹中。
heapster的源码在上面目录中的metrics文件夹中。
3.eventer模块编译
events文件夹中eventer.go是模块的主程序,单独把events文件夹拿出来放在GOPATH/src下面,如果直接使用go build eventer.go编译会报错,报错原因是找不到相关关联包。
包的相关位置:
把关联包都放在GOPATH/src目录下面,目录如下: drwxr-xr-x 3 root root 15 2月 26 11:20 bitbucket.org drwxr-xr-x 3 root root 15 2月 26 11:20 cloud.google.com drwxr-xr-x 36 root root 4096 2月 26 11:04 github.com drwxr-xr-x 3 root root 14 2月 26 11:06 golang.org drwxr-xr-x 6 root root 58 2月 26 11:16 google.golang.org drwxr-xr-x 6 root root 63 2月 26 11:12 gopkg.in drwxr-xr-x 9 root root 122 2月 26 11:05 k8s.io 各个包对应的位置如下: bitbucket.org:heapster-1.5.4/vendor/ cloud.google.com:heapster-1.5.4/vendor/ github.com:heapster-1.5.4/vendor/ golang.org:heapster-1.5.4/vendor/ google.golang.org:heapster-1.5.4/vendor/ gopkg.in:heapster-1.5.4/vendor/ k8s.io:heapster-1.5.4/vendor/ 这里需要注意的是k8s.io包,因为在目录中这个包线面只有6个包,如下: apimachinery apiserver client-go kube-openapi kubernetes metrics 缺少了heapster,手动新建一个heapster的文件夹,分别将一下的包放到heapster文件夹下面,如下: common events metrics version 添加完毕!
下面就可以编译了。
进入GOPATH/src/events目录下面,使用go build eventer.go就可以完成编译,同时会在当前目录下面生成eventer一个二进制文件。如果你设置go的编译位置就去编译位置拿取二进制文件。
此时eventer模块就编译成功。
4.heapster模块编译
heapster模块编译有两种方式:1.通过make编译。2.通过go进行编译。
1.make进行编译
进入到heapster-1.5.4目录下面,执行make指令,如下:
[root@master heapster-1.5.4]# make 然后等待,编译完成会在当前目录下面生成heapster二进制文件。 使用make指令进行编译会去调用文件中Makefile文件,这是sh指令,通过这个文件会自动执行编译指令,按照文件中顺序进行编译。
2.go工具进行编译
将metrics文件夹让在GOPATH/src文件夹下面。heapster.go文件就是主程序,但是编译时除了依赖各种包,还会依赖handlers.go和auth.go文件。
步骤同上首先准备依赖包:
把关联包都放在GOPATH/src目录下面,目录如下: bitbucket.org cloud.google.com github.com golang.org google.golang.org gopkg.in k8s.io 包的路径同上。 k8s.io中同样新建heapster文件夹,但是只要添加common、metrics、version三个包。
依赖包添加完毕,下面可以编译了。
编译使用指令go build go build heapster.go handlers.go auth.go这里需要注意,需要三个文件同时编译,以为heapster中程序需要依赖handler和auth程序中定义的函数。
编译完成会在当前目录或者定义的编译路径下面生成heapster二进制文件。
5.制作heapster镜像
完成了编译,如果不做成docker进行几乎没有什么可用,这里我们使用dockerfile来完成进行制作。
首先将编译过后的heapster、eventer放在同一个目录下面,同时新建一个Dockerfile文件,如下:
[root@master docker]# ll 总用量 90916 -rwxrwxrwx 1 root root 1025 2月 26 13:51 ca.crt -rwxrwxrwx 1 root root 135 2月 26 17:41 Dockerfile -rwxrwxrwx 1 root root 42109593 2月 26 13:51 eventer -rwxr-xr-x 1 root root 50975682 2月 26 18:08 heapster 这里会有一个ca.crt文件,这个文件需要从k8s集群中获取,如何使用kubeadm安装的集群,默认在/etc/kubernetes/pki文件下面会找到ca.crt文件,一起拷过来,放在同一个目录下面,然后给以权限,使用指令chmod 777 *,全部赋权。
Dockerfile文件的内容如下:
FROM centos:latest COPY heapster eventer / COPY ca.crt /etc/ssl/certs/ # nobody:nobody USER 65534:65534 ENTRYPOINT ["/heapster"] 这里的FROM是基础镜像,可以根据你自己的需要进行设置。
然后使用docker build -f Dockerfile -t heapster:v1.5.4 .命令生成docker镜像。注意最后那个“.”不能省略,如果看不懂这个指令就去学习docker的相关指令用法。