文章目录
docker(十)Docker使用为什么k8s
docker(十)Docker
SwarmSwarm 集群管理 Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 支持的工具包括但不限于以下各项: Dokku Docker Compose Docker Machine Jenkins
原理 如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。 swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。 work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)。
使用
1、创建 swarm 集群管理节点(manager)
创建 docker 机器:
$ docker-machine create -d virtualbox swarm-manager
初始化 swarm 集群,进行初始化的这台机器,就是集群的管理节点。
$ docker-machine
ssh swarm-manager
$ docker swarm init --advertise-addr 192.168.99.107
得到以下输出,证明已经初始化成功。需要把以下这行复制出来,在增加工作节点时会用到:
docker swarm
join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
2、创建 swarm 集群工作节点(worker)
直接创建好俩台机器,swarm-worker1 和 swarm-worker2 。
分别进入两个机器里,指定添加至上一步中创建的集群,这里会用到上一步复制的内容。
docker@swarm-worker1:~$ docker swarm
join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
3、查看集群信息
进入管理节点,执行:docker info 可以查看当前集群的信息。
$ docker info
4、部署服务到集群中
注意:跟集群管理有关的任何操作,都是在管理节点上操作的。
以下例子,在一个工作节点上创建一个名为 helloworld 的服务,这里是随机指派给一个工作节点:
docker@swarm-manager:~$ docker
service create --replicas 1 --name helloworld alpine
ping docker.com
5、查看服务部署情况
查看 helloworld 服务运行在哪个节点上,可以看到目前是在 swarm-worker1 节点:
docker@swarm-manager:~$ docker
service ps helloworld
查看 helloworld 部署的具体信息:
docker@swarm-manager:~$ docker
service inspect --pretty helloworld
6、扩展集群服务
我们将上述的 helloworld 服务扩展到俩个节点。
docker@swarm-manager:~$ docker
service scale helloworld
=2
可以看到已经从一个节点,扩展到两个节点。
docker@swarm-manager:~$ docker
service ps helloworld
7、删除服务
docker@swarm-manager:~$ docker
service rm helloworld
8、滚动升级服务
以下实例,我们将介绍 redis 版本如何滚动升级至更高版本。
创建一个 3.0.6 版本的 redis。
docker@swarm-manager:~$ docker
service create --replicas 1 --name redis --update-delay 10s redis:3.0.6
滚动升级 redis 。
docker@swarm-manager:~$ docker
service update --image redis:3.0.7 redis
查看是否成功
docker@swarm-manager:~$ docker
service ps redis
9、停止某个节点接收新的任务
查看所有的节点:
docker@swarm-manager:~$ docker node
ls
目前所有的节点都是 Active, 可以接收新的任务分配。
停止节点 swarm-worker1:
docker@swarm-manager:~$ docker node update --availability drain swarm-worker1
注意:swarm-worker1 状态变为 Drain。不会影响到集群的服务,只是 swarm-worker1 节点不再接收新的任务,集群的负载能力有所下降。
可以通过以下命令重新激活节点:
docker@swarm-manager:~$ docker node update --availability active swarm-worker1
为什么k8s
当前主流的容器集群管理技术,包括了 Docker 官方的 Docker Swarm、Twitter 背书的 Mesos 和 Google 背书的 Kubernetes。由于Apache Mesos 只是一个分布式内核,目前的发展方向是数据中心操作系统(DCOS),它同时支持 Marathon、Kubernetes 和 Swarm 等多种框架,连 Mesosphere 也是 Kubernetes 生态的一员,从编排的角度,讨论 Mesos 意义不大,故而只对比 Docker Swarm 和 Kubernetes。
kubernetes是更为成熟的编排工具,有google背书,社区活跃明显超过Swarm,并且考虑到目前Docker公司和整个CaaS生态圈的关系,我会选择Kubernetes,所以后面会着重了解
题外话
业界更普遍的定位是Docker用于开发测试环境,而RunC用于生产环境,所以对于要在生产环境采用容器技术的,一定要研究RunC。
runc简介