最近在看Tensorflow分布式集群的东西,于是就想学着用Kubernetes来简化集群管理。无奈目前手头上只有几个CentOS
6.5的云主机可以用,又不能随便换成CentOS
7,所以只好凑合着用了。折腾了一天总算把k8s跑起来了,这里记录下整个安装部署过程,虽然可能对别人没什么参考价值。
1、升级CentOS 6.5内核版本
因为CentOS
6.5的内核版本比较低,导致无法安装docker的较新版本,所以先把内核版本升级一下,安装新版内核方法如下:
rpm --import
https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh
http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel
install kernel-lt -y
最近本博主在阅读MongoDB的Golang版本驱动mgo的源代码,一来是想通过阅读一些优秀的Golang项目代码进一步学习Golang的高级用法,二来是因为目前公司的一些项目都在使用mgo作为MongoDB的驱动,理解其内部实现有助于更好地使用它,三来则是想通过阅读驱动代码迫使自己更加细致地去了解MongoDB的通信协议,从另一个角度加深对MongoDB自身功能的了解。
在mgo中所有对MongoDB服务器的读写操作均通过Session来完成,无论Session连接的是MongoDB单点、复制集还是分片集群中的mongos。当Session首次被创建去连接参数给定的MongoDB服务器种子节点的时候,Session本身需要去识别它要连接的MongoDB服务器到底是单点、复制集还是mongos。如果连接的是MongoDB复制集,在参数没有提供全部节点列表的时候,Session需要主动去发现列表中未给出的节点。另外,因为复制集在发生Failover时可能会发生Primary节点切换导致复制集内部节点角色的变化,所以Session内部也需要有一个定期同
为了能够重用已有的C语言库,我们在使用Golang开发项目或系统的时候难免会遇到Go和C语言混合编程,这时很多人都会选择使用cgo。话说cgo这个东西可算得上是让人又爱又恨,好处在于它可以让你快速重用已有的C语言库,无需再用Golang重造一遍轮子,而坏处就在于它会在一定程度上削弱你的系统性能。关于cgo的种种劣迹,Dave
Cheney大神在他的博客上有一篇专门的文章《cgo is not
Go》,感兴趣的同学可以看一看。但话说回来,有时候为了快速开发满足项目需求,使用cgo也实在是不得已而为之。
在Golang中使用cgo调用C库的时候,如果需要引用很多不同的第三方库,那么使用#cgo CFLAGS:和#cgo
LDFLAGS:的方式会引入很多行代码。首先这会导致代码很丑陋,最重要的是如果引用的不是标准库,头文件路径和库文件路径写死的话就会很麻烦。一旦第三方库的安装路径变化了,Golang的代码也要跟着变化,所以使用p