Elixir-使用分布式Cachex和Kubernetes。如何设置:节点配置

Elixir-使用分布式Cachex和Kubernetes。如何设置:节点配置,kubernetes,elixir,Kubernetes,Elixir,所以我想使用Cachex在集群中共享临时数据。Cachex在配置文件中获取一个:nodes列表。这在测试中非常有效,因为我可以硬编码[:”a@My-笔记本电脑“,:”b@My-笔记本电脑“],它可以工作,但Kubernetes的名字是动态的。如何设置这些参数?我认为这应该可以: 在pod配置中,为pod的IP设置一个ENV变量 apiVersion: v1 kind: Pod spec: containers: - name: my-container env:

所以我想使用Cachex在集群中共享临时数据。Cachex在配置文件中获取一个
:nodes
列表。这在测试中非常有效,因为我可以硬编码
[:”a@My-笔记本电脑“,:”b@My-笔记本电脑“]
,它可以工作,但Kubernetes的名字是动态的。如何设置这些参数?

我认为这应该可以:

在pod配置中,为pod的IP设置一个ENV变量

apiVersion: v1
kind: Pod
spec:
  containers:
    - name: my-container
      env:
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
然后在您的elixir应用程序中,您现在可以使用
myapp@${MY_POD_IP}

以下是向应用程序公开节点/群集信息的文档


我还发现了这篇博文,其中解释了更多的内容,即您正在尝试做什么。

我认为这应该是可行的:

在pod配置中,为pod的IP设置一个ENV变量

apiVersion: v1
kind: Pod
spec:
  containers:
    - name: my-container
      env:
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
然后在您的elixir应用程序中,您现在可以使用
myapp@${MY_POD_IP}

以下是向应用程序公开节点/群集信息的文档


我还发现了这篇博文,其中详细解释了您正在尝试做的事情。

我在前一段时间的日常工作中查看了这篇博文,而Cachex没有动态节点成员身份的解决方案。它希望您将所有节点名称都预定义为静态。您可以使用有状态集在Kubernetes中实现这一点,但如果您希望保持缓存分布在所有节点上,那么您将放弃所有将来自动缩放的可能性

更好的解决方案是IMO。Nebulex不关心管理与节点或其成员的连接。它只关心在
[Node.self()| Node.list()]
(集群中的所有节点)之间保持缓存的分布。它都在PG2上运行,PG2是一个分布式pubsub实现。它能够在节点加入或离开时传输数据,并将其切分,以便在节点之间具有重复数据。它甚至允许您匹配节点名称来存储缓存数据

为了以动态方式管理节点之间的连接,有一个名为的库,它实际上内置了Kubernetes支持。Libcluster将使用Kubernetes DNS,或者您可以创建一个服务于所有elixir吊舱的IP地址的DNS。Libcluster将在轮询间隔ping此服务,并尝试加入erlang群集

当两个节点都设置好后,libcluster将管理将节点保留在一个集群中,而Nebulex将管理在所有节点之间保持数据同步。它很酷,我们还没有遇到任何问题


我不打算在这里写任何源代码,因为所有这些东西的文档都写得很好。如果您有任何问题,请告诉我。

我前段时间在我的日常工作中查看过这个,Cachex没有动态节点成员身份的解决方案。它希望您将所有节点名称都预定义为静态。您可以使用有状态集在Kubernetes中实现这一点,但如果您希望保持缓存分布在所有节点上,那么您将放弃所有将来自动缩放的可能性

更好的解决方案是IMO。Nebulex不关心管理与节点或其成员的连接。它只关心在
[Node.self()| Node.list()]
(集群中的所有节点)之间保持缓存的分布。它都在PG2上运行,PG2是一个分布式pubsub实现。它能够在节点加入或离开时传输数据,并将其切分,以便在节点之间具有重复数据。它甚至允许您匹配节点名称来存储缓存数据

为了以动态方式管理节点之间的连接,有一个名为的库,它实际上内置了Kubernetes支持。Libcluster将使用Kubernetes DNS,或者您可以创建一个服务于所有elixir吊舱的IP地址的DNS。Libcluster将在轮询间隔ping此服务,并尝试加入erlang群集

当两个节点都设置好后,libcluster将管理将节点保留在一个集群中,而Nebulex将管理在所有节点之间保持数据同步。它很酷,我们还没有遇到任何问题

我不打算在这里写任何源代码,因为所有这些东西的文档都写得很好。如果你有任何问题,请告诉我