在之前的博客《部署Rasa框架到Kubernetes集群并分配GPU资源》中,我们成功在k8s集群中部署了rasa框架。这一节我们来看看如何结合statefulset对这个部署进行改进。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
文章目录
改进方向
之前我们通过Deployment的方式去部署的Rasa框架,但是这样有个很明显的问题,除非对Deployment更换image,不然很难将训练的模型更新到框架中,每次测试都要生成新的image,很不方便。于是准备
- 在本地弄一个目录,和容器的
/app
目录进行一个volume映射,直接更新本地目录就达到了更新容器模型的目的,便于快速测试 - 而且因为Rasa不支持热更新模型(也许是我没发现怎么热更新),每次更新完模型需要重新起一下容器,这个过程需要确保新模型不会被删除
综合以上两点需求,发现Statefulset可以圆满完成任务。
实际操作
以下的yaml文件都放在了我的Github仓库。
创建pv
因为我这个集群只有一台GPU的node被设置来分配pod,本来想试试能不能直接在node上搞一个目录类似volume一样做为pv,后来发现这种操作已经被官方文档给否决
HostPath (Single node testing only – local storage is not supported in any way and WILL NOT WORK in a multi-node cluster)
于是老老实实按照之前使用的NFS方法,单独搞了台机器弄了三个目录过来
root@control-plane-1:~# showmount -e 172.29.56.177
Export list for 172.29.56.177:
/share/nfs3 172.29.0.0/16
/share/nfs2 172.29.0.0/16
/share/nfs1 172.29.0.0/16
NFS操作可以参考《Centos7搭建NFS文件共享服务器以及客户端连接》
同时创建出3个pv来
root@control-plane-1:~# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
test-pv-nfs1 5Gi RWO Retain Available gold 6s
test-pv-nfs2 8Gi RWO Retain Available gold 6s
test-pv-nfs3 10Gi RWO Retain Available gold 6s
NFS创建PV操作可以参考《【Kubernetes 014】持久存储PersistentVolume原理以及配合StatefulSet实现有状态服务实际操作详解》
创建statefulset
创建yaml文件rasa-statefulset-noinit.yaml
如下
apiVersion: v1
kind: Service
metadata:
name: rasa-headless-service
namespace: default
labels:
app: rasa-headless
spec:
type: ClusterIP
clusterIP: None #<-- Careful
selector:
app: rasa-reception
ports:
- name: http
port: 5005