拥有一个私人的云计算平台是一件很酷的事情。随着技术的发展,实现这一愿望已经变得相当容易。接下来就来说明如何利用树莓派硬件和相关软件搭建一个用于边缘计算的小型云计算集群。
1 硬件准备
硬件优先考虑树莓派。选择 ARM 而不是 x86 架构硬件,主要是考虑到该云计算平台主要用于私人,家庭以及边缘计算等应用场景。一方面,ARM 硬件相对便宜,功耗低,性价比更高;另一方面树莓派拥有成熟的社区生态,可用的软件也比较丰富。
选择 1. 树莓派 3B 及其之前的版本
树莓派 3B 及其之前的版本由于不支持以太网口供电(PoE), 因此需要额外的 USB 供电插头。所有树莓派板子都连接到一个交换机 / 路由器,如下图所示
图 1: 基于树莓派 3B 搭建的集群
选择 2. 树莓派 3B+,树莓派 4B
树莓派 3B+/4B 拥有以太网口供电 (PoE) 功能, 因此可省去 USB 供电插头。所有树莓派板子都连接到一个支持 PoE 功能的交换机 / 路由器,如下图所示
图 2: 基于树莓派 3B+/4B 搭建的集群
选择 3. Turing Pi 主板 + 树莓派计算模块
关于树莓派计算模块
上面介绍的树莓派 3B, 3B+, 4B 等板子其实可以拆解成如下两部分,即: 计算模块和计算模块 IO 扩展板.
图 3: 树莓派计算模块
图 4: 树莓派计算模块 IO 扩展板
将计算模块和计算模块 IO 扩展板结合起来功能就和上述的树莓派 3B, 3B+, 4B 一致。
图 5: 树莓派计算模块 + IO 扩展板
关于 Turing Pi 主板
利用 Turing Pi 主板加可扩展树莓派计算模块的方式搭建集群十分的方便。该板最大支持 7 块树莓派计算模块,并可进行动态扩展,类似于数据中心的 刀片服务器 (blade server)。
图 6: 树莓派计算模块 + Turing Pi 主板
Turing Pi 同时支持带 eMMC 的计算模块和不带 eMMC 的计算模块,其第一个槽可用于烧写操作系统镜像到计算模块 eMMC。对于不带 eMMC 的计算模块可以通过传统的插 SD 卡的方式启动。
2 烧写树莓派系统
2.1 系统选择
推荐如下两个系统
- Raspbian: 官方系统
- HypriotOS: 容器操作系统
2.2 烧写系统
选择 1. 烧写系统到 SD 卡
具体步骤参考如下页面
https://www.raspberrypi.org/d…
选择 2. 烧写系统到树莓派计算模块的 eMMC
具体步骤参考如下页面 (需要借助树莓派计算模块 IO 扩展板或者 Turing Pi 主板)
http://raspberrypiwiki.com/How_to_Burning_System_for_the_eMMC_of_Raspberry_Pi_Compute_Module
所有单板都烧写好后按照硬件准备中的描述连接好,并将每个板子配置好 ssh 连接,将公钥放置在 ~/.ssh/authorized_keys 里面,以方便连接。确保可以通过 ***ssh@*** 能连上集群中每一个树莓派节点。
3 安装 Kubernetes 并连接集群
3.1 安装 Kubernetes
Lightweight Kubernetes (K3S)是一个面向 IoT 及边缘计算的 Kubernetes 版本,比较适合树莓派等资源有限的硬件。
方式 1:在每个树莓派板子上单独安装
在 server 节点上运行
curl -sfL https://get.k3s.io | sh -
在每个 worker 节点上运行
curl -sfL https://get.k3s.io | K3S_URL=https://<server_ip>:6443 K3S_TOKEN=<token> sh -
PS:K3S_TOKEN: 存在 server 节点的 **/var/lib/rancher/k3s/server/node-token**.
方式 2:使用 Ansible 自动化安装
先在控制机上安装 Ansible
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
下载 k3s-ansible
git clone https://github.com/rancher/k3s-ansible.git
然后按照 https://github.com/rancher/k3… 的步骤,在 inventory/my-cluster/hosts.ini 里配置好 server (master) 节点和 worker(node)节点的 IP 地址。
运行如下命令,Ansible 会将 K3S 自动安装在集群的 server 节点和每个 worker 节点上
ansible-playbook site.yml -i inventory/my-cluster/hosts.ini --ask-become-pass
3.2 连接集群
在控制机上安装 kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
将配置文件从 server 节点拷贝至控制机并配置环境变量
scp <user_name>@<server_ip>:~/.kube/config ~/.kube/rasp-config
export KUBECONFIG=~/.kube/rasp-config
连接查看集群
kubectl get nodes
大功告成,接下来就可以部署服务到集群了。