Kubernetes 作为当前云计算基础设施的 De Facto 标杆,已经炙手可热。因为其是谷歌家开放的源码库,一直成为全球技术社区的模仿参照物。在它的技术光芒之下,大量的技术人员跳入此坑无法自拔。但是因为工程复杂度如此之高,组件非常复杂,分布式系统的概念如此之新,大家还是经常会在安装部署,做试验的过程中碰一鼻子灰。这不,Rancher 的架构师看着不爽,一人之力撸了一个 all-in-one binary 的 k8s 单体程序,这个东西好阿。把容器集群需要的所以组件都打包成一个二进制文件了,爽。并且这个东西小到只有 40MB,在 512M 内存的树莓派就能跑。爽。本文就是帮助中国的技术爱好者,把手上的树莓派积累的灰扫一扫,跟着我一起玩转 k3s 集群。
在本场 Chat 中,会讲到如下内容:
毕竟树莓派是资深技术玩家的工具,相信并不是所有读者都摸过这个工具。所以我需要和读者在简单回顾一下树莓派在容器圈的玩法。
首先,树莓派是一个嵌入式 arm cpu 的开发版本,一般会配置一个 SD 卡作为驱动。我们开发者一般最常用的技能就是如何刷这个 SD 卡,然后登录系统各种操作。这里,我们需要知道原生的树莓派 OS 是 debian 裁剪的,可不管什么 overlay 驱动啥的,所以你在原生的系统上安装 Docker 那是很费劲的。这不,业界黑客看着不爽,就自己裁剪了一份内置 Docker 的 OS: hypriotOS,海盗系统。下载地址在 github 上,自己搜索即可。
其次,树莓派的硬件装备很全,我们需要自己攒一份自己的套件。比如电源,最好是 6 口 USB 驱动的。SD 卡,必须是高速的,32G 以上。树莓派现在是 Pi4 版本,1G 内存了,内置无线网卡。很爽,就不用在赘述。那么读者会问了,这些东西从那里买呢?淘宝。我的装备如下图,参考:
好了,现在硬件基础条件有了,我们就要熟练掌握刷盘技术。工具是 flash。一个命令行工具。https://github.com/hypriot/flash 。最新版本支持 could-init 配置文件。参考 sample 目录的代码即可,有详细的说明。命令参数是
flash -u wifi-user-data.yml ~/Downloads/hypriotos-rpi-v1.11.4.img.zip
注意:为什么需要 wifi-user-data.yml,主要我有 2 个诉求,一个是改 hostname,一个是配置 wifi 密码。
上电之后,1 分钟之内就可以用终端连上。hypriot 默认配置的密码,每次输入挺麻烦,可以考虑 ssh-copy-id 把自己的公钥放到 Pi 板中也可以。安装 k3s 正式开始,没啥特别技巧:
curl -sfL https://get.k3s.io | sh - # Check for Ready node, takes maybe 30 seconds k3s kubectl get node
虽然简单,因为 k3s 毕竟是开源软件,对于适配的测试用例并不能保证你每次成功。
$ curl -sfL https://get.k3s.io | sh -[INFO] Finding latest release[INFO] Using v0.10.2 as release[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v0.10.2/sha256sum-arm.txt[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v0.10.2/k3s-armhf[INFO] Verifying binary download[INFO] Installing k3s to /usr/local/bin/k3s[INFO] Creating /usr/local/bin/kubectl symlink to k3s[INFO] Creating /usr/local/bin/crictl symlink to k3s[INFO] Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr[INFO] Creating killall script /usr/local/bin/k3s-killall.sh[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env[INFO] systemd: Creating service file /etc/systemd/system/k3s.service[INFO] systemd: Enabling k3s unitCreated symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.[INFO] systemd: Starting k3sJob for k3s.service failed because the control process exited with error code.See "systemctl status k3s.service" and "journalctl -xe" for details.
比如这里就是一个失败的安装日志。这个时候,看一下启动日志:journalctl -xe > k3s.log
因为 Hypriotos 没有安装 rngtools,需要手工安装一下。
apt updateapt install rng-tools
然后 vi /etc/default/rng-tools ,开启硬件随机:HRNGDEVICE=/dev/hwrng
然后重启 rng-tools 服务:
systemctl restart rng-tools
配置完毕后,k8s 服务启动就可以问题了。另外,我们还需要改掉默认 parse 镜像的地址,方便网络拉取:
vi /etc/systemd/system/k3s.serviceExecStart=/usr/local/bin/k3s server --pause-image=gcr.azk8s.cn/google_containers/pause-arm:3.1systemctl restart k3s
再次重启 k3s 服务
systemctl restart k3s
基本上就 OK 了。如果还出现问题,可以尝试安装最新版本的 k3s 文件,看是否能启动成功,开源软件没有人力物力做细粒度的测试,请包含。下载的文件名是:
sudo mkdir -p /var/lib/rancher/k3s/agent/images/sudo cp ./k3s-airgap-images-arm64.tar /var/lib/rancher/k3s/agent/images/
这样 master 节点就部署完毕。
HypriotOS/armv7: root@k3s-master in ~# sudo kubectl config get-clusters NAMEdefaultHypriotOS/armv7: root@k3s-master in ~# sudo kubectl cluster-info Kubernetes master is running at https://127.0.0.1:6443CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyMetrics-server is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
计算节点的安装,可以参考如下脚本:
k3s_url="https://k3s-master.local:6443"k3s_token="K1042e2f8e353b9409472c1e0cca8457abe184dc7be3f0805109e92c50c193ceb42::node:c83acbf89a7de7026d6f6928dc270028"curl -sfL https://get.k3s.io | K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh -
注意:k3s_token 可以在 master 节点上复制一下,路径在这里:
cat /var/lib/rancher/k3s/server/node-token
等计算节点安装完成之后,就可以部署服务了。如果想远程管理这套树莓派集群,需要把管理配置文件下载到本地。管理配置文件放在 master 节点上:
cat /etc/rancher/k3s/k3s.yaml
复制到本地开发机器,包含有 k8s 管理工具 kubectl 即可。
$ KUBECONFIG=./k3s.yaml kubectl get nodeNAME STATUS ROLES AGE VERSIONk3s-master Ready master 90m v1.16.2-k3s.1
经过以上的实战演练,相信你对 k3s 部署到树莓派有了更深入的了解。这个单体的 k3s 执行文件,在不同版本的树莓派中,都会有很多问题出现,但是大量网友的测试,基本上让它可以很顺利的完全安装。做一些试验或者安装一套轻量级的开发测试环境,还是很得力的工具。请大家多方体验。
本文首发于 GitChat,未经授权不得转载,转载需与 GitChat 联系。
阅读全文: http://gitbook.cn/gitchat/activity/5dc8cde3cce67d602c5aacae
您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。