打开技术文档,首先看了一下目录,简单了解一下框架结构,目录的其中重点是“下载安装” 和 ”本机安装测试“,这两部分。
由于没有学过K8s的缘故,所以刚开始看命令都是一知半解,啃了半天的K8s快速入门,理解基础知识如Pod是什么。
Shifu安装方式
安装前提是:都需要安装Docker,文中是安装 Docker Desktop,我们是Linux安装Docker就行
从文档中总结得出,Shifu安装方式共分为三种:
- 下载准备好的Shifu安装包(Docker镜像压缩文件)并安装,Shifu会快捷方便的在Docker中运行
- 本机安装中:手动安装Shifu所需要的组件如 kubectl ,kind ,再安装 Shifu仓库 。
就是各种组件配置安装很麻烦,并且没有deviceshifu的pods资源,无法进行资源的交互,也就是无法使用shifu的API,使用数字孪生的命令(这也是卡了我许久的原因,一直以为是环境配置错误,所以一直回滚数据,但运行时还是提示无法连接本地主机,或无资源)# clone Shifu仓库 git clone https://github.com/Edgenesis/shifu.git cd shifu # 在集群中安装Shifu sudo kubectl apply -f pkg/k8s/crd/install/shifu_install.yml
-
在生产环境部署 Shifu 前您需要先安装 Kubernetes。
Shifu 提供了一键安装的方式,您可以使用如下命令将 Shifu 安装到您的集群中:
kubectl apply -f https://raw.githubusercontent.com/Edgenesis/shifu/v0.1.1/pkg/k8s/crd/install/shifu_install.yml
1.使用Docker运行Shifu
环境别人已经给你搭好了,运行环境在容器中,已经提交为镜像并转为了压缩文件,我们只需要使用就可以了
安装测试
先根据 “下载安装” 中的
1.2 下载 Shifu 安装包
curl -LO https://demo.shifu.run/demo-content/shifu_demo_aio_linux_amd64.tar
1.3 将所下载的安装包解压到testdir文件夹中
mkdir testdir && tar -xvf shifu_demo_aio_linux_amd64.tar -C testdir && cd testdir
1.4 运行Demo
chmod +x scripts/deviceshifu-demo-aio.sh && sudo ./scripts/deviceshifu-demo-aio.sh run_demo
注意这里运行的时候有一个问题:
每次都是这里报错,但本机Kind的环境已经配置好了,而且这是Docker里的环境啊。。怎么会找不到?
于是去重启并重新修改了三次环境(回滚重装),都没有解决问题
去报错提示信息 ./scripts/deciceshifu-demo-aio.sh :line 97 这里看看
也就是一个kind命令,在shell文件中执行,找不到kind 这个命令行(这时候我还没有看见执行命令行中的sudo 字段)
于是去在本地安装kind 和 kubctl 环境,并将该文件中的所有kind命令修改为 /usr/local/bin/kind ,kubctl同理。于是可以运行成功并自动创建集合了。
之后又总结了一下其他的解决办法:
程序是在 sudo ./scripts.... 下运行的,所以必须要在刚刚创建的testdir目录下,并且拥有sudo访问该目录的权限,否则会在执行 kind 和 kubctl 命令时,会报sudo: command not found错误
有三个解决办法:
1.删去sudo运行
chmod +x scripts/deviceshifu-demo-aio.sh && ./scripts/deviceshifu-demo-aio.sh run_demo
2.配置 /etc/sudoers
vim /etc/sudoers
在里面找到secure_path行,添加到你需要访问的路径
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/root/go/bin:
原理参考如下:
(8条消息) sudo: command not found 的解决方法_ByteSaid的博客-CSDN博客
3.(本人第一次的解决过程)在本地配置安装好环境 如 kubctl和 Kind ,并修改./scripts/deciceshifu-demo-aio.sh 文件,将其中命令 的环境改为本地的命令地址
2.本地主机环境配置测试Shifu
安装Docker -- > 安装kubctl --> 安装 go --> 通过go/或直接 安装kind --> 创建集群 -->下载镜像并加载到集群 --> 安装Shifu,在集群中安装Shifu
测试
sudo kubectl get pods -A
结果:(缺少deviceshifu服务)
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6d4b75cb6d-gjzmw 1/1 Running 0 34s
kube-system coredns-6d4b75cb6d-rncrk 1/1 Running 0 34s
kube-system etcd-kind-control-plane 1/1 Running 0 49s
kube-system kindnet-t69bx 1/1 Running 0 34s
kube-system kube-apiserver-kind-control-plane 1/1 Running 0 49s
kube-system kube-controller-manager-kind-control-plane 1/1 Running 0 48s
kube-system kube-proxy-7dfvm 1/1 Running 0 34s
kube-system kube-scheduler-kind-control-plane 1/1 Running 0 48s
local-path-storage local-path-provisioner-9cd9bd544-6zgpv 1/1 Running 0 34s
shifu-crd-system shifu-crd-controller-manager-94c8c779d-czvkx 2/2 Running 0 17s
Shifu使用
所有的操作都可以总结为以下四步
- 创建数字孪生
- 查看pod(可选)
- 进入nginx,准备调用接口
- 与数字孪生进行交互(调用程序)
与AGV交互
与温度计交互
与酶标仪交互
与PLC交互
与机械臂交互
与OPC UA设备交互
与 Socket 设备交互
与 MQTT 设备交互
总结:
太过依赖文档给出的命令,此次出错的大部分时间浪费在没有看见 sudo 的调用上,经验也有所不足,才无法快速定位到错误本身,而在配置环境上浪费了大部分时间