Kubernetes-Akka集群部署

Nag*_*sha 5 akka-cluster kubernetes akka-http

我们有一个docker映像和一个相应的yaml文件,用于使用kubernetes进行部署。我们构建的应用程序在带有akka-http的scala中。我们使用了akka集群。我们在使用Pod ip的应用程序代码中使用的配置文件中,有一个特定的变量(在我们的情况下为种子节点-akka群集)。但是,除非完成部署,否则我们不会获得Pod ip。我们应该如何解决这个问题?环境变量会有所帮助吗?

更具体地说,将docker映像部署在容器中的容器中之后,并且当容器启动时,容器IP已被分配。那么,在容器中开始该过程之前,我们可以通过编程方式或其他方式在代码或配置文件中配置Pod ip吗?

供参考,这是我们的配置文件:

akka {
  actor {
    provider = "akka.cluster.ClusterActorRefProvider"
  }    
  remote {
    log-remote-lifecycle-events = off
    netty.tcp {
      hostname = "127.0.0.1"
      port = 0
    }
  }
  cluster {
    seed-nodes = [
      "akka.tcp://our-system@127.0.0.1:3000",
      "akka.tcp://our-system@127.0.0.1:3001",
    ],
    metrics {
      enabled = off
    }
  }    
}
service {
  validateTokenService {
     ml.pubkey.path = "<filePath>"
  }
  ml_repository {
    url = <url address>
  }
  replication.factor = 3
  http.service.interface = "0.0.0.0"
  http.service.port = 8080
}
Run Code Online (Sandbox Code Playgroud)

在上面的文件中,我们需要使用pod-ip来代替akka.remote.netty.tcp.hostname作为“ 127.0.0.1”。因此,我们可以在种子节点中将其用作:

seed-nodes = [
          "akka.tcp://our-system@hostname:3000",
          "akka.tcp://our-system@hostname:3001",
        ],
Run Code Online (Sandbox Code Playgroud)

我们该怎么做?提前致谢。

Dre*_*ams 3

我尝试过非常相似的东西。您可以做的是使用有状态集Kubernetes-Stateful set。有状态集有一个命名约定,并且 Pod 将被相应地命名 - 您可以在链接中阅读有关该内容的更多信息。这样,您就可以对种子节点的值进行硬编码,因为您知道 Pod 将如何命名。但是,它们有一个缺点,有状态集还不支持滚动更新(主要是因为它们是这样设计的。)这篇文章一步一步有很好的解释:有状态集 - akka 集群 这篇文章一起解释了所有内容 - 所以发布一个链接而不是在此处复制步骤。希望这可以帮助