面向服务的软件系统实验踩坑记录(实验三实验四)
由于该门课程对于没有基础的人(比如我)十分不友好,于是把遇到的问题记录下来,献给有缘人
由于本人水平问题,实验一和实验二遇到的坑大部分人应该不会遇到,所以就不记录了,如果需要帮助可以在评论区里留言
实验三内容概述:服务器上安装docker,k8s,之后把docker镜像部署到k8s中,并扩容
遇到的问题及解决办法:
1.系统不要选ubuntu,会遇到诸多版本不兼容问题。使用centos也不要按指导书上的步骤安装k8s和docker,安装方法网上一搜就能搜到。
2.flannel插件我看老师装的非常麻烦,我用的是calico,只需要一句命令就行kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml
3.如果你是和小伙伴共用两台服务器,安装了插件,还是出现只有主节点ready的情况,可能是你们俩的k8s版本不一致。具体表现为:首先使用systemctl status kubelet –l命令查看子节点状态,发现节点状态是正常的,然后使用journalctl -f -u kubelet命令,发现错误kubernetes node error: Failed to initialize CSINode: error updating CSINode annotation: timed out...
这种情况就是子节点k8s版本比父节点高了,需要在子节点的config.yaml文件中添加:
featureGates:
CSIMigration: false
然后使用命令:
systemctl daemon-reload
systemctl restart kubelet
4.yaml文件是严格缩进的
实验四内容概述:将实验二的代码打包成docker镜像,部署到k8s上,并扩容,同时要验证扩容成功
遇到的问题及解决办法:
1.打包不要用maven打包。这里我用的build artifacts。打包之前需要改变项目结构,把测试文件放在main文件夹里,这样MANIFEST.MF文件会比较容易识别该类作为启动类,同时要把MANIFEST.MF文件放在resource文件夹的META-INF文件夹里面,不然打包的时候无法识别MANIFEST.MF,如果不这样做会报错no main manifest。
2.老师给的代码里下载.xsd的链接失效了,需要从网上找一份导入项目当中,不然会报错
3.关于注册中心地址:如果docker run的时候出现以下报错就说明dubbo-admin里面配置的注册中心地址和provider.xml里的不一样,dubbo-admin里面指定的注册中心IP要使用docker inspect zookeeper,在其中的network里面查看,这样在浏览器中输入服务器外网IP:2181就可以进入dubbo管理中心页面,如果把provider.xml里面的注册中心地址改成dubbo-admin里面指定的注册中心IP,就可以使用docker run运行镜像,但是后来我发现本实验并不需要docker run,可以在yaml文件里添加conmmand指令java -jar自动运行provider,这样只要把provider.xml和consumer.xml里面的注册中心地址改成master的外网地址,就可以成功注册和消费服务。