kubernetes1.2如何操作Docker

本次分析的kubernetes版本号:v1.2.1-beta.0。
Kubernetes对Docker的管理是通过一个第三方组件实现的,这个第三方组件就是go-dockerclient,这是一个GO语言写的docker客户端,支持Docker remote API,这个项目在https://github.com/fsouza/go-dockerclient中,感兴趣的话可以去看看。
go-dockerclient调用Docker remote API来操作Docker,在Kubernetes1.2中要求Docker Remote API版本至少是1.18,下面是Docker Daemon版本同Docker Remote API版本对应关系,从中可以看出来使用Kubernetes1.2可以管理1.6.x以上版本的Docker。
kubernetes1.2如何操作Docker_第1张图片
下面表格第一列是Docker官网上Docker Remote API 1.22版本,第二列是go-dockerclient中使用到的Docker remote API,第三列是kubernetes1.2中使用到的Docker remote API,从这个列表就可以看到kuberneters1.2都调用了哪些Docker接口,以及可以实现Docker哪些功能。

从表格中可以看到,kubernetes没有使用到Docker的网络接口,也没有使用到Docker的卷接口,原因是kubernetes自己定义了Service和POD,自己实现了POD之间的网络和挂载到POD上的卷。
从表格中也可以看到,kubernetes对Docker容器的管理只有很少的功能,甚至都没有使用到Docker的重启接口,还是因为kubernetes自己定义的POD,kubernetes以POD为基本操作单元,而且是kubernetes从容器集群管理角度设计的,所以不存在对POD里面单个Docker容器的重启操作。
那么我们可以用下面这张图来把POD和容器之间的关系形象化,此图仅供说明问题时的参考,并无实际意义。

我们可以把POD看作是机器里面的操作系统,把容器看作是里面的进程,在操作系统内部进程间是可以通过IPC(Inter-Process Communication)进行通讯的,不同操作系统之间的进程是通过操作系统IP和端口进行通讯的,那么对应到POD和容器,就变成了POD内部容器间事可以通过IPC(Inter-Process Communication)进行通讯的,不同POD之间的容器是通过POD IP和端口进行通讯的。从集群的角度来考虑问题,kubernetes基本操作单元是POD,不需要关注到POD中的容器,那么我们可以想象一下,如果我们要按照虚拟机的使用方式来使用容器,那样的话应该如何使用kubernetes呢?可以看下面的图。

这样我们就实现了像虚拟机那样使用容器,我们可以认为POD就是一个虚拟机,只不过在这个虚拟机中只有一个容器。但是如果要对这个虚拟机进行操作的时候我们发现问题来了,从前面的表格中可以看到,kubernetes对Docker容器的管理只有很少的功能,没有使用到Docker的重启接口,但是如果把容器当作虚拟机用,必然要使用重启功能,抛开kubernetes的设计理念,我们自己可以扩展kubernetes对POD重启的实现,实现把容器当作虚拟机来使用的需求。

你可能感兴趣的:(docker,容器,go语言,KUBERNETES)