保姆级实操教程,如何在树莓派上玩转k3s!

2020 年 5 月 18 日

保姆级实操教程,如何在树莓派上玩转k3s!

过去一年间,企业对于在边缘设备上管理 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.111Warning: 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 theindividual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted 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 的安装啦!


2020 年 5 月 18 日 18:05109

评论

发布
暂无评论
发现更多内容

AI 科学家带你快速 Get 人工智能最热技术

京东智联云开发者

人工智能

React Ref 如何使用(译)

西贝

Java 翻译 React Hooks Ref

LeetCode题解:90. 子集 II,迭代,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

【面经】面试官:做过性能优化的工作吗?你会从哪些方面入手做性能优化呢?

冰河

面试 性能优化 JVM 高并发 高性能

SpringBoot-技术专题-war包项目外置配置文件

李浩宇/Alex

搞定秒杀,只需要这几步!!

架构师修行之路

缓存 分布式 微服务 秒杀

跟Kafka学技术系列之时间轮

AI乔治

Java 编程 架构

淘宝内测新内容社区淘宝逛逛:邀请B站UP主入驻打造流量池

石头IT视角

数字货币交易所系统开发,交易平台搭建app

WX13823153201

音视频社交的应用和优势

anyRTC开发者

音视频 WebRTC 语音 直播 RTC

移动端堆栈关键行定位的新思路

应用研发平台EMAS

移动应用 应用崩溃 崩溃分析

LeetCode题解:90. 子集 II,迭代+位运算,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

Appium常用操作之「微信滑屏、触屏操作」

清菡

马云被约谈,阿里大数据的羹怎么分给每一个人?

CECBC区块链专委会

区块链 大数据

目标检测之YOLOv1

Dreamer

巨建华:区块链+金融的难点

CECBC区块链专委会

区块链 金融

让容器应用管理更快更安全,Dragonfly 发布 Nydus 容器镜像加速服务

阿里云基础软件团队

云原生

图解 | 不得错过的Binder浅析(一)

哈利迪

android

区块链是未来数字经济标志性的发明技术

CECBC区块链专委会

区块链 数字经济

甲方日常 43

句子

工作 随笔杂谈 日常

嵌入式的我们为什么要学ROS

良知犹存

ROS

百万年薪技术大佬的读书之旅

四猿外

Java 书籍推荐 书单 书单推荐 书籍

高频面试题:秒杀场景设计

艾小仙

Java 面试 高并发 秒杀

让你怀疑人生的重载和重写的区别

艾小仙

Java 编程语言

震惊!线上四台机器同一时间全部 OOM,到底发生了什么?

AI乔治

Java 架构

Java9 新特性 - 下篇

hepingfly

Java 新特性

Amdocs收购OPENET:关于5G应用落地的思考

VoltDB

大数据 数据分析 5G 物联网

低代码开发平台的敏捷之力

雯雯写代码

敏捷开发 低代码 信息化

《Among Us》火爆全球,实时语音助力派对游戏开启第二春

ZEGO即构

语音 游戏 RTC

聊点缓存——Part 1

姜雨生

redis 缓存

程序员面试题为什么出得天花乱坠,实际工作中这些根本用不到?

Java架构师迁哥

保姆级实操教程,如何在树莓派上玩转k3s!-InfoQ