有些用户对 Fox-Edge 存在 k8s 的容器化部署需求,所以灵狐提供了 docker 部署的参考教程。
该文档是面向k8s的docker运营人员的高阶文档,每一个项目的docker镜像具有甲方项目的针对性。
docker运营人员需要根据自己的甲方市场项目,需要做一些必要的服务裁剪。
Fox-Edge通常被用户当作被部署在边缘端的软件系统,主要的硬件安装环境是 物理设备 ,比如 arm/x86 这类小型嵌入式设备、软路由、工控机。
此时,设备环境对Fox-Edge来说,是一个在可读/可写上有 充分权限 的用户环境。
Fox-Edge同样也支持被用户安装在性能较强的云端或者管理中心的服务器群上,此时服务器的资源比较丰富, 用户会采用k8s的 docker 方案,将硬件环境划分为许许多多 用户名空间 ,按docker的方式进行各服务的管理,Fox-Edge只是众多服务之一。
此时,doccer容器环境对Fox-Edge来说,是在可读/可写上,比较受限 的用户环境。
如果对此不理解的话,可以理解为类似某款软件,它的硬盘版和光盘版之间的区别。
用户环境的受限与不受限,是真机部署和docker部署之间,最主要的差异。在k8s下为Fox-Edge子系统制作镜像的时候,请时刻注意这点。
k8s也是面向服务器群的容器管理方案,有些用户用它来作为云端或者现场管理中心的集中管理平台。
在k8s环境中,通常要求每个服务是无状态的,允许每个服务运行多个进程实例。
在docker镜像的制作和管理上,k8s和k3s的风格习惯是不同的,在制作镜像上也是不同的。
k3s是部署在用户现场的小型化设备,所在的边缘端工控机,其硬件资源有限,所以通常是将整个Fox-Edge系统打包成一个镜像,节省计算机资源和简化管理。
k8s是部署在云端或者管理中心的服务器集群中,这些服务器的硬件资源非常丰富,而且Fox-Edge的各服务只是k8s管理的众多服务的一部分。所以,通常Fox-Edge的服务部署, 要遵守k8s的习惯,也就是每个java服务独立打包成一个docker镜像,然后允许多实例运行。
Fox-Edge原来是直接部署在物理设备之中,并自带应用的远程部署、升级、卸载、配置的管理方案,这是灵狐所推荐的技术方案。
k8s的docker方案,也是远程部署、升级、卸载、配置的管理方案。
这意味着,是不能采用Fox-Edge自带的部署、升级、卸载、配置的部件部件管理方案,即不能使用通过Fox-Edge的仓库界面进行安装的方案。
所以,k8s的docker方案的高阶技术方案如下:
1、先在一台物理样机之中,安装部署一套Fox-Edge系统,并根据甲方项目的需要,并在其中安装所需要的各种服务、解码器、模板。
2、从部署完Fox-Edge的样机之中,剥离出/opt/fox-edge的完整目录
3、针对后台、前台的每一个服务,分别制作docker文件
4、为需要访问外部设备,制作提供数据卷,让它能够加载到宿主机上的/tmp 目录
5、通过上述素材,制作出面向某甲方物联网项目的匹配的前端、后端docker镜像
6、在k8s之中应用这些docker镜像,进行实例部署
现在找一台物理样机,或者用虚拟机建立一个样机环境,然后在其中安装一套 Fox-Edge.
具体安装过程,可以参考前文的Fox-Edge x86部署篇
以Ubuntu 22.0版本作为范例,通过下面的命令,进行Docker的一键式安装
apt-get update -y && \
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
apt-get install docker-ce docker-ce-cli containerd.io -y
docker的安装结果如下:
可以参考,k3s版的Dockerfile制作过程。
但是需要注意的是,
k8s采用的是Fox-Edge中一个服务一个docker镜像的方案,而k3s采用的是整个Fox-Edge系统一个docker镜像的方案。
k8s采用的是每个docker镜像多个实例的方案,而k3s采用的一个docker镜像一个运行实例的方案。
device服务和manager服务,运行的程序不仅仅是自己进程的xxx.jar,还包括解码器的jar,制作docker镜像的是否要将两部分jar都打到docker镜像之中。 如果你忘记一起打了解码器的jar到镜像里,这两个服务的docker镜像启动后,会出现找不到静态解码器的问题。