首页 > 编程知识 正文

prometheus kubernetes,kubernetes集群数据存储在哪

时间:2023-05-05 07:47:20 阅读:179107 作者:1245

1 )我刚进公司大约4个月了。 在此期间,一直在进行与监视警报相关的任务。 使用的三方组件是Prometheus和警报管理器。 通过使用,我同时了解了Prometheus和kubernetes。 今天想谈谈在k8s集群中使用local storage存储数据的问题2、提出问题。 在k8s集群中,pod可在每个节点之间调度,并且如果一个节点的资源不足,则pod可被调度到另一个节点。 如果将使用本地存储的Prometheus调度到另一个node,并且使用新节点的本地存储,则此时数据将到处跑,并且每个node都是唯一的,所有node必须合并在一起才能成为完整的数据然后,如果设置了多个repcaset,则会发生多次写入。 此时,我们再次从Prometheus查询数据时,得到的金额数据可能不正确。 例如,如果第一个请求命中nodeA的PrometheusA,第二个请求命中nodeB的PrometheusB,则这两次查询的结果不同。 你怎么解决这个问题? 3、问题分析3.1、首先必须指出的是,假设没有设置污染的trains。 也就是说,默认情况下,业务pod不能在主节点上运行。 在master node上运行k8s集群使用的基础pod。 (简单地说,ps,trains的污点是node的属性,如果pod不能接受污点,则pod不会调度为单词node。 设定pod容许也很简单,官方有专用的文档。 pod容忍度更新为亲和性和反亲和性,也称为亲缘性和非亲缘性,可以通过nodeName、nodeSelector、affinity设定。 3.2、先分析一下单拍的情况。 如上所述,pod计划为任何一个非主节点。 那么,不应该保证群集中只有一个非主节点。 说实话,逻辑上是可能的,但问题是生产环境中一定有多台主节点和多台非主节点。 当主节点挂起时,可以从非主节点中选择并举出新的主节点,非主节点挂起时,将原来在此节点上的业务pod调度到其他非主节点,以实现高可用性所以,除了主节点以外,只有一个节点。 3.3、接着分析单拍。 前面已经提到了调度问题,把Prometheus固定地调度在某个节点上不就行了吗? 然后,在这个node上使用本地存储器就可以了,但是为了理解耦合,使用pv和pvc比较合适。 pv使用这个存储类。 于是,对该storageClass可以设定访问模式、多次写入、多次读取、单次写入,并可以设定数据的保存方法。 pv被杀后,是否清理数据。 然后将pv绑定到pvc,向pv请求资源。 一个pv能够与多个pvc绑定,相当于pv是一个资源池。 pvc通过绑定从资源池中获取数据,pod使用pvc创建存储即可。 重要的是将存储绑定到机器,而不是pod。 这样,解决方案就出来了。 绑定pv和node就可以了。 此外,通过实验发现,当pod使用pvc使用pv时,pod被调度在绑定pv的机器上。 如果将pod强制调度到其他节点,则会直接报告错误。 3.4、单独写的问题可以使用pv绑定node解决,但是很多写问题怎么解决呢? 不容易。 kubernetes使用了statefulSet,也就是有状态的pod,但每个pod都是唯一的。 在这种情况下,可以通过template为每个pod设置单独的存储pv,但这样做的问题是大家都是独立的,而一个写入请求只命中一个pod。 如果一个写入请求固定在所有pod上,读取请求可以随机命中任意一个pod就好了,但不知道有没有这样的设置方法。 ingress可能不错,但我没试过。 3.5、这时,一个机灵的小伙伴说,可以用replicaSet或statefulSet使用多个pvc,这多个pvc用一个pv不就行了吗,实际上,我之前说过,一个pvc 想想看,其实和nfs和Kafka相比,可以使用三方存储,但笔者并不擅长辛苦。 否则,也许可以做实验验证一下。 结束了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。