Kubernetes对Docker的管理是通过一个第三方组件实现的。在Kubernetes1.2中这个第三方组件就是go-dockerclient,这是一个GO语言写的docker客户端,支持Docker remote API,这个项目在https://github.com/fsouza/go-dockerclient中;在Kubernetes1.3中直接使用docker公司提供的client来实现,通过这个client可以实现同Docker Deamon之间的通讯,这个客户端项目在https://github.com/docker/engine-api/中,感兴趣的话可以去看看。

下面是Docker版本同API版本对应关系:

Docker版本

API版本

1.12x

1.24

1.11.x

1.23

1.10.x

1.22

1.9.x

1.21

1.8.x

1.20

1.7.x

1.19

1.6.x

1.18

1.5.x

1.17

1.4.x

1.16

1.3.x

1.15

1.2.x

1.14

下面表格第一列是Docker官网上API 1.24版本,第二列是API使用方式,第三列是Kubernetes1.2中使用到的Docker API,第四列是Kubernetes1.3中使用到的Docker API,从这个列表就可以看到kuberneters13都调用了哪些Docker API接口,以及可以实现Docker哪些功能。

Docker API 1.24

使用方式

Kubernetes1.2

Kubernetes1.3

Get container stats based on resource usage

GET /containers/(id)/stats

 

 

Update a container

POST /containers/(id)/update

 

 

Rename a container

POST /containers/(id)/rename

 

 

Retrieving information about files and folders in a container

HEAD /containers/(id)/archive

 

 

List containers

GET /containers/json

Inspect a container

GET /containers/(id)/json

Inspect changes on a container’s filesystem

GET /containers/(id)/changes

Create a container

POST /containers/create

Start a container

POST /containers/(id)/start

Stop a container

POST /containers/(id)/stop

Restart a container

POST /containers/(id)/restart

 

 

Pause a container

POST /containers/(id)/pause

 

 

Unpause a container

POST /containers/(id)/unpause

 

 

List processes running inside a container

GET /containers/(id)/top

 

 

Kill a container

POST /containers/(id)/kill

Remove a container

DELETE /containers/(id)

Get an archive of a filesystem resource in a container

GET /containers/(id)/archive

 

 

Extract an archive of files or folders to a directory in a container

PUT /containers/(id)/archive

 

 

Copy files or folders from a container

POST /containers/(id)/copy,以后会被删除掉,使用archive代替

 

 

Wait a container

POST /containers/(id)/wait

 

 

Create a new image from a container’s changes

POST /commit

 

 

Attach to a container

POST /containers/(id)/attach

Attach to a container (websocket)

GET /containers/(id or name)/attach/ws

 

 

Get container logs

GET /containers/(id)/logs

Resize a container TTY

POST /containers/(id)/resize

 

 

Export a container

GET /containers/(id)/export

 

 

List Images

GET /images/json

Inspect an image

GET /images/(name)/json

Get the history of an image

GET /images/(name)/history

 

Push an image on the registry

POST /images/(name)/push

 

 

Build image from a Dockerfile

POST /build

 

 

Create an image

POST /images/create

Load a tarball with a set of images and tags into docker

POST /images/load

 

 

Get a tarball containing all images in a repository

GET /images/(name)/get

 

 

Get a tarball containing all images

GET /images/get

 

 

Tag an image into a repository

POST /images/(name)/tag

 

 

Remove an image

DELETE /images/(name)

Search images

GET /images/search

 

 

Monitor Docker’s events

GET /events

 

 

Show the docker version information

GET /version

Display system-wide information

GET /info

Ping the docker server

GET /_ping

 

 

List volumes

GET /volumes

 

 

Create a volume

POST /volumes/create

 

 

Inspect a volume

GET /volumes/(name)

 

 

Remove a volume

DELETE /volumes/(name)

 

 

List networks

GET /networks

 

 

Inspect network

GET /networks/<network-id>

 

 

Create a network

POST /networks/create

 

 

Remove a network

DELETE /networks/(id)

 

 

Connect a container to a network

POST /networks/(id)/connect

 

 

Disconnect a container from a network

POST /networks/(id)/disconnect

 

 

Check auth configuration

POST /auth

 

 

Exec Create

POST /containers/(id)/exec

Exec Start

POST /exec/(id)/start

Exec Resize

POST /exec/(id)/resize

 

 

Exec Inspect

GET /exec/(id)/json

List plugins

GET /plugins

 

 

Install a plugin

POST /plugins/pull?name=<plugin name>

 

 

Inspect a plugin

GET /plugins/(plugin name)

 

 

Enable a plugin

POST /plugins/(plugin name)/enable

 

 

Disable a plugin

POST /plugins/(plugin name)/disable

 

 

Remove a plugin

DELETE /plugins/(plugin name)

 

 

List nodes

GET /nodes

 

 

Inspect a node

GET /nodes/<id>

 

 

Remove a node

DELETE /nodes/<id>

 

 

Update a node

POST /nodes/<id>/update

 

 

Inspect swarm

GET /swarm

 

 

Initialize a new swarm

POST /swarm/init

 

 

Join an existing swarm

POST /swarm/join

 

 

Leave a swarm

POST /swarm/leave

 

 

Update a swarm

POST /swarm/update

 

 

List services

GET /services

 

 

Create a service

POST /services/create

 

 

Remove a service

DELETE /services/(id or name)

 

 

Inspect one or more services

GET /services/(id or name)

 

 

Update a service

POST /services/(id or name)/update

 

 

List tasks

GET /tasks

 

 

Inspect a task

GET /tasks/(task id)

 

 

从表格中可以看到,Kubernetes1.3中调用了Docker的Get the history of an image接口,调用这个接口的目的是获取镜像的详细历史信息。

另外从表格中可以看到,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重启的实现,实现把容器当作虚拟机来使用的需求。

kubernetes1.3:操作Docker的更多相关文章

  1. 操作docker容器

    Docker容器时镜像的一个运行实例,而镜像是静态的只读文件,容器带有运行时需要的可写文件层.如果认为虚拟机是模拟运行的一整套操作系统(包括内核.应用运行的环境和其他系统环境)和跑在上面的应用,那么D ...

  2. java操作docker示例(docker-java)

    1.首先要修改docker服务器的 /usr/lib/systemd/system/docker.service,加入紫色框的配置 2.下载docker-java 的github源码 git clon ...

  3. C#.Net Core 操作Docker中的redis数据库

    做软件开发的人,会在本机安装很多开发时要用到的软件,比如数据库,有MS SQL Server,MySQL,等,如果每种数据库都按照在本机确实有点乱,这个时候我们就想用虚拟机来隔离,这样就不会扰乱本机一 ...

  4. Docker实战(二)之操作Docker容器

    容器是Docker的另外一个核心概念.简单来说,容器是镜像的一个运行实例.所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层.如果认为虚拟机是模拟运行的一整套操作系统系统(包括内核,应 ...

  5. Docker 容器高级操作[Docker 系列-3]

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 上篇文章向读者介绍了一个 Nginx 的例子,对于 Nginx 这样一个容器而言,当它启动成功后,我们 ...

  6. 使用EF操作Docker中的Mysql实例

    为啥我会选择mysql呢?因为我的服务器配置较低,而SqlServer在docker中的实例,服务器的运行内存应当保持在2G+,我没有这个条件,它会爆出这样的错误 sqlservr: This pro ...

  7. Docker SDK api操作Docker

    下载包 go get "github.com/docker/docker/api/types" go get "github.com/docker/docker/clie ...

  8. kubernetes1.4新特性:支持Docker新特性

    (一)背景资料 在Kubernetes1.2中这个第三方组件就是go-dockerclient,这是一个GO语言写的docker客户端,支持Dockerremote API,这个项目在https:// ...

  9. Docker - 从零开始到操作

    从零开始 介绍Docker的基本概念和命令,并给出简单使用示例和参考信息. Docker - 基础讲义 http://www.cnblogs.com/anliven/p/6281373.html Do ...

随机推荐

  1. chrome屏蔽https广告

    “设置” -> “高级” -> 系统/“打开代理设置” -> “安全” -> “受限站点” -> “添加” 好了

  2. poj1160 动态规划

    #include<stdio.h> #include<string.h> #define INF 999999999 #define Min(x,y) (x<y?x:y) ...

  3. Http中GET和POST请求的区别

    https://mp.weixin.qq.com/s/_oLnkDQn3TE7XdFWCT5Img GET请求 GET /books/?sex=man&name=Professional HT ...

  4. _mysql_exceptions.IntegrityError: (1062, "Duplicate entry, Python操作MySQL数据库,插入重复数据

    [python] view plain copy sql = "INSERT  INTO test_c(id,name,sex)values(%s,%s,%s)" param =  ...

  5. 面试Nginx的几个常见问题(

    1.Nginx 服务器上的 Master 和 Worker 进程分别是什么 Master 进程:读取及评估配置和维持 Worker 进程:处理请求   2.怎么添加模块? Firstly, you h ...

  6. applyMiddleware源码中的闭包

    闭包都是个老掉牙的话题了,这次又提起,是因为重看Redux源码时发现了applyMiddleware里的用法很巧妙.我们先看一个简单的例子. var a = (num) => num + 1 v ...

  7. 使用session实现一次性验证码

    在登录页面和各种页面,会看到有验证码输入,这样做的目的是为了防止密码猜测工具破解密码,保护了用户密码安全,验证码只能使用一次,这样就给密码猜测工具带来了很大的困难,基本上阻断了密码猜测工具的使用. 可 ...

  8. Vue. 之 Element table 单元格内容隐藏

    Vue. 之 Element table 单元格内容隐藏 在table显示数据时,若某个单元格的内容过多,需要进行隐层,在这一列的单元格属性添加::show-overflow-tooltip=&quo ...

  9. 查漏补缺&#183;补丁计划

    趁着神志清醒赶紧写一下. 多次考试暴露出各种问题.新的知识点先不去搞了,最近多做一些不擅长的类型的题查漏补缺一下吧. 唔,首先是比较考验思维的类型,我智商太低又刷题少不会什么套路,只能最近赶紧赶一下进 ...

  10. iostat统计信息

    用途:报告中央处理器(CPU)统计信息和整个系统.适配器.tty 设备.磁盘和 CD-ROM 的输入/输出统计信息. 语法:iostat [ -c | -d ] [ -k ] [ -t | -m ] ...