树莓派 RaspberryPi docker集群

概述:

参考 Hypriot 的博客,我买了1块Rasp2代板和2块Rasp3代板。

其中2代默认安装了 Hypriot 的系统。3代板如果您有兴趣可以自己参考 《Building a 64bit Docker OS for the Raspberry Pi 3》 这篇文章编译一套64bit的系统。也可以直接下载作者的 已编译好镜像地址 中压缩包。

网络的问题:

日常的升级或者包安装之类的情况,都会遇到墙的问题。为了避免经常为墙而烦恼的情况,有必要给控制网络出口的路由做些调整。参考 《Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动翻墙》 解决墙的烦恼,因为这个不是这篇文的重点,具体细节略。

给每个arm板子在路由上赋予一个静态IP地址。

系统:

  • OS细节: 个人习惯调整一下环境,如zsh,vim等,可以考虑弄个ansible-playbook或者shell脚本来简化一下。
1
2
3
4
5
6
7
# 调整默认文本工具为vim
$ update-alternatives --config editor
$ dpkg-reconfigure locales
# 新建自己的账号并加入到docker组
$ usermod a -G docker xxx
# 这步对集群很重要,修改设备的名字,否则后期加入集群会报错
$ sed -i "s/black-pearl/node01-pearl/" /boot/device-init.yaml /etc/hostname
  • Kubernetes(本来我想用这个来管理的,但是我的pi2的docker是最新ce版本,kubeadmin提示不支持。) 参考 《Setup Kubernetes on a Raspberry Pi Cluster easily the official way!》

    添加源:

    1
    2
    
    $ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    $ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
    

    安装kubeadm

    1
    
    $ apt-get update && apt-get install -y kubeadm
    

    初始化主节点

    1
    
    $ kubeadm init --pod-network-cidr 10.244.0.0/16
    

    略。。。

  • Swarm(选择了这个)

    初始化pi2

    1
    
    $ docker swarm init
    

    把得到的token信息给每个节点接入来

    1
    2
    3
    
    $ docker swarm join \
      --token SWMTKN-1-5pm7otmn3vt9bmjhdfdk2hhgxp1zm9wfcyebl7x4dlkbbqujke-4fmuuxxxxxxxxxhiyqem \
      192.168.xx.2:2377
    

    输出一下node信息:

    1
    2
    3
    4
    5
    
    $ docker node ls
    ID                           HOSTNAME      STATUS  AVAILABILITY  MANAGER STATUS
    mbosd1usr6vfoj2p9zyw6zhau    node01-pearl  Ready   Active
    sc4vtm5fqbdet8k4vrr38x1fo *  master-pearl  Ready   Active        Leader
    v8uxeq9pc8pzlciing7lol16e    node02-pearl  Ready   Active
    

Docker-Engine的安装:

利用 MickeyZZC / MiAnsibleRules 中的docker-engine ,参考以下playbook:

1
2
3
4
5
6
7
8
#!/usr/bin/env ansible-playbook
---
- hosts: all
  gather_facts: yes
  sudo: yes
  roles:
    - role: docker-engine
      tags: docker

Docker-Container: