raspberry pi_使用Kubernetes在Raspberry Pi上进行集群计算

raspberry pi

是否曾经想打造自己的云? 现在你可以! 它所需要的只是一些廉价的开源硬件和开源软件。 只需花费约200美元,我就可以使用Fabric8Kubernetes云操作系统上安装四台Raspberry Pi 2

Fabric8是一个开源DevOps和集成平台,可在任何Kubernetes或OpenShift环境中直接使用,并提供连续的交付,管理,ChatOps和Chaos Monkey。 简而言之,这是开发和管理微服务的最佳框架。 (全部披露:我从事Red Hat Fabric8项目。)

在软件体系结构和运行它的硬件之间再没有比以前更好的匹配了。 Pi完全静音(无风扇),并具有功能强大的四核CPU,而微服务架构使每个进程相对较小,因此可以在每个节点的1GB RAM内存约束下运行。 如果您需要更多的计算能力,则只需添加更多的Pi。 最后,与硬件一起玩而不是登录到Amazon的远程虚拟机上只是很有趣

1.所需的硬件

要构建此四像素设置,我使用了:

  • 4个Raspberry Pi 2s
  • 4张16GB MicroSD卡(10类)
  • 1个带USB插座的60W电源
  • 4条短USB至Micro USB电缆(用于为Pis供电)
  • 4条5类短网络电缆
  • 1根更长的Cat 5网络电缆可连接到网络
  • 1个网络集线器(我的是一个旧的五端口,我已经清理掉了10 / 100MBps)
  • 乐高(相信我,建立自己的感觉真好!)

获取Class 10 MicroSD卡非常重要,因为这是一个会极大影响系统速度的组件。 您可以轻松地为4个Pis配备一个较小的20W电源,但是我打算以后再增加一个,以便获得更大的电源。 Pi上的网络端口为100MBps,因此您可以使用旧的集线器。

2.刷新MicroSD卡

现在我们需要将操作系统安装到MicroSD卡上。 我正在使用Hypriot图片 。 我测试了许多其他软件 ,包括Pidora,Redsleeve / CentOS和Arch Linux,但得出结论说,Hypriot在这一点上对我来说是最好的(主要是因为对本机Docker的支持以及映像很小)。 您可以在此处下载最新的Hypriot映像。

  1. 将存储卡插入读卡器中。 不要安装它。 如果自动安装,请卸载卡。 然后将图像写入卡。 在我的OS X机器上,执行此命令的命令是:
    sudo dd bs=1m if=hypriot-rpi-20151103-224349.img of=/dev/diskn
  2. 将“ n”替换为使用磁盘实用程序找到的磁盘数量:在Mac OS X 10.8.x Mountain Lion上,“验证磁盘”(在卸载之前)将BSD名称显示为“ / dev / disk2s1”或类似名称。 请仔细检查,否则您可能正在格式化不想格式化的磁盘!

  3. 等待。 这可能需要10分钟左右。
  4. 对所有四个MicroSD卡执行此操作。 您可以在等待时在LEGO机壳上工作。

3.启动并添加DNS

您现在可以打开第一个Pi的电源。 默认情况下,使用root / hypriot登录。您将需要为每个Pi设置DNS。 如果您不想连接显示器和键盘来确定其IP和MAC地址,则可以使用nmap 。 如果您有DNS服务,请在此处进行配置。 否则,在/ etc / hosts中命名Pis。 我给我的Pis命名为rpi-master,rpi-node-1,rpi-node-2和rpi-node-3。 快速重启每个Pi之后,您将在cmd提示符下看到名称。 请注意, 如果您跳过DNS步骤,您的Kubernetes集群将无法正常工作 。 我在所有机器上的/ etc / hosts文件中添加了以下内容:

192.168.1.9     rpi-master
192.168.1.21    rpi-node-1
192.168.1.18    rpi-node-2
192.168.1.23    rpi-node-3

4.添加交换(可选)

我为rpi-master添加了1GB的交换空间,因为它运行了更多的Kubernetes组件。 某些人似乎担心,频繁写入MicroSD卡会使其快速失效。 因此,我决定设置swappiness使得其仅使用交换作为最后的手段。

dd if=/dev/zero of=/swap/swapfile bs=1M count=1024
mkswap /swap/swapfile
swapon /swap/swapfile

现在,您可以顶部检查是否有1GB的交换空间。

KiB Mem: 总计947468, 913096使用了, 34372免费, 69884缓冲区
KiB Swap: 总计1048572, 使用了484个, 1048088免费, 667248已缓存

要使重启之间的交换永久生效,请添加

/swap/swapfile none swap sw 0 0

到您的/ etc / fstab文件。 最后,在/etc/sysctl.conf中,将swappiness设置为1:

vm.swappiness = 1

“ 1”表示仅在RAM使用率超过99%时才使用交换。

5.安装Kubernetes

这些说明用于安装来自Google的普通香草Kubernetes。 由于某些64位依赖性,我在编译OpenShift 3时遇到了一些问题,稍后我将再讨论。 我想都支持。 我正在使用的所有代码都在https://github.com/Project31下签入。 如果您想编译自己的Kubernetes二进制文件,请查看我的博客文章

5.1。 安装Kubernetes Master

Kubernetes主服务器运行Kubernetes REST API,调度程序,kubernetes-proxy和复制控制器。 它还将etcd用作在其他Kubernetes主服务器之间复制的键值存储。 有关更多详细信息,请参阅Kubernetes文档


Kubernetes主组件图
Kubernetes主组件。

要将这些组件安装到主节点上,请登录到主节点并运行:

git clone git@github.com:Project31/kubernetes-installer-rpi.git
cd kubernetes-install-rpi
./build-master.sh

使用docker ps验证正在运行的Docker容器:

CONTAINER ID 图片 命令 已建立 状态 名字
d598e486daf5 超库 “ / hyperkube代理--m” ... ... k8s_kube-proxy ...
026c19a67f86 超库 “ / hyperkube调度程序” ... ... k8s_kube-scheduler ...
8f615b87cfda 超库 “ /超kubecontrolle” ... ... k8s_kube-controller-manager ....
a737d9927c03 超库 “ / hyperkube apiserver” ... ... k8s_kube-apiserver ....
0207a21ce18d “ etcd --data-dir = / var” ... ... k8s_etcd ...
a4174bf7cb98 ... /暂停:0.8.0 “/暂停” ... ... k8s_POD ...

现在设置的导出KUBERNETES_MASTER = http:/ / rpi-master:8080,因此您的kubectl可以在主服务器上连接Kubernetes REST API。 现在,使用kubectl get pod来查看正在运行的pod

NAME 准备 状态 重新启动 年龄
kube-controller-rpi-master 5/5 跑步 0 10秒

我们可以看到kube-controller-rpi-master容器包含运行五个带有上述Kubernetes服务的Docker容器。

5.2。 安装Kubernetes节点

Kubernetes节点仅运行Kubernetes代理和容器。


Kubernetes客户端组件图
Kubernetes客户端组件。

要将这些组件安装在节点上,请登录到该节点并运行:

git clone git@github.com:Project31/kubernetes-installer-rpi.git
cd kubernetes-install-rpi

现在编辑kube-procy.yaml并设置--master = http:/ / rpi-master:8080到您的Kubernetes主机。 然后编辑kubelet.service文件,并在那里设置主服务器的Kubernetes REST端点(在我的情况下为http:/ /192.168.1.9:8080)。

现在,您可以运行安装:

./build-worker.sh

并使用docker ps验证我们的代理:

CONTAINER ID 图片 命令 已建立 状态 名字
cf4a9a2d7f35 超库 “ / hyperkube代理--m” 40秒前 最多37秒 k8s_kube-proxy ...
d9f8f937df4d gcr.io/go ... “/暂停” 43秒前 最多40秒 k8s_POD.e4cc ..

代理正在运行! 设置导出KUBERNETES_MASTER = http:/ / rpi-master:8080,因此您的kubectl可以在主服务器上连接Kubernetes REST API。 现在,验证所有节点均已注册:

kubectl get nodes
NAME 标签 状态
rpi-master kubernetes.io/hostname=rpi-master 准备
rpi-node-1 kubernetes.io/hostname=rpi-node-1 准备
rpi-node-2 kubernetes.io/hostname=rpi-node-2 准备
rpi-node-3 kubernetes.io/hostname=rpi-node-3 准备

是的,它有效!

6.打开Docker进行远程连接

我们需要在主服务器上修复Docker配置,以便它可以接受远程连接,并且可以向其中部署某些内容。 打开/ etc / default / docker文件进行编辑,然后设置DOCKER_OPTS

DOCKER_OPTS="-H tcp://192.168.1.9:2375 -H unix:///var/run/docker.sock --storage-driver=overlay -D"

指定机器的IP地址,或者您可以使用用户“ 0.0.0.0”绑定到所有接口。 现在,我们可以将Docker映像远程推送到主映像。

7.部署简单的服务

让我们部署一个简单的服务并将其扩展到两个Pod,以确保一切正常:

kubectl -s http://localhost:8080 run httpd --image=hypriot/rpi-busybox-httpd --port=80
kubectl scale --replicas=2 rc httpd
kubectl get pods -o wide

我们看到,即使我们在主服务器上执行了该命令,它仍然在node-2和node-3上启动了一个pod:

NAME 准备 状态 重新启动 年龄 节点
httpd-4v1qw 1/1 跑步 0 9m rpi-node-2
httpd-qxcxu 0/1 待定 0 16岁 rpi-node-3
kube-controller-rpi-master 5/5 跑步 0 1天 大师
kube-system-rpi-node-1 1/1 跑步 0 33m rpi-node-1
kube-system-rpi-node-2 1/1 跑步 0 43m rpi-node-2
kube-system-rpi-node-3 1/1 跑步 0 53m rpi-node-3

8.结论

首先,它有效! Kubernetes主服务器可能没有足够的内存来运行服务,但另一方面,节点几乎有整个1GB的空间可用于Docker容器。 如果您需要更多的计算能力,则只需添加节点即可。 该硬件平台的极低价格,再加上Kubernetes云OS以及Fabric8 DevOps和iPaaS功能,使该技术真正具有破坏性。 它真的是只需要200美元就可以买到的盒子里的云。

翻译自: https://opensource.com/life/16/2/build-a-kubernetes-cloud-with-raspberry-pi

raspberry pi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值