过去一年间,企业对于在边缘设备上管理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文件,里面不包含任何内容:
touch /Volumes/boot/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+ #1244 SMP Thu Jul 4 18:48:07 BST 2019 armv7l
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/*/copyright.
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:~ $
此时,应该重置默认密码
$ passwdChanging 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 unitCreated symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.[INFO] systemd: Starting k3s
Boom!大约1分钟之后,Kubernetes就已经在我的树莓派上运行:
$ kubectl get nodesNAME STATUS ROLES AGE VERSIONraspberrypi Ready master 27s v1.14.5-k3s.1
默认情况下,在k3s中,Traefik开箱即用,为了确认这一点,我们来看看我们的部署:
$ kubectl get deployments --all-namespacesNAMESPACE NAME READY UP-TO-DATE AVAILABLE AGEkube-system coredns 1/1 1 1 3m29skube-system traefik 1/1 1 1 89s
在我们所有的命名空间中查看pod:
$ kubectl get pods --all-namespacesNAMESPACE NAME READY STATUS RESTARTS AGEkube-system coredns-b7464766c-8mgzr 1/1 Running 0 3m12skube-system helm-install-traefik-tqh92 0/1 Completed 0 3m12skube-system svclb-traefik-t6jvz 2/2 Running 0 93skube-system traefik-56688c4464-zvfxc 1/1 Running 0 92s
然后看一下我们的服务:
$ kubectl get service --all-namespacesNAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEdefault kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 4m4skube-system kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 4m5skube-system traefik LoadBalancer 10.43.133.86 192.168.0.100 80:32543/TCP,443:30200/TCP 2m5s
现在我们已经在树莓派上完成k3s的安装啦!
一起来探索k3s更多玩法吧
仅仅在树莓派上成功运行k3s当然不够,我们在之前的文章里还介绍了如何在mac上运行k3s、如何将k3s与Rancher进行集成以及如何将k3s集成到Gitlab项目中,从这些文章里我们看到了k3s的种种可能。那么,除此之外,k3s是否还有其他玩法呢?本周六,到现场来和我们一起来探索吧!
10月26号(本周六)下午,坐标深圳南山区,首次线下k3s workshop将和大家见面啦!现场将会有Rancher Labs资深工程师,和你一起玩转k3s!以下是workshop议程:
一、 k3s概览
为什么做k3s
k3s架构
k3s应用场景
二、 现场demo k3s
在树莓派3b+上运行k3s
使用Rancher管理k3s集群
三、 一起workshop!
在x86机器上运行k3s