当前位置: 首页 > 科技观察

使用K3s在树莓派上跑Kubernetes集群

时间:2023-03-15 19:07:27 科技观察

按照接下来的介绍,自己搭建一个三节点的Kubernetes集群。我一直对在RaspberryPi上构建Kubernetes集群很感兴趣。我只要按照网上的教程,就可以在三个树莓派组成的集群中架设一个Kubernetes集群并正常运行。但在这种情况下,master节点内存和CPU资源捉襟见肘,Kubernetes任务的性能往往很差,升级Kubernetes就更不可能了。这时候发现K3s项目让我非常兴奋。K3s被称为可以在资源受限环境中使用的轻量级Kubernetes,它还针对ARM处理器进行了优化,这使得Kubernetes集群可以在树莓派上更好地运行。下面,我们将使用K3s创建一个Kubernetes集群。准备按照本文介绍的方法创建一个Kubernetes集群,首先需要准备:至少一个树莓派(包括SD卡和电源)一个用网线将所有树莓派连接在一起的交换机或路由器我们将通过在线安装方式安装K3s,因此也需要能够联网。集群概述在这个集群中,我们将使用三个RaspberryPi。其中一台树莓派作为master节点,我们命名为kmaster,分配静态IP192.168。作为工作节点,分别命名为knode1和knode2,分别分配192.168.0.51和192.168.0.52两个IP地址。当然,如果你的实际网络布局与上述不同,只需将文章中提到的IP替换为你实际可用的IP即可。为了不通过IP来引用一个节点,我们在PC的/etc/hosts文件中记录每个节点的主机名:echo-e"192.168.0.50\tkmaster"|sudotee-a/etc/hostsecho-e"192.168.0.51\tknode1"|sudotee-a/etc/hostsecho-e"192.168.0.52\tknode2"|sudotee-a/etc/hosts部署主节点我们首先部署主节点。第一步当然是使用镜像安装最新的Raspbian。这一步可以参考我的另一篇文章,这里就不介绍了。安装完成后,启动SSH服务,设置hostname为kmaster,分配静态IP为192.168.0.50。在主节点上安装Raspbian后,启动树莓派并通过ssh连接它:sshpi@kmaster在主节点上执行以下命令安装K3s:curl-sfLhttps://get.k3s.io|sh-waitforthecommand运行后,单节点集群已经在运行。让我们检查一下,也在这个RaspberryPi上执行:sudokubectlgetnodes将看到这个输出:NAMESTATUSROLESAGEVERSIONkmasterReadymaster2m13sv1.14.3-k3s.1在获得连接令牌加入令牌后,我们需要部署工作节点。在worker节点上安装K3s时,需要一个connectiontoken,这个token放在master节点的文件系统上。先保存connectiontoken以备后用:sudocat/var/lib/rancher/k3s/server/node-token部署工作节点通过SD卡在每个树莓派上安装Raspbian作为工作节点。在这里,我们将其中一个RaspberryPi的主机名设置为knode1并为其分配IP地址192.168.0.51,将另一个RaspberryPi的主机名设置为knode2并为其分配IP地址192.168.0.52。接下来,您可以安装K3s。启动主机名为knode1的树莓派,通过ssh连接:sshpi@knode1在这台树莓派上,安装K3s的过程和之前差不多,只是需要增加一些额外的参数来表明它是一个工作节点。连接到现有集群:curl-sfLhttp://get.k3s.io|K3S_URL=https://192.168.0.50:6443\K3S_TOKEN=刚刚保存的connectiontokensh-K3S_TOKEN的值需要替换成实际保存的connectiontoken。完成后,在主机名为knode2的RaspberryPi上重复安装过程。通过PC访问集群现在我们要查看或者更改集群,必须ssh到集群的master节点才能使用kubectl,比较麻烦。所以我们将把kubectl放到PC上使用。首先在master节点上获取一些必要的配置信息,ssh到kmaster并执行:sudocat/etc/rancher/k3s/k3s.yaml复制上面命令的输出,然后在你的PC上创建一个目录来放置配置文件:mkdir~/.kube将复制的内容写入~/.kube/config文件,然后编辑文件,将server:https://localhost:6443改为server:https://kmaster:6443为了安全起见,只给自己保留这个配置文件的读写权限:chmod600~/.kube/config如果PC上没有安装kubectl,可以开始安装。Kubernetes官网上有各种平台安装kubectl的说明。我使用的是Ubuntu的衍生版LinuxMint,所以我的安装方法如下:sudoaptupdate&&sudoaptinstall-yapt-transport-httpscurl-shttps://packages.cloud.google.com/apt/doc/apt-密钥.gpg|sudoapt-keyadd-echo"debhttps://apt.kubernetes.io/kubernetes-xenialmain"|sudotee-a/etc/apt/sources.list.d/kubernetes.listsudoaptupdate&&sudoaptinstallkubectl以上命令的作用是添加一个包含Kubernetes的Debian软件库,获取GPG密钥保证安全,然后更新软件包列表并安装kubectl。如果kubectl有更新,我们将通过标准软件更新机制得到通知。现在您可以在PC上查看Kubernetes集群:kubectlgetnodes的输出可能如下所示:NAMESTATUSROLESAGEVERSIONkmasterReadymaster12mv1.14.3-k3s.1knode1Readyworker103sv1.14.3-k3s.1knode1Readyworker103sv1.14.3-k3s.1至此,我们搭建了一个三节点的Kubernetes集群。K3s彩蛋如果你执行kubectlgetpods--all-namespaces,你会看到一些其他服务的Pod,比如Traefik。Traefik在这里扮演了反向代理和负载均衡器的角色,它允许流量从单个入口进入集群,并引导到集群中的每个服务。Kubernetes支持这种机制,但是Kubernetes本身并没有提供这种功能,所以Traefik是一个不错的选择,K3s安装后立即可用的优势也得益于它。