DockOne微信分享( 九十五):树莓派上的Docker集群管理

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 本文讲的是DockOne微信分享( 九十五):树莓派上的Docker集群管理【编者的话】随着IOT市场的火热发展,Docker天然的轻量级以及帮助业务快速重构的特性,将会在IOT领域迎来巨大发展潜力,甚至有可能会比它在云端的潜力更大。
本文讲的是DockOne微信分享( 九十五):树莓派上的Docker集群管理【编者的话】随着IOT市场的火热发展,Docker天然的轻量级以及帮助业务快速重构的特性,将会在IOT领域迎来巨大发展潜力,甚至有可能会比它在云端的潜力更大。本文将致力于构建一个利用Rancher&RancherOS来管理运行在树莓派上的容器集群。

目前业界主流基本都是在x86架构上使用Docker,除了因为Intel在服务器领域的绝对领导地位之外,x86 CPU的确在性能上有着卓越的表现。但是近些年来,随着云计算的迅猛发展,引来了数据中心的大规模建设,慢慢地大家对数据中心PUE尤其是CPU功耗有了更高的要求。ARM CPU虽然性能不如x86,但是在功耗上绝对有着无法比拟的优势,同时我们知道并不是所有的服务都有高性能的CPU需要。很多厂商在都对ARM服务器投入了研发资源,但是效果上目前来看并不是太好,ARM处理器在服务器领域并没有如在移动端那样被快速接受,主要是因为市场接受度及服务器市场的性能要求所致。
rpi-docker-0.png

但是在物联网(IOT)领域,ARM处理器却是霸主级的地位,毕竟在这个领域功耗胜过一切。那么我们可以想象,未来会占大市场的IOT设备中,会出现各种尺寸各种架构,内置操作系统也不统一,没有通用程序打包标准,几乎每种设备程序的开发框架均不同,IOT设备中程序部署升级回滚等操作不够灵活,等等这样那样的问题。

而这些问题,我们可以借鉴X86时代的经验,用Docker容器来解决它们。Docker能降低IOT应用管理的负载度,但是在物理设备和Docker之间,我们还需要一个轻量级的操作系统。这个OS需要是完全可以定制的,可以针对不同设备需求,裁剪或增加对应的程序模块,更小体积更少进程意味着更低的功耗。

根据以上判断和需求,我经过了一番探索,最终选择了RancherOS。它本身的特性是:
  • 真正容器化的Linux操作系统极致精简,所有服务(包括系统服务)均运行在容器中,可以以容器方式对其进行任意定制
  • 内置了Docker Engine,无需在安装系统后再进行Docker安装
  • 完全开源 https://github.com/rancher/os ,我们可以进行各种深度定制
  • 最最重要的,支持ARM

在RancherOS的整体架构中,最底层毋庸置疑是Linux kernel,系统启动后的PID 1用system-docker代替,由它来把udev、dhcp、console等系统服务启动,同时会启动user-docker,用户运行的应用程序均跑在user-docker下。
rpi-docker-1.png

我们以树莓派为例,将RancherOS部署在其之上。这里需要提示的是,RancherOS每个版本release之时,都会放出树莓派的支持版本,比如本次分享使用的v0.7.0版本 https://github.com/rancher/os/ ... i.zip  。通过dd命令将RancherOS写到树莓派的SD卡上,通电点亮树莓派。
rpi-docker-2.png

查看PID 1是system-docker:
rpi-docker-3.png

通过system-docker ps 查看启动的系统服务:
rpi-docker-4.png

正常来说,我们都得设置一下docker registry mirror,这样方便pull镜像。RancherOS的配置,都是通过ros config命令来配置,比如设置user-docker的mirror:
$ sudo ros config set rancher.docker.extra_args [--registry-mirror,https://xxxxxxx]
$ sudo system-docker restart docker # 重启user-docker

最终,可以看到:
rpi-docker-5.png

RancherOS有一个我认为比较好的特性,就是支持很方便的对Docker Engine版本进行切换。目前Docker迭代的速度并不慢,实际上很多程序不一定会兼容比较新的Engine,Docker Engine版本的管理变得越来越重要。尤其是在测试环境中,我们有时确实需要变换Docker Engine版本,来构建测试场景:
$ sudo ros engine list  #查看当前版本支持的engine有哪些
disabled docker-1.10.3
disabled docker-1.11.2
current  docker-1.12.1
$ sudo ros engine switch docker-1.11.2 #切换docker-1.11版本

此外,如果对Docker Engine有更特殊的需求,还可以定制自己的版本,然后让system-docker来加载它。

只需将编译好的Docker Engine放到Scratch镜像中即可:
rpi-docker-6.png

这部分可以参考: https://github.com/rancher/os-engines

另外,如果习惯了使用相应Linux发行版的命令行,那么也可以加载对应的Console镜像(当然如果考虑精简系统也可不必加载):
rpi-docker-7.png

此部分需要进行深度定制,可以参考: https://github.com/rancher/os-images
rpi-docker-8.png

RancherOS更多酷炫的功能,可以访问官方的文档: http://docs.rancher.com/os

RancherOS介绍完毕后,我们可以在单机树莓派上做容器管理了,喜欢命令行的当然最好,喜欢UI管理的,推荐两款可以在树莓派上运行的管理程序。

portainer  https://github.com/portainer/portainer  ,其有专门的arm镜像 portainer/portainer:arm ,运行后:
$ docker run --restart=always -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer:arm

rpi-docker-9.png

更加简约的 ui-for-docker  https://github.com/kevana/ui-for-docker  ,运行如下:
$ docker run --restart=always -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock hypriot/rpi-dockerui

rpi-docker-10.png

单机树莓派之后,我们就要考虑如何将多个树莓派组成Docker集群。一提到Docker集群,我们就会考虑需要编排引擎的支持,无非就是主流的Mesos、Kubernetes、Swarm,还有非主流的Cattle、Nomad之流。那么在IOT场景下,我们最需要考虑的就是精简,所以我选择了新版的Swarm。将RancherOS的Engine切换到1.12.3,然后构建Swarm集群。

简单得执行swarm init和join后,我们就得到了一个树莓派Docker集群:
rpi-docker-11.png

然后我们可以快速执行一个小demo:
swarmkit demo
$ docker service create --replicas 1 -p 80 --name app armhf/httpd
$ docker service scale app=2
$ docker service ps app

rpi-docker-12.png

更多ARM相关的Docker镜像,可以到这两个地方查找:

RancherOS设计之初是为了构建一个运行Rancher的轻量级操作系统,那么Rancher本身在ARM的支持上也在不断推进中,相应的PR也有提交: https://github.com/rancher/rancher/pull/4704  。不过目前来看,对rancher-server的ARM化还是比较麻烦,对agent的节点支持ARM相对简单一些,也就是说rancher-server仍然运行在x86架构上,而Agent节点可以支持ARM和x86。

Kubernetes的ARM支持在社区中也有很多人在做,比如: https://github.com/luxas/kubernetes-on-arm  ,来自社区的分享:
rpi-docker-13.png

秀一下,我的“家庭树莓派数据中心”:
rpi-docker-14.png

最后,我要特别感谢RancherOS的开发者们,他们帮助我解决了很多问题;另外还要特别感谢MBH树莓派社区的伙伴,提供了硬件设备,支持我的技术探索,并提供了很多帮助。

Q&A

Q:先问一个问题,您家里的树莓集群用来做什么?有哪些场景会用到树莓Docker?
A:这个需求点来自 MBH树莓派社区的朋友,他们提出希望能够简化多个树莓派上部署程序,同时我对未来Docker在arm服务器上的运行抱有很大期望,我只是对这块进行了一些探索。目前还没有找到真实的需求点,还需要更深入的落地。
Q:您对CoreOS和RancherOS的区别或优劣势上,您是怎么看的?多谢!
A:实际上使用了CoreOS和RancherOS后,会发现这两个在思路和理念上确实很像。RancherOS比CoreOS的容器化做的更加深入,CoreOS的稳定性会更好。RancherOS设计面向Rancher,CoreOS更多会考虑Kubernetes。CoreOS应该会持续深耕服务器端,而RancherOS也许会在IOT端发力一下。
Q:树莓派的内存不大,单个主机上容器数会有很大限制吧?
A:树莓派上跑是为了只是为了单纯简化程序部署,当然不会追求计算密度。计算密度那是服务器关注的事,另外,树莓派的内存不大只是暂时的。
Q:请问在arm架构里partition是怎么做的?
A:dd写完镜像后,默认又一个根分区,可以再建一个分区,把docker的目录挂上去,这样能充分利用整个sd卡。
Q:RancherOS上使用Docker,应用能在容器中通过GPU执行浮点运算吗?需要装驱动吗?在哪装?
A: RancherOS是一个完全可以定制的操作系统。只要有对应的module,都可以初始化到RancherOS中。

以上内容根据2016年11月15日晚微信群分享内容整理。分享人张智博(niusmallnan),初出茅庐在阿里巴巴口碑网,参与本地搜索业务研发工作,后与朋友联合创办美食点评社区“美食行”,之后在各种公司从事云计算研发工作。Rancher中国社区布道师,MBH树莓派社区成员,OpenStack中国社区长期作者。热爱coding,热爱技术分享,技术宅&科幻粉,树莓派热血青年。 DockOne每周都会组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesz,进群参与,您有想听的话题或者想分享的话题都可以给我们留言。

原文发布时间为:2016-11-16

本文作者:张智博

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:DockOne微信分享( 九十五):树莓派上的Docker集群管理

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
2月前
|
负载均衡 调度 Docker
|
2月前
|
canal Kubernetes Docker
基于Kubernetes v1.25.0和Docker部署高可用集群(03部分)
基于Kubernetes v1.25.0和Docker部署高可用集群(03部分)
|
2月前
|
Kubernetes Ubuntu Linux
基于Kubernetes v1.25.0和Docker部署高可用集群(02部分)
基于Kubernetes v1.25.0和Docker部署高可用集群(02部分)
|
2月前
|
存储 Kubernetes Java
基于Kubernetes v1.25.0和Docker部署高可用集群(说明篇)
docker与kubernetes的区别是:docker是管理当前主机上的容器,k8s是管理多台主机、跨平台的分布式管理系统。Kubernetes的设计初衷是支持可插拔架构,从而利于扩展kubernetes的功能
|
3月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用问题之原PolarDB-X集群无法连接且Docker容器已经被删除,如何恢复数据
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
2月前
|
NoSQL Linux Redis
使用docker-compose搭建redis-cluster集群
使用docker-compose搭建redis-cluster集群
263 0
|
2月前
|
Kubernetes Linux 网络安全
基于Kubernetes v1.25.0和Docker部署高可用集群(01部分)
基于Kubernetes v1.25.0和Docker部署高可用集群(01部分)
|
2月前
|
分布式计算 大数据 Hadoop
最快方式搭建docker大数据 测试集群
【8月更文挑战第5天】快速搭建Docker大数据测试集群可采用预构建镜像与Compose文件、利用云服务如AWS的ECS、自动化工具如Ansible或参考在线教程。只需简单配置如内存分配及路径,运行`docker-compose up`即可启动含NameNode、DataNode等组件的Hadoop集群。根据需求与资源选择合适方法。
|
3月前
|
Nacos 数据中心 Docker
Docker 部署 Nacos 集群
Docker 部署 Nacos 集群