树莓派 Raspberry Pi 3 Model B+ 上部署安装 Docker 和 Kubernetes

已关闭留言

今天在树莓派上部署了一下 Docker 和 Kubernetes,有一些坑,记录一下。本文基于树莓派 Raspberry Pi 3 Model B+ 的原生系统(原生系统是基于 Debian 的,使用起来也比较方便),通过本文可以成功的在树莓派上安装 Docker,安装 Kubernetes,并运行。

文章目录
隐藏
一、安装 Docker CE
二、安装 Kubernetes
三、参考文献

一、安装 Docker CE

树莓派上目前自带的通过 apt install 安装的 docker.io 的版本是 18.XX,版本太高,后续安装 Kubernetes 的时候会提示不支持该版本,所以我们需要通过添加源,然后指定 Docker 的版本进行安装。目前测试下来 17.09.1~ce-0~debian 这个版本在树莓派上可以安装,其他版本可能会提示版本不兼容。

1、安装必要组件

sudo apt-get update
sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     software-properties-common

2、添加 GPG key

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

3、添加源

echo "deb [arch=armhf] https://download.docker.com/linux/debian \
     $(lsb_release -cs) stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list

4、安装 Docker

sudo apt-get update
sudo apt-get install docker-ce=18.06.2~ce-0~debian

5、查看 Docker 版本信息

docker --version

至此,Docker CE 17.09.1 安装成功。

二、安装 Kubernetes

下面开始安装 Kubernetes,会遇到一些问题,会依次解决,不要慌。

1、添加源

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

2、安装 kubeadm

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

3、尝试运行 kubernetes

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

会提示如下问题:

CGROUPS_MEMORY: missing
[WARNING SystemVerification]: missing cgroups: memory
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[ERROR Swap]: running with swap on is not supported. Please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

依次解决问题。

首先是 [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist,这个解决很简单,输入下面语句回车即可:

modprobe br_netfilter

其次是 [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1,这个也比较简单,输入下列语句回车:

echo 1 > /proc/sys/net/ipv4/ip_forward

然后是 [ERROR Swap]: running with swap on is not supported. Please disable swap,这个只需要关闭 swap 即可:

swapoff -a

解决上面问题后,重新运行 kubeadm init,还是会提示问题,会提示:[ERROR SystemVerification]: missing cgroups: memory,这个也能解决,编辑 /boot/cmdline.txt 这个文件,加入下面两句:

cgroup_enable=memory  cgroup_memory=1

然后 reboot 重启一下即可。

注意:重启后第一、第二、第三个问题可能会再次出现,再次操作一下即可。最后,再次尝试 kubeadm init,就会出现久违的成功界面:

三、参考文献

  • Get Docker CE for Debian
  • enabling cgroup memory doesn’t take effect
  • Bash /proc/sys/net/ipv4/ip_forward: Permission denied
  • Fixed sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables
  • Setup Kubernetes on a Raspberry Pi Cluster easily the official way!