过去一年间,企业对于在边缘设备上管理 Kubernetes 集群的需求明显增长。但是运行一个成熟的 Kubernetes 平台需要投入大量资源,并且对于边缘计算的场景而言过于复杂。因此,在今年年初 Rancher Labs 推出了一款轻量级Kubernetes发行版——k3s。它经过 CNCF 官方认证,可用于生产环境,发布 8 个月以来已在 Github 上 拥有超 9000 颗 Star。
k3s 大小只有 40MB,仅需 512MB RAM 即可运行,可以满足在边缘计算环境中运行在 x86、ARM64 和 ARMv7 处理器上的小型、易于管理的 Kubernetes 集群的需求。
K3s 之所以仅需 512MB 的运存,是因为它具有以下四个方面的变化:
删除旧的、非必须的代码: K3s不包括任何默认禁用的Alpha功能或者过时的功能,原有的API组件目前仍运行于标准部署当中。除此之外,Rancher还删除了所有非默认许可控制器,in- tree云提供商和存储驱动程序,但允许用户添加任何他们需要的驱动程序。
整合正在运行的打包进程: 为了节省RAM,Rancher将通常在Kubernetes管理服务器上运行的多流程合并为单个流程。Rancher还将在工作节点上运行的kubelet、kubeproxy和flannel代理进程组合成一个进程。
使用containerd代替Docker作为运行时的容器引擎: 通过用containderd替换Docker,Rancher能够显著减少运行时占用空间,删除libnetwork、swarm、Docker存储驱动程序和其他插件等功能。
除了 etcd 之外,引入 SQLite 作为可选的数据存储: Rancher在k3s中添加了SQLite作为可选的数据存储,从而为etcd提供了一个轻量级的替代方案。该方案不仅占用了较少的内存,而且大幅简化了操作。
在树莓派上安装 k3s
现在,我们开始试一下在树莓派上安装 k3s。在本例中使用的是树莓派 4(4GB 的版本),此外还需要准备一个可用于树莓派的 SD 卡。
1、 下载 Raspbian
下载链接:
https://www.raspberrypi.org/downloads/raspbian/
通过上面的链接下载你选择的 ISO,我下载的是 Raspbian Buster Lite:
下载完成之后,在你的下载目录里会有一个压缩文件。
2、 Flash 你的树莓派
我将使用 Etcher 来 flash 我的树莓派,但你可以根据自己的喜好来选择其他的工具。
如果你需要了解更多关于安装镜像的信息,请参阅官方文档:
https://www.raspberrypi.org/documentation/installation/installing-images/README.md
使用 Etcher 十分简单,你可以选择镜像以及你想要 flash 的 SD 卡,然后选择 Flash:
3、 配置 SSH 和 WiFi
完成 flash 之后,重新插入你的 flash 驱动,使用以下命令,你应该会看到使用 df-h 挂载了你的 SD 卡。
我用的是 mac,所以我的 SD 卡应该挂载在/Volumes/boot 这一目录下。为了可以 SSH,我们需要在根目录下创建一个 ssh 文件,里面不包含任何内容:
如果你使用的是 Linux 系统,它应该是:
touch /media/${USER}/boot/ssh
复制代码
为了配置你的树莓派以连接到你的无线网络中,我们需要在 SD 卡的根目录中提供 wpa_supplicant.conf
创建配置文件:
vim /Volumes/boot/wpa_supplicant.conf
复制代码
然后提供你的 SSID 和 PSK:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=ZA
network={
ssid="your-wifi-name"
psk="your-wifi-password"
key_mgmt=WPA-PSK
}
复制代码
弹出 SD 卡,并将其插入你的树莓派中并启动它。
4、 寻找你的 IP
你可以使用 nmap 来寻找 IP 地址,但是在本例中,我已经登录到路由器,所以看一看 DHCP 列表,我能够在那里找到我的树莓派 IP 地址。
默认状态下,用户名为 pi,密码是 raspberry:
$ ssh pi@192.168.0.111
Warning: Permanently added '192.168.0.111' (ECDSA) to the list of known hosts.
pi@192.168.0.111's password:
Linux raspberrypi 4.19.57-v7l+
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.
pi@raspberrypi:~ $
复制代码
此时,应该重置默认密码
$ passwd
Changing password for pi.
Current password:
New password:
Retype new password:
passwd: password updated successfully
复制代码
5、安装 k3s
Rancher Labs 发布的最轻量且经过 CNCF 认证的 Kubernetes 发行版——k3s,针对 ARM 进行了优化,并且超级易于安装。
仔细看一下官方文档,以获取更多的配置选项和细节:
https://github.com/rancher/k3s/blob/master/README.md
安装 k3s,超简单!
$ sudo su
$ curl -sfL https://get.k3s.io | sh -
[INFO] Finding latest release
[INFO] Using v0.8.0 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v0.8.0/sha256sum-arm.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v0.8.0/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] Creating /usr/local/bin/ctr symlink to k3s
[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 unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
复制代码
Boom!大约 1 分钟之后,Kubernetes 就已经在我的树莓派上运行:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
raspberrypi Ready master 27s v1.14.5-k3s.1
复制代码
默认情况下,在 k3s 中,Traefik 开箱即用,为了确认这一点,我们来看看我们的部署:
$ kubectl get deployments --all-namespaces
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system coredns 1/1 1 1 3m29s
kube-system traefik 1/1 1 1 89s
复制代码
在我们所有的命名空间中查看 pod:
$ kubectl get pods
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-b7464766c-8mgzr 1/1 Running 0 3m12s
kube-system helm-install-traefik-tqh92 0/1 Completed 0 3m12s
kube-system svclb-traefik-t6jvz 2/2 Running 0 93s
kube-system traefik-56688c4464-zvfxc 1/1 Running 0 92s
复制代码
然后看一下我们的服务:
$ kubectl get service --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 4m4s
kube-system kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 4m5s
kube-system traefik LoadBalancer 10.43.133.86 192.168.0.100 80:32543/TCP,443:30200/TCP 2m5s
复制代码
现在我们已经在树莓派上完成 k3s 的安装啦!
评论