树莓派4B+ Centos7 部署k3s集群工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派4B+ Centos7 部署k3s集群工具相关的知识,希望对你有一定的参考价值。

参考技术A kubernetes用于大型集群管理,而k3s属于kubernetes的一个轻量级版本,常用于嵌入式设备使用。现把它安装到树莓派上使用。

这里用到树莓派的系统是:CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-4-2009-sda.raw,型号是4B+,8g内存。
树莓派初次启动需要扩容,并且做一些基本调整:

cgroup是linux用来对进程分配cpu、内存资源的工具,需要在启动系统时开启他,k3s会用到。
在/boot/cmdline.txt后加入这个,然后reboot

k3s是一个轻量级的k8s,适用于树莓派这种嵌入式设备。

这个脚本跑完的时候,会把k3s添加到systemd里面,可以通过systemctl status k3s来查看运作状态。启动成功就可以使用啦

官方参考: https://rancher.com/docs/k3s/latest/en/installation/ha-embedded/

等它重启个好几次之后,基本就成功了。

如果一直失败,可以输入命令刷一下iptable缓冲
iptables --flush
iptables -tnat --flush

等第二个结点加入后,在任意结点执行命令,都能查看到已有的2个Server(Master)结点了

当Server结点数大于等于3个且为奇数时,集群才可以实现高可用。
大于等于3是因为k3s使用了Raft算法来实现一致性,而Raft算法的容崩率为1/3,也就是只要集群中有2/3台机器正常运作,集群就能正常运作,所以3台机器是最低要求;要奇数个结点是因为Raft算法过程中有一个很重要的随机投票选Leader的流程,结点们通过定期投票选举出一个Leader角色,然后其他结点在它的任期内就向他同步数据,这个时候如果结点数是偶数,那么容易出现平票问题,选不出leader,并且,崩溃后集群进行数据恢复过程中,实现一致的方法是多数服从少数,如果是偶数Master结点,且刚好被分割成2个结点规模一样的集团,就没办法恢复数据了[裂开],所以需要奇数个结点以避免权力平分问题。
以上为个人理解。

有兴趣的同学可以一起探讨这类共识算法,与此类似的还有联盟链的PBFT类算法,比特币PoW算法等等。

因为集群并非开放式集群,加入集群需要获取一个token作为校验。这个token可以从Master服务器上获取。(手动加入的话,仅需要使用相同的K3S_TOKEN参数启动即可。)

这样,结点就正常连接上啦:

关闭k3s进程后,后台还留存一些服务占用着端口,需要用官方脚本关闭他们

可以flush一下iptables,等他自己重启就行了。

有可能发生了一些冲突,可以试下重装k3s-agent

目前系统已经伴随k3s安装的一些软件:
crictl :类似与docker的命令行工具,比如:

k3s :封装了kubeneters基本工具在里面的集成,如使用kubectl:

这里示范部署一个最简单的web应用

--net host 代表与本机享受同一个网络命名空间

这里可以在docker容器内开启ssh服务: https://blog.csdn.net/Leo_csdn_/article/details/96150534

做好docker镜像后,就可以部署到集群上了。

等一会儿就能在pods列表里面看到了:

但这时候,这个pod并没有对外开放,只能在集群内部相互访问,通过get services命令查看集群的服务,发现并没有我们的hello-node服务。

expose命令其实是创建了一个service,用于给这个pod提供访问入口。
(如果使用--type=LoadBalancer,则代表一个deployment上管理的所有POD进行均衡负载,但这里还没用上deployment,第四章节会使用到)
等一会儿,pod上就有一个结点IP的对外端口,供外部访问了。

运行结束后,刚启动过的pod和service就不见了,服务也停止了。

docker容器,其实就是一个运行的轻量级系统,里面可以跑我们的业务应用。
而POD则是代表容器的集合,一个POD可以运行多个容器,一台机器上可以运行多个POD。
POD未必是一个对外开放的服务,他可能只是内部计算的程序,默认只能集群内部通信,所以还有Service的概念,用于让POD对外开放端口,供外部访问。这里的service本质上是个集群内部的负载均衡器,用来给同一个Deployment分流;对应的还有Ingress,外部负载均衡器,用于给多个Deployment分流。
而Deployment顾名思义,就是一次部署的抽象实例,比如说,现在需要部署一个3台机器均衡负载的nodejs业务应用,那么这个部署任务则代表一个deployment实例。

很快,我们可以看到POD和deployment的部署情况,都已经正常运作。

进入容器后可以使用基本linux命令,也可见8080端口已经被我们的node应用占用了。

但是此时service还没有他们,也就是正处于无法提供外部服务的状态。

这里对一个deployment里面的3个pod启动了个默认均衡负载服务,暴露出来的一个端口是30057,访问可通。
也能够通过logs命令查看控制台输出的日志。

因为deployment实例中包含了pod的部署配置,所以删除deployment时,k3s就会直接把pod也删除掉。
但service并不在deployment部署的范围内,所以需要同步删除它,在删除命令中通过","与deployment分割开来即可。
至此已经把刚起来的服务全部关闭掉了。

这里我们看到3个Server(Master)结点由于需要维护集群高可用,对CPU持续20%左右的消耗,内存也需要一个G左右。而Agent(Wroker)结点只需要执行部署任务,所以对内存与CPU的需求都相对低一些,仅维持在10%左右的CPU和半个G左右的内存消耗。

参考: https://zhuanlan.zhihu.com/p/120171512
参考: http://kubernetes.kansea.com/docs/hellonode/

树莓派树莓派盒子性能监控管理

这篇文章很不错(http://maker.quwj.com/project/10),刚才实践了一下,很顺利完成,先看下面的效果图:

详细说明:

Pi Dashboard (Pi 仪表盘) 是一个开源的 IoT 设备监控工具,目前主要针对树莓派平台,也尽可能兼容其他类树莓派硬件产品。你只需要在树莓派上安装好 PHP 服务器环境,即可方便的部署一个 Pi 仪表盘,通过炫酷的 WebUI 来监控树莓派的状态!

目前已加入的监测项目有:

  • CPU 基本信息、状态和使用率等实时数据

  • 内存、缓存、SWAP分区使用的实时数据

  • SD卡(磁盘)的占用情况

  • 实时负载数据

  • 实施进程数据

  • 网络接口的实时数据

  • 树莓派IP、运行时间、操作系统、HOST 等基础信息

 

安装方法

安装共2步,首先安装 Nginx(或 Apache)和 PHP。然后在 Nginx 目录通过 SFTP 或 GitHub 部署好本项目的程序。

1.安装 Nginx 和 PHP

在 Pi 的终端运行以下命令。

sudo apt-get update
sudo apt-get install nginx php5-fpm php5-cli php5-curl php5-gd php5-mcrypt php5-cgi
sudo service nginx start
sudo service php5-fpm restart

如果安装成功,可通过 http://树莓派IP 访问到 Nginx 的默认页。Nginx 的根目录在 /var/www/html
进行以下操作来让 Nginx 能处理 PHP。
sudo nano /etc/nginx/sites-available/default

将其中的如下内容

location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

替换为

location / {
                index  index.html index.htm index.php default.html default.htm default.php;
        }

        location ~ .*\\.php(\\/.*)*$ {
                #fastcgi_split_path_info ^(.+\\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                set $real_script_name $fastcgi_script_name;
                if ($fastcgi_script_name ~ "(.+?\\.php)(/.*)") {
                        set $real_script_name $1;
                        set $path_info $2;
                }
                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                fastcgi_param SCRIPT_NAME $real_script_name;
                fastcgi_param PATH_INFO $path_info;
        }

Ctrl + O 保存再 Ctrl + X 退出。

sudo service nginx restart

最后重启 Nginx 即可,以上步骤在树莓派 Zero + Linux version 4.9.41+ 系统版本上测试通过。

对在树莓派上部署 LNMP 有兴趣可以参考这篇更详细的介绍《树莓派搭建LNMP环境》。

 

2.部署 Pi Dashboard

这里介绍两种方法将 Pi Dashboard 部署在 Nginx 上。
2.1. SFTP 上传
在 GitHub 下载本项目源码。通过 FileZilla 等 FTP 软件将解压出来的目录上传到树莓派的 /var/www/html目录下。
那么可以通过 http://树莓派IP/pi-dashboard 访问部署好了的 Pi Dashboard。

如果页面无法显示,可以尝试在树莓派终端给源码添加运行权限,例如你上传之后的路径是 /var/www/html/pi-dashboard,则运行。

cd /var/www/html
sudo chown -R www-data pi-dashboard

2.2. GitHub 部署
如果你了解过 GitHub 的基本操作,通过 GitHub 来下载本项目到 Pi 上会相当方便。

cd /var/www/html
sudo git clone https://github.com/spoonysonny/pi-dashboard.git

即可通过 http://树莓派IP/pi-dashboard 访问部署好了的 Pi Dashboard。

同样如果页面无法显示,可以尝试在树莓派终端给源码添加运行权限,例如你上传之后的路径是 /var/www/html/pi-dashboard,则运行。

cd /var/www/html
sudo chown -R www-data pi-dashboard

 

常见问题

Q:Pi Dashboard 的 WebUI 支持在哪些终端上查看?
A:任何带有浏览器的终端都可以查看,无论是在内网还是外网的电脑、Pad或是智能手机上。Pi Dashboard 对不同的设备做了响应式布局,能很好兼容手机浏览。

Q:我没法通过外网IP访问到怎么办?
A:国内很多地区的ISP都不提供独立的外网IP了,可以通过花生壳等工具实现外网访问。对于已有外网独立IP的用户,可以尝试把 Nginx 服务端口从 80 改成其他端口号,再在 IP 地址后添加端口号访问。这是因为国内ISP普遍禁用了80端口。

Q:我有一个域名,如何将域名绑定到树莓派上?
A:可以参考DNSPod动态IP解析更新程序树莓派搭建LNMP环境。将域名指向树莓派IP后需要修改 Nginx 网站配置的 servername 这项为你的域名即可。

Q:使用遇到问题可以提供技术支持吗?
A:可以加树莓派实验室Q群 549418432 和其他用户交流获得协助。

 

使用条款

本项目是开源项目,NXEZ.com 保留作为发起者的权利。
允许在 GPL v3.0 协议下对项目进行使用。请务必在保证项目的出处、声明、超链接等内容完整。

 

完善计划

欢迎有兴趣的朋友通过 GitHub 参与到本项目的完善。下面是项目后续完善的几个方向。

  • 计划完善 Device 型号识别,需要收集各种 Device 的硬件特征。

  • 对通用 Linux 系统做适配优惠。

  • 不同风格 UI 的加入。

链接表

以上是关于树莓派4B+ Centos7 部署k3s集群工具的主要内容,如果未能解决你的问题,请参考以下文章

树莓派Pi4b 8G版本安装centos7

记录树莓派4B基于CENTOS7搭建局域网SMB(SAMBA)步骤

树莓派4b部署LNMP+Tor,搭建在Dark web上的网站

用树莓派4b安装了centos7,开启后一直显示cannot enable. maybe the usb cable is bad?

如何将PaddleDetection模型在树莓派4B上部署?

树莓派4B 串口通信