SiteWhere 2.0内部微服务需要持久化数据,官方部署文档要求使用helm安装sitewhere 2.0 之前先安装rook.io(提供数据卷功能)。在安装好rook,并确认rook的pod都处于“running”后,继续执行部署文档步骤,最后使用下面命令安装sitewhere 2.0:
helm install --name sitewhere sitewhere/sitewhere
在等待接近2个小时后,发现sitewhere 依旧有几个pod无法正常工作,使用kube describe pods xxxx无法定位问题源头。在github上发起了issues请求帮助. 项目管理员非常给力,很快进行了回复。在管理员的帮助下,开始注意查看PVC状态,感觉到问题应该是出在数据卷上,sitewhere的Pod应该是因为无法正常获取PersisteVolume而无法运行。(可能是无法访问到rook提供的数据卷,或者rook并没有正常工作)。转而去查阅kubernetes关于数据卷的概念,内容比较多,看了一些资料有了大致的了解,发现我的k8s 没有默认的StorageClass及对应的PersistentVolume。k8s文档提示可以使用nfs作为PV。于是搭建NFS服务器,将两个目录共享出来,利用了github项目 nfs-client-provisioner将一个目录设为默认StorageClass,命名为“nfs-client”,将另外一个目录命名为standard,使用命令如下,
helm install --set storageClass.defaultClass=true --set nfs.server=x.x.x.x --set nfs.path=/exported/path stable/nfs-client-provisioner
helm install --set storageClass.name=standard --set nfs.server=x.x.x.x --set nfs.path=/exported/path stable/nfs-client-provisioner
查看集群所有sc
NAME PROVISIONER AGE
nfs-client (default) cluster.local/original-echidna-nfs-client-provisioner 5d16h
rook-ceph-block ceph.rook.io/block 52d
standard cluster.local/vm-nfs-nfs-client-provisioner 5d18h
sitewhere 2.0 也可以不使用rook,使用其他StorageClass,因此这里替换了rook,helm安装命令类似下面,这里不是最后的完整启动命令,因为本集群不提供 loadbalancer服务。
helm install --name sitewhere --set persistence.storageClass=SC_name sitewhere/sitewhere
在sitewhere 2.0 github页面发起issues,获知可以用NodePort代替LoadBalancer。最终启动命令如下:
helm install --name sitewhere \
--set infra.mosquitto.service.type=NodePort \
--set services.web_rest.service.http.type=NodePort \
--set persistence.storageClass=nfs-client \
sitewhere/sitewhere
终于,所有pod处于running状态。
注意:将sitewhere替换为实际名字。
helm del sitewhere --purge
kubectl delete pvc -l release=sitewhere